parent
005c7fa7ef
commit
9905cc769d
@ -0,0 +1,7 @@
|
|||||||
|
package info.bukova.isspst.dao;
|
||||||
|
|
||||||
|
import info.bukova.isspst.data.GlobalSettings;
|
||||||
|
|
||||||
|
public interface GlobalSettingsDao extends BaseDao<GlobalSettings> {
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
package info.bukova.isspst.dao.jpa;
|
||||||
|
|
||||||
|
import info.bukova.isspst.dao.GlobalSettingsDao;
|
||||||
|
import info.bukova.isspst.data.GlobalSettings;
|
||||||
|
|
||||||
|
public class GlobalSettingsDaoJPA extends BaseDaoJPA<GlobalSettings> implements
|
||||||
|
GlobalSettingsDao {
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,22 @@
|
|||||||
|
package info.bukova.isspst.data;
|
||||||
|
|
||||||
|
import javax.persistence.Column;
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.Table;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Table(name = "GLOBALSETTINGS")
|
||||||
|
public class GlobalSettings extends BaseData {
|
||||||
|
|
||||||
|
@Column(name = "DATA", length = 1048576)
|
||||||
|
private String data;
|
||||||
|
|
||||||
|
public String getData() {
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setData(String data) {
|
||||||
|
this.data = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,50 @@
|
|||||||
|
package info.bukova.isspst.data;
|
||||||
|
|
||||||
|
import info.bukova.isspst.mail.MailMessage;
|
||||||
|
|
||||||
|
public class SettingsData {
|
||||||
|
|
||||||
|
private boolean enableRequirements;
|
||||||
|
private MailMessage newReqTemplate;
|
||||||
|
private MailMessage authReqTemplate;
|
||||||
|
private MailMessage confReqTemplate;
|
||||||
|
|
||||||
|
public SettingsData() {
|
||||||
|
newReqTemplate = new MailMessage();
|
||||||
|
authReqTemplate = new MailMessage();
|
||||||
|
confReqTemplate = new MailMessage();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isEnableRequirements() {
|
||||||
|
return enableRequirements;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEnableRequirements(boolean enableRequirements) {
|
||||||
|
this.enableRequirements = enableRequirements;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MailMessage getNewReqTemplate() {
|
||||||
|
return newReqTemplate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNewReqTemplate(MailMessage newReqTemplate) {
|
||||||
|
this.newReqTemplate = newReqTemplate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MailMessage getAuthReqTemplate() {
|
||||||
|
return authReqTemplate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAuthReqTemplate(MailMessage authReqTemplate) {
|
||||||
|
this.authReqTemplate = authReqTemplate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MailMessage getConfReqTemplate() {
|
||||||
|
return confReqTemplate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setConfReqTemplate(MailMessage confReqTemplate) {
|
||||||
|
this.confReqTemplate = confReqTemplate;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,110 @@
|
|||||||
|
package info.bukova.isspst.services.settings;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.StringReader;
|
||||||
|
import java.io.StringWriter;
|
||||||
|
|
||||||
|
import org.exolab.castor.xml.MarshalException;
|
||||||
|
import org.exolab.castor.xml.Marshaller;
|
||||||
|
import org.exolab.castor.xml.Unmarshaller;
|
||||||
|
import org.exolab.castor.xml.ValidationException;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import info.bukova.isspst.data.GlobalSettings;
|
||||||
|
import info.bukova.isspst.data.SettingsData;
|
||||||
|
import info.bukova.isspst.services.AbstractOwnedService;
|
||||||
|
import info.bukova.isspst.services.IsspstException;
|
||||||
|
|
||||||
|
public class GlobalSettingServiceImpl extends AbstractOwnedService<GlobalSettings> implements
|
||||||
|
GlobalSettingsService {
|
||||||
|
|
||||||
|
private final static Logger log = LoggerFactory.getLogger(GlobalSettingsService.class);
|
||||||
|
private final static String MARSHAL_ERROR = "Cannot marshal settings data: ";
|
||||||
|
private final static String UNMARSHAL_ERROR = "Cannot unmarshal settings data: ";
|
||||||
|
|
||||||
|
private Marshaller marshaller;
|
||||||
|
private Unmarshaller unmarshaller;
|
||||||
|
private SettingsData settings;
|
||||||
|
|
||||||
|
public GlobalSettingServiceImpl(Marshaller marshaller, Unmarshaller unmarshaller) {
|
||||||
|
this.marshaller = marshaller;
|
||||||
|
this.unmarshaller = unmarshaller;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
@PreAuthorize("hasPermission(this, 'PERM_ADD')")
|
||||||
|
public void add(GlobalSettings entity) {
|
||||||
|
if (!this.getAll().isEmpty()) {
|
||||||
|
throw new IsspstException("Global settings allready exists");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (entity.getData() == null || entity.getData().isEmpty()) {
|
||||||
|
SettingsData data = new SettingsData();
|
||||||
|
entity.setData(marshalData(data));
|
||||||
|
}
|
||||||
|
|
||||||
|
super.add(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String marshalData(SettingsData data) {
|
||||||
|
StringWriter wr = new StringWriter();
|
||||||
|
try {
|
||||||
|
marshaller.setWriter(wr);
|
||||||
|
marshaller. marshal(data);
|
||||||
|
} catch (MarshalException e) {
|
||||||
|
log.error(MARSHAL_ERROR + e.getMessage());
|
||||||
|
} catch (ValidationException e) {
|
||||||
|
log.error(MARSHAL_ERROR + e.getMessage());
|
||||||
|
} catch (IOException e) {
|
||||||
|
log.error(MARSHAL_ERROR + e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
return wr.toString();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private SettingsData unmarshalData(String data) {
|
||||||
|
StringReader sr = new StringReader(data);
|
||||||
|
try {
|
||||||
|
unmarshaller.setClass(SettingsData.class);
|
||||||
|
return (SettingsData) unmarshaller.unmarshal(sr);
|
||||||
|
} catch (MarshalException e) {
|
||||||
|
log.error(UNMARSHAL_ERROR + e.getMessage());
|
||||||
|
} catch (ValidationException e) {
|
||||||
|
log.error(UNMARSHAL_ERROR + e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
public SettingsData getSettings() {
|
||||||
|
if (settings == null) {
|
||||||
|
GlobalSettings gs = this.getAll().get(0);
|
||||||
|
settings = unmarshalData(gs.getData());
|
||||||
|
}
|
||||||
|
return settings;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
@PreAuthorize("hasPermission(this, 'PERM_EDIT')")
|
||||||
|
public void updateSettings() {
|
||||||
|
if (this.getAll().isEmpty()) {
|
||||||
|
throw new IsspstException("Global settings does not exists");
|
||||||
|
}
|
||||||
|
|
||||||
|
GlobalSettings gs = this.getAll().get(0);
|
||||||
|
gs.setData(marshalData(settings));
|
||||||
|
|
||||||
|
super.update(gs);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,12 @@
|
|||||||
|
package info.bukova.isspst.services.settings;
|
||||||
|
|
||||||
|
import info.bukova.isspst.data.GlobalSettings;
|
||||||
|
import info.bukova.isspst.data.SettingsData;
|
||||||
|
import info.bukova.isspst.services.Service;
|
||||||
|
|
||||||
|
public interface GlobalSettingsService extends Service<GlobalSettings> {
|
||||||
|
|
||||||
|
public void updateSettings();
|
||||||
|
public SettingsData getSettings();
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,60 @@
|
|||||||
|
package info.bukova.isspst.ui.settings;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.zkoss.bind.annotation.BindingParam;
|
||||||
|
import org.zkoss.bind.annotation.Command;
|
||||||
|
import org.zkoss.bind.annotation.Init;
|
||||||
|
import org.zkoss.bind.annotation.NotifyChange;
|
||||||
|
import org.zkoss.zk.ui.select.annotation.WireVariable;
|
||||||
|
import org.zkoss.zul.Window;
|
||||||
|
|
||||||
|
import info.bukova.isspst.data.Requirement;
|
||||||
|
import info.bukova.isspst.data.SettingsData;
|
||||||
|
import info.bukova.isspst.mail.MailMessage;
|
||||||
|
import info.bukova.isspst.services.settings.GlobalSettingsService;
|
||||||
|
import info.bukova.isspst.sort.ReflectionTools;
|
||||||
|
import info.bukova.isspst.ui.LocaleConverter;
|
||||||
|
|
||||||
|
public class GlobalSettingsVM {
|
||||||
|
|
||||||
|
@WireVariable
|
||||||
|
private GlobalSettingsService settingsService;
|
||||||
|
private SettingsData settings;
|
||||||
|
private LocaleConverter locConverter;
|
||||||
|
|
||||||
|
@Init
|
||||||
|
public void init() {
|
||||||
|
settings = settingsService.getSettings();
|
||||||
|
locConverter = new LocaleConverter();
|
||||||
|
}
|
||||||
|
|
||||||
|
public SettingsData getSettings() {
|
||||||
|
return settings;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Command
|
||||||
|
public void save(@BindingParam("window") Window window) {
|
||||||
|
settingsService.updateSettings();
|
||||||
|
window.detach();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getRequirementFields() {
|
||||||
|
return ReflectionTools.getEntityFields(Requirement.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isCanSave() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocaleConverter getLocConverter() {
|
||||||
|
return locConverter;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Command
|
||||||
|
@NotifyChange("settings")
|
||||||
|
public void insertField(@BindingParam("field") String field, @BindingParam("message") MailMessage message) {
|
||||||
|
message.setText(message.getText() + ":" + field + ":");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Binary file not shown.
After Width: | Height: | Size: 3.1 KiB |
@ -0,0 +1,108 @@
|
|||||||
|
<?page title="EMail" contentType="text/html;charset=UTF-8"?>
|
||||||
|
<zk>
|
||||||
|
<window id="editWin" border="normal" closable="true" apply="org.zkoss.bind.BindComposer"
|
||||||
|
viewModel="@id('vm') @init('info.bukova.isspst.ui.settings.GlobalSettingsVM')" width="620px"
|
||||||
|
binder="@init(queueName='email')">
|
||||||
|
<caption src="/img/settings.png" zclass="form-caption" label="${labels.GlobalSettings}" />
|
||||||
|
|
||||||
|
<tabbox orient="vertical" height="400px">
|
||||||
|
<tabs width="100px">
|
||||||
|
<tab label="${labels.Requirements}"/>
|
||||||
|
<tab label="${labels.EMails}"/>
|
||||||
|
</tabs>
|
||||||
|
<tabpanels>
|
||||||
|
<tabpanel>
|
||||||
|
<div>
|
||||||
|
<checkbox label="${labels.EnableRequirements}" checked="@bind(vm.settings.enableRequirements)"/>
|
||||||
|
</div>
|
||||||
|
</tabpanel>
|
||||||
|
<tabpanel>
|
||||||
|
<tabbox>
|
||||||
|
<tabs>
|
||||||
|
<tab label="${labels.NewRequirement}"/>
|
||||||
|
<tab label="${labels.AuthRequirement}"/>
|
||||||
|
<tab label="${labels.ConfirmRequirement}"/>
|
||||||
|
</tabs>
|
||||||
|
<tabpanels>
|
||||||
|
<tabpanel>
|
||||||
|
<grid>
|
||||||
|
<columns>
|
||||||
|
<column hflex="min"/>
|
||||||
|
<column/>
|
||||||
|
</columns>
|
||||||
|
<rows>
|
||||||
|
<row>
|
||||||
|
<label value="${labels.MailSubject}"/> <textbox value="@bind(vm.settings.newReqTemplate.subject)" width="100%"/>
|
||||||
|
</row>
|
||||||
|
<row spans="2">
|
||||||
|
<vbox>
|
||||||
|
<ckeditor toolbar="Basic" value="@bind(vm.settings.newReqTemplate.text)" width="460px" height="180px"/>
|
||||||
|
<button label="${labels.InsertField}" popup="fieldsNew, position=after_start"/>
|
||||||
|
</vbox>
|
||||||
|
</row>
|
||||||
|
</rows>
|
||||||
|
</grid>
|
||||||
|
</tabpanel>
|
||||||
|
<tabpanel>
|
||||||
|
<grid>
|
||||||
|
<columns>
|
||||||
|
<column hflex="min"/>
|
||||||
|
<column/>
|
||||||
|
</columns>
|
||||||
|
<rows>
|
||||||
|
<row>
|
||||||
|
<label value="${labels.MailSubject}"/> <textbox value="@bind(vm.settings.authReqTemplate.subject)" width="100%"/>
|
||||||
|
</row>
|
||||||
|
<row spans="2">
|
||||||
|
<vbox>
|
||||||
|
<ckeditor toolbar="Basic" value="@bind(vm.settings.authReqTemplate.text)" width="460px" height="180px"/>
|
||||||
|
<button label="${labels.InsertField}" popup="fieldsAuth, position=after_start"/>
|
||||||
|
</vbox>
|
||||||
|
</row>
|
||||||
|
</rows>
|
||||||
|
</grid>
|
||||||
|
</tabpanel>
|
||||||
|
<tabpanel>
|
||||||
|
<grid>
|
||||||
|
<columns>
|
||||||
|
<column hflex="min"/>
|
||||||
|
<column/>
|
||||||
|
</columns>
|
||||||
|
<rows>
|
||||||
|
<row>
|
||||||
|
<label value="${labels.MailSubject}"/> <textbox value="@bind(vm.settings.confReqTemplate.subject)" width="100%"/>
|
||||||
|
</row>
|
||||||
|
<row spans="2">
|
||||||
|
<vbox>
|
||||||
|
<ckeditor toolbar="Basic" value="@bind(vm.settings.confReqTemplate.text)" width="460px" height="180px"/>
|
||||||
|
<button label="${labels.InsertField}" popup="fieldsConfirm, position=after_start"/>
|
||||||
|
</vbox>
|
||||||
|
</row>
|
||||||
|
</rows>
|
||||||
|
</grid>
|
||||||
|
</tabpanel>
|
||||||
|
</tabpanels>
|
||||||
|
</tabbox>
|
||||||
|
<menupopup id="fieldsNew" children="@load(vm.requirementFields)">
|
||||||
|
<template name="children">
|
||||||
|
<menuitem label="@load(each) @converter(vm.locConverter)" onClick="@command('insertField', field=each, message=vm.settings.newReqTemplate)"/>
|
||||||
|
</template>
|
||||||
|
</menupopup>
|
||||||
|
<menupopup id="fieldsAuth" children="@load(vm.requirementFields)">
|
||||||
|
<template name="children">
|
||||||
|
<menuitem label="@load(each) @converter(vm.locConverter)" onClick="@command('insertField', field=each, message=vm.settings.authReqTemplate)"/>
|
||||||
|
</template>
|
||||||
|
</menupopup>
|
||||||
|
<menupopup id="fieldsConfirm" children="@load(vm.requirementFields)">
|
||||||
|
<template name="children">
|
||||||
|
<menuitem label="@load(each) @converter(vm.locConverter)" onClick="@command('insertField', field=each, message=vm.settings.confReqTemplate)"/>
|
||||||
|
</template>
|
||||||
|
</menupopup>
|
||||||
|
</tabpanel>
|
||||||
|
</tabpanels>
|
||||||
|
</tabbox>
|
||||||
|
|
||||||
|
|
||||||
|
<include src="/app/formButtons.zul"/>
|
||||||
|
</window>
|
||||||
|
</zk>
|
Loading…
Reference in New Issue