From c00b2ef3c47164503387487a14bc1acbd2cbd42b Mon Sep 17 00:00:00 2001 From: Peter Hormanns Date: Mon, 21 Mar 2011 18:48:38 +0000 Subject: [PATCH] Refactorings --- .../src/de/hsadmin/web/AbstractModule.java | 134 +++++ hsarweb/src/de/hsadmin/web/DeleteAble.java | 9 + hsarweb/src/de/hsadmin/web/DomainModule.java | 21 +- .../de/hsadmin/web/EMailAddressModule.java | 37 +- .../src/de/hsadmin/web/EMailAliasModule.java | 13 +- hsarweb/src/de/hsadmin/web/GenericModule.java | 492 +----------------- hsarweb/src/de/hsadmin/web/InsertAble.java | 9 + .../src/de/hsadmin/web/MainApplication.java | 14 +- hsarweb/src/de/hsadmin/web/Module.java | 17 + .../src/de/hsadmin/web/QueueTaskModule.java | 6 +- hsarweb/src/de/hsadmin/web/SearchAble.java | 6 + .../src/de/hsadmin/web/UnixUserModule.java | 22 +- hsarweb/src/de/hsadmin/web/UpdateAble.java | 9 + .../hsadmin/web/config/ComponentFactory.java | 11 + .../de/hsadmin/web/config/ModuleConfig.java | 46 -- .../de/hsadmin/web/config/PropertyConfig.java | 38 +- .../web/config/PropertyFieldFactory.java | 19 + .../hsadmin/web/config/PropertyFormField.java | 10 - .../vaadin/DefaultPropertyFieldFactory.java | 51 ++ .../de/hsadmin/web/vaadin/GenericForm.java | 102 ++++ .../vaadin/PasswordPropertyFieldFactory.java | 79 +++ .../vaadin/SelectPropertyFieldFactory.java | 64 +++ .../web/vaadin/TableComponentFactory.java | 296 +++++++++++ hsarweb/src/texts/user.properties | 3 +- hsarweb/src/texts/user_de.properties | 5 +- 25 files changed, 915 insertions(+), 598 deletions(-) create mode 100644 hsarweb/src/de/hsadmin/web/AbstractModule.java create mode 100644 hsarweb/src/de/hsadmin/web/DeleteAble.java create mode 100644 hsarweb/src/de/hsadmin/web/InsertAble.java create mode 100644 hsarweb/src/de/hsadmin/web/Module.java create mode 100644 hsarweb/src/de/hsadmin/web/SearchAble.java create mode 100644 hsarweb/src/de/hsadmin/web/UpdateAble.java create mode 100644 hsarweb/src/de/hsadmin/web/config/ComponentFactory.java create mode 100644 hsarweb/src/de/hsadmin/web/config/PropertyFieldFactory.java delete mode 100644 hsarweb/src/de/hsadmin/web/config/PropertyFormField.java create mode 100644 hsarweb/src/de/hsadmin/web/vaadin/DefaultPropertyFieldFactory.java create mode 100644 hsarweb/src/de/hsadmin/web/vaadin/GenericForm.java create mode 100644 hsarweb/src/de/hsadmin/web/vaadin/PasswordPropertyFieldFactory.java create mode 100644 hsarweb/src/de/hsadmin/web/vaadin/SelectPropertyFieldFactory.java create mode 100644 hsarweb/src/de/hsadmin/web/vaadin/TableComponentFactory.java diff --git a/hsarweb/src/de/hsadmin/web/AbstractModule.java b/hsarweb/src/de/hsadmin/web/AbstractModule.java new file mode 100644 index 0000000..8fa8576 --- /dev/null +++ b/hsarweb/src/de/hsadmin/web/AbstractModule.java @@ -0,0 +1,134 @@ +package de.hsadmin.web; + +import java.util.HashMap; +import java.util.Map; + +import com.vaadin.terminal.ExternalResource; +import com.vaadin.terminal.Sizeable; +import com.vaadin.terminal.ThemeResource; +import com.vaadin.ui.Button; +import com.vaadin.ui.Component; +import com.vaadin.ui.Form; +import com.vaadin.ui.HorizontalLayout; +import com.vaadin.ui.Link; +import com.vaadin.ui.VerticalLayout; +import com.vaadin.ui.Window; +import com.vaadin.ui.Button.ClickEvent; + +import de.hsadmin.web.config.ComponentFactory; +import de.hsadmin.web.config.LocaleConfig; +import de.hsadmin.web.config.ModuleConfig; +import de.hsadmin.web.vaadin.GenericForm; +import de.hsadmin.web.vaadin.TableComponentFactory; + +public abstract class AbstractModule implements Module { + + private MainApplication application; + private VerticalLayout layout; + private Component component; + private ComponentFactory componentFactory; + + public Component getComponent() { + return layout; + } + + public void reload() throws HsarwebException { + componentFactory.loadData(); + } + + private void initLayout() { + layout = new VerticalLayout(); + layout.setSizeFull(); + final Module thisModule = this; + final ModuleConfig moduleConfig = getModuleConfig(); + final LocaleConfig localeConfig = application.getLocaleConfig(); + if (this instanceof SearchAble || this instanceof InsertAble) { + HorizontalLayout toolbar = new HorizontalLayout(); + if (this instanceof InsertAble) { + Button btNew = new Button(moduleConfig.getLabel("new")); + ThemeResource icon = new ThemeResource("../runo/icons/16/document-add.png"); + btNew.setIcon(icon); + btNew.addListener(new Button.ClickListener() { + private static final long serialVersionUID = 1L; + private Window childWindow; + @Override + public void buttonClick(ClickEvent event) { + final GenericForm genericForm = new GenericForm(thisModule, null); + final Form form = genericForm.createAddForm(); + childWindow = new Window(localeConfig.getText("new")); + childWindow.setWidth(640.0f, Sizeable.UNITS_PIXELS); + VerticalLayout vLayout = new VerticalLayout(); + vLayout.setMargin(true); + vLayout.setSpacing(true); + vLayout.addComponent(form); + HorizontalLayout hLayout = new HorizontalLayout(); + Button btSaveRow = new Button(localeConfig.getText("save")); + btSaveRow.addListener(new Button.ClickListener() { + private static final long serialVersionUID = 1L; + @Override + public void buttonClick(ClickEvent event) { + application.getMainWindow().removeWindow(childWindow); + try { + Map map = new HashMap(); + genericForm.transferToHash(map, form); + ((InsertAble) thisModule).insertRow(map); + componentFactory.loadData(); + } catch (HsarwebException e) { + application.showUserException(e); + } + } + }); + Button btAbort = new Button(localeConfig.getText("abort")); + btAbort.addListener(new Button.ClickListener() { + private static final long serialVersionUID = 1L; + @Override + public void buttonClick(ClickEvent event) { + application.getMainWindow().removeWindow(childWindow); + } + }); + hLayout.addComponent(btSaveRow); + hLayout.addComponent(btAbort); + vLayout.addComponent(hLayout); + childWindow.setContent(vLayout); + childWindow.setModal(true); + application.getMainWindow().addWindow(childWindow); + } + }); + toolbar.addComponent(btNew); + } +// if (this instanceof SearchAble) { +// Button btSearch = new Button("search"); +// toolbar.addComponent(btSearch); +// } + layout.addComponent(toolbar); + } + layout.addComponent(component); + layout.setExpandRatio(component, 1.0f); + layout.addComponent(new Link(localeConfig.getText("impressum.label"), new ExternalResource(localeConfig.getText("impressum.link")))); + } + + + public void setApplication(MainApplication app) throws HsarwebException { + application = app; + initModule(); + if (componentFactory == null) { + componentFactory = new TableComponentFactory(this); + } + component = (Component) componentFactory.initComponent(); + initLayout(); + } + + protected abstract void initModule(); + + public MainApplication getApplication() { + return application; + } + + public void setComponentFactory(ComponentFactory componentFactory) { + this.componentFactory = componentFactory; + } + + @Override + public abstract ModuleConfig getModuleConfig(); + +} diff --git a/hsarweb/src/de/hsadmin/web/DeleteAble.java b/hsarweb/src/de/hsadmin/web/DeleteAble.java new file mode 100644 index 0000000..650e102 --- /dev/null +++ b/hsarweb/src/de/hsadmin/web/DeleteAble.java @@ -0,0 +1,9 @@ +package de.hsadmin.web; + +import java.util.Map; + +public interface DeleteAble { + + public void deleteRow(Map paramHash) throws HsarwebException; + +} diff --git a/hsarweb/src/de/hsadmin/web/DomainModule.java b/hsarweb/src/de/hsadmin/web/DomainModule.java index b32a045..19089f3 100644 --- a/hsarweb/src/de/hsadmin/web/DomainModule.java +++ b/hsarweb/src/de/hsadmin/web/DomainModule.java @@ -10,9 +10,9 @@ import java.util.TreeMap; import de.hsadmin.web.config.ModuleConfig; import de.hsadmin.web.config.PropertyConfig; import de.hsadmin.web.config.PropertyDefaultValue; -import de.hsadmin.web.config.PropertyFormField; import de.hsadmin.web.config.PropertySelectValues; import de.hsadmin.web.config.PropertyTableColumn; +import de.hsadmin.web.vaadin.SelectPropertyFieldFactory; public class DomainModule extends GenericModule { @@ -23,12 +23,13 @@ public class DomainModule extends GenericModule { @Override protected void initModule() { moduleConfig = new ModuleConfig("domain"); - moduleConfig.setUpdateAble(false); String login = getApplication().getLogin(); final String pac = login.length() >= 5 ? login.substring(0, 5) : ""; - PropertyConfig idProp = new PropertyConfig(moduleConfig, "id", Long.class, PropertyTableColumn.INTERNAL_KEY, PropertyFormField.INTERNAL_KEY); - PropertyConfig nameProp = new PropertyConfig(moduleConfig, "name", String.class, PropertyFormField.WRITEONCE); - PropertyConfig userProp = new PropertyConfig(moduleConfig, "user", String.class, PropertyFormField.WRITEONCE); + PropertyConfig idProp = new PropertyConfig(moduleConfig, "id", Long.class, PropertyTableColumn.INTERNAL_KEY); + idProp.setReadOnly(true); + PropertyConfig nameProp = new PropertyConfig(moduleConfig, "name", String.class); + nameProp.setWriteOnce(true); + PropertyConfig userProp = new PropertyConfig(moduleConfig, "user", String.class, new SelectPropertyFieldFactory()); userProp.setDefaultValue(new PropertyDefaultValue() { @Override public String getDefaultValue() { @@ -54,15 +55,19 @@ public class DomainModule extends GenericModule { return map; } }); - PropertyConfig pacProp = new PropertyConfig(moduleConfig, "pac", String.class, PropertyTableColumn.HIDDEN, PropertyFormField.READONLY); + userProp.setWriteOnce(true); + PropertyConfig pacProp = new PropertyConfig(moduleConfig, "pac", String.class, PropertyTableColumn.HIDDEN); pacProp.setDefaultValue(new PropertyDefaultValue() { @Override public String getDefaultValue() { return pac; } }); - PropertyConfig hiveProp = new PropertyConfig(moduleConfig, "hive", String.class, PropertyTableColumn.HIDDEN, PropertyFormField.NONE); - PropertyConfig sinceProp = new PropertyConfig(moduleConfig, "since", Date.class, PropertyFormField.READONLY); + pacProp.setReadOnly(true); + PropertyConfig hiveProp = new PropertyConfig(moduleConfig, "hive", String.class, PropertyTableColumn.HIDDEN); + hiveProp.setReadOnly(true); + PropertyConfig sinceProp = new PropertyConfig(moduleConfig, "since", Date.class); + sinceProp.setReadOnly(true); moduleConfig.addProperty(idProp); moduleConfig.addProperty(nameProp); moduleConfig.addProperty(userProp); diff --git a/hsarweb/src/de/hsadmin/web/EMailAddressModule.java b/hsarweb/src/de/hsadmin/web/EMailAddressModule.java index c2bd6c2..9cd100e 100644 --- a/hsarweb/src/de/hsadmin/web/EMailAddressModule.java +++ b/hsarweb/src/de/hsadmin/web/EMailAddressModule.java @@ -9,9 +9,9 @@ import java.util.TreeMap; import de.hsadmin.web.config.ModuleConfig; import de.hsadmin.web.config.PropertyConfig; import de.hsadmin.web.config.PropertyDefaultValue; -import de.hsadmin.web.config.PropertyFormField; import de.hsadmin.web.config.PropertySelectValues; import de.hsadmin.web.config.PropertyTableColumn; +import de.hsadmin.web.vaadin.SelectPropertyFieldFactory; public class EMailAddressModule extends GenericModule { @@ -24,12 +24,16 @@ public class EMailAddressModule extends GenericModule { moduleConfig = new ModuleConfig("emailaddress"); String login = getApplication().getLogin(); final String pac = login.length() >= 5 ? login.substring(0, 5) : ""; - moduleConfig.addProperty(new PropertyConfig(moduleConfig, "id", Long.class, PropertyTableColumn.INTERNAL_KEY, PropertyFormField.INTERNAL_KEY)); - moduleConfig.addProperty(new PropertyConfig(moduleConfig, "emailaddress", String.class, PropertyFormField.NONE)); - moduleConfig.addProperty(new PropertyConfig(moduleConfig, "localpart", String.class, PropertyTableColumn.HIDDEN, PropertyFormField.WRITEONCE)); - moduleConfig.addProperty(new PropertyConfig(moduleConfig, "subdomain", String.class, PropertyTableColumn.HIDDEN, PropertyFormField.WRITEONCE)); - PropertyConfig DomainProp = new PropertyConfig(moduleConfig, "domain", String.class, PropertyTableColumn.HIDDEN, PropertyFormField.WRITEONCE); - DomainProp.setSelectValues(new PropertySelectValues() { + PropertyConfig idProp = new PropertyConfig(moduleConfig, "id", Long.class, PropertyTableColumn.INTERNAL_KEY); + idProp.setReadOnly(true); + PropertyConfig fullAddressProp = new PropertyConfig(moduleConfig, "emailaddress", String.class); + fullAddressProp.setReadOnly(true); + PropertyConfig localpartProp = new PropertyConfig(moduleConfig, "localpart", String.class, PropertyTableColumn.HIDDEN); + localpartProp.setWriteOnce(true); + PropertyConfig subdomainProp = new PropertyConfig(moduleConfig, "subdomain", String.class, PropertyTableColumn.HIDDEN); + subdomainProp.setWriteOnce(true); + PropertyConfig domainProp = new PropertyConfig(moduleConfig, "domain", String.class, PropertyTableColumn.HIDDEN, new SelectPropertyFieldFactory()); + domainProp.setSelectValues(new PropertySelectValues() { @Override public boolean newItemsAllowed() { return false; @@ -48,7 +52,7 @@ public class EMailAddressModule extends GenericModule { return map; } }); - moduleConfig.addProperty(DomainProp); + domainProp.setWriteOnce(true); PropertyConfig targetProp = new PropertyConfig(moduleConfig, "target", String.class); targetProp.setDefaultValue(new PropertyDefaultValue() { @Override @@ -56,10 +60,21 @@ public class EMailAddressModule extends GenericModule { return pac + "-"; } }); + PropertyConfig domAdminProp = new PropertyConfig(moduleConfig, "admin", String.class, PropertyTableColumn.HIDDEN); + domAdminProp.setReadOnly(true); + PropertyConfig pacProp = new PropertyConfig(moduleConfig, "pac", String.class, PropertyTableColumn.HIDDEN); + pacProp.setReadOnly(true); + PropertyConfig fulldomainProp = new PropertyConfig(moduleConfig, "fulldomain", String.class, PropertyTableColumn.HIDDEN); + fulldomainProp.setReadOnly(true); + moduleConfig.addProperty(idProp); + moduleConfig.addProperty(fullAddressProp); + moduleConfig.addProperty(localpartProp); + moduleConfig.addProperty(subdomainProp); + moduleConfig.addProperty(domainProp); moduleConfig.addProperty(targetProp); - moduleConfig.addProperty(new PropertyConfig(moduleConfig, "admin", String.class, PropertyTableColumn.HIDDEN, PropertyFormField.NONE)); - moduleConfig.addProperty(new PropertyConfig(moduleConfig, "pac", String.class, PropertyTableColumn.HIDDEN, PropertyFormField.NONE)); - moduleConfig.addProperty(new PropertyConfig(moduleConfig, "fulldomain", String.class, PropertyTableColumn.HIDDEN, PropertyFormField.NONE)); + moduleConfig.addProperty(domAdminProp); + moduleConfig.addProperty(pacProp); + moduleConfig.addProperty(fulldomainProp); } @Override diff --git a/hsarweb/src/de/hsadmin/web/EMailAliasModule.java b/hsarweb/src/de/hsadmin/web/EMailAliasModule.java index ca656f4..a7f14f9 100644 --- a/hsarweb/src/de/hsadmin/web/EMailAliasModule.java +++ b/hsarweb/src/de/hsadmin/web/EMailAliasModule.java @@ -3,7 +3,6 @@ package de.hsadmin.web; import de.hsadmin.web.config.ModuleConfig; import de.hsadmin.web.config.PropertyConfig; import de.hsadmin.web.config.PropertyDefaultValue; -import de.hsadmin.web.config.PropertyFormField; import de.hsadmin.web.config.PropertyTableColumn; public class EMailAliasModule extends GenericModule { @@ -17,7 +16,8 @@ public class EMailAliasModule extends GenericModule { moduleConfig = new ModuleConfig("emailalias"); String login = getApplication().getLogin(); final String pac = login.length() >= 5 ? login.substring(0, 5) : ""; - moduleConfig.addProperty(new PropertyConfig(moduleConfig, "id", Long.class, PropertyTableColumn.INTERNAL_KEY, PropertyFormField.INTERNAL_KEY)); + PropertyConfig idProp = new PropertyConfig(moduleConfig, "id", Long.class, PropertyTableColumn.INTERNAL_KEY); + idProp.setReadOnly(true); PropertyConfig nameProp = new PropertyConfig(moduleConfig, "name", String.class); nameProp.setDefaultValue(new PropertyDefaultValue() { @Override @@ -28,7 +28,7 @@ public class EMailAliasModule extends GenericModule { return ""; } }); - moduleConfig.addProperty(nameProp); + nameProp.setWriteOnce(true); PropertyConfig targetProp = new PropertyConfig(moduleConfig, "target", String.class); targetProp.setDefaultValue(new PropertyDefaultValue() { @Override @@ -39,14 +39,17 @@ public class EMailAliasModule extends GenericModule { return ""; } }); - moduleConfig.addProperty(targetProp); - PropertyConfig pacProp = new PropertyConfig(moduleConfig, "pac", String.class, PropertyTableColumn.HIDDEN, PropertyFormField.READONLY); + PropertyConfig pacProp = new PropertyConfig(moduleConfig, "pac", String.class, PropertyTableColumn.HIDDEN); pacProp.setDefaultValue(new PropertyDefaultValue() { @Override public String getDefaultValue() { return pac; } }); + pacProp.setReadOnly(true); + moduleConfig.addProperty(idProp); + moduleConfig.addProperty(nameProp); + moduleConfig.addProperty(targetProp); moduleConfig.addProperty(pacProp); } diff --git a/hsarweb/src/de/hsadmin/web/GenericModule.java b/hsarweb/src/de/hsadmin/web/GenericModule.java index 08c51c3..d236410 100644 --- a/hsarweb/src/de/hsadmin/web/GenericModule.java +++ b/hsarweb/src/de/hsadmin/web/GenericModule.java @@ -1,302 +1,29 @@ package de.hsadmin.web; -import java.io.Serializable; -import java.text.DateFormat; -import java.text.ParseException; -import java.util.Calendar; -import java.util.Date; import java.util.HashMap; -import java.util.Iterator; import java.util.List; import java.util.Map; -import com.vaadin.data.Property; -import com.vaadin.terminal.ExternalResource; -import com.vaadin.terminal.Sizeable; -import com.vaadin.terminal.ThemeResource; -import com.vaadin.ui.AbstractTextField; -import com.vaadin.ui.Button; -import com.vaadin.ui.Component; -import com.vaadin.ui.Form; -import com.vaadin.ui.HorizontalLayout; -import com.vaadin.ui.Label; -import com.vaadin.ui.Layout; -import com.vaadin.ui.Link; -import com.vaadin.ui.PasswordField; -import com.vaadin.ui.Select; -import com.vaadin.ui.Table; -import com.vaadin.ui.TextField; -import com.vaadin.ui.VerticalLayout; -import com.vaadin.ui.Window; -import com.vaadin.ui.Button.ClickEvent; -import com.vaadin.ui.themes.BaseTheme; - -import de.hsadmin.web.config.LocaleConfig; -import de.hsadmin.web.config.ModuleConfig; import de.hsadmin.web.config.PropertyConfig; -import de.hsadmin.web.config.PropertyFormField; import de.hsadmin.web.config.PropertyTableColumn; -public abstract class GenericModule implements Serializable { +public abstract class GenericModule extends AbstractModule implements InsertAble, UpdateAble, DeleteAble { private static final long serialVersionUID = 1L; - private static final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT); - private VerticalLayout layout; - private Table table; - private MainApplication application; + public void insertRow(Map paramHash) throws HsarwebException { + getApplication().getRemote().callAdd(getModuleConfig().getName(), paramHash); + } - public void setApplication(MainApplication app) throws HsarwebException { - application = app; - initModule(); - initTable(); - initLayout(); + public void deleteRow(Map paramHash) throws HsarwebException { + getApplication().getRemote().callDelete(getModuleConfig().getName(), paramHash); } - public MainApplication getApplication() { - return application; - } - - public abstract ModuleConfig getModuleConfig(); - - protected abstract void initModule(); - - public Component getComponent() { - return layout; - } - - public void reload() throws HsarwebException { - loadTable(); - } - - private void initLayout() { - layout = new VerticalLayout(); - layout.setSizeFull(); - final ModuleConfig moduleConfig = getModuleConfig(); - final LocaleConfig localeConfig = application.getLocaleConfig(); - if (moduleConfig.isSearchAble() || moduleConfig.isAddAble()) { - HorizontalLayout toolbar = new HorizontalLayout(); - if (moduleConfig.isAddAble()) { - Button btNew = new Button(moduleConfig.getLabel("new")); - ThemeResource icon = new ThemeResource("../runo/icons/16/document-add.png"); - btNew.setIcon(icon); - btNew.addListener(new Button.ClickListener() { - private static final long serialVersionUID = 1L; - private Window childWindow; - @Override - public void buttonClick(ClickEvent event) { - final Form form = createForm(); - childWindow = new Window(localeConfig.getText("new")); - childWindow.setWidth(640.0f, Sizeable.UNITS_PIXELS); - VerticalLayout vLayout = new VerticalLayout(); - vLayout.setMargin(true); - vLayout.setSpacing(true); - vLayout.addComponent(form); - HorizontalLayout hLayout = new HorizontalLayout(); - Button btSaveRow = new Button(localeConfig.getText("save")); - btSaveRow.addListener(new Button.ClickListener() { - private static final long serialVersionUID = 1L; - @Override - public void buttonClick(ClickEvent event) { - application.getMainWindow().removeWindow(childWindow); - try { - insertRow(form); - } catch (HsarwebException e) { - application.showUserException(e); - } - } - }); - Button btAbort = new Button(localeConfig.getText("abort")); - btAbort.addListener(new Button.ClickListener() { - private static final long serialVersionUID = 1L; - @Override - public void buttonClick(ClickEvent event) { - application.getMainWindow().removeWindow(childWindow); - } - }); - hLayout.addComponent(btSaveRow); - hLayout.addComponent(btAbort); - vLayout.addComponent(hLayout); - childWindow.setContent(vLayout); - childWindow.setModal(true); - application.getMainWindow().addWindow(childWindow); - } - }); - toolbar.addComponent(btNew); - } -// if (moduleConfig.isSearchAble()) { -// Button btSearch = new Button("search"); -// toolbar.addComponent(btSearch); -// } - layout.addComponent(toolbar); - } - layout.addComponent(table); - layout.setExpandRatio(table, 1.0f); - layout.addComponent(new Link(localeConfig.getText("impressum.label"), new ExternalResource(localeConfig.getText("impressum.link")))); - } - - private void initTable() throws HsarwebException { - table = new Table() { - private static final long serialVersionUID = 35127658139420917L; - @Override - protected String formatPropertyValue(Object rowId, Object colId, - Property property) { - if (Date.class == property.getType()) { - try { - return df.format(property.getValue()); - } catch (IllegalArgumentException e) { - return "---"; - } - } - return super.formatPropertyValue(rowId, colId, property); - } - }; - try { - table.setWidth(100.0f, Sizeable.UNITS_PERCENTAGE); - table.setHeight(100.0f, Sizeable.UNITS_PERCENTAGE); - table.setSelectable(false); - table.setImmediate(true); - table.setColumnCollapsingAllowed(true); - table.setColumnReorderingAllowed(true); - for (PropertyConfig prop : getModuleConfig().getPropertyList()) { - PropertyTableColumn propTableColumn = prop.getPropTableColumn(); - if (propTableColumn != PropertyTableColumn.NONE) { - table.addContainerProperty(prop.getId(), prop.getType(), prop.getDefaultValue()); - table.setColumnHeader(prop.getId(), prop.getLabel()); - if (propTableColumn == PropertyTableColumn.HIDDEN) { - table.setColumnCollapsed(prop.getId(), true); - } - if (propTableColumn == PropertyTableColumn.INTERNAL_KEY) { - table.setColumnCollapsed(prop.getId(), true); - } - } - } - if (getModuleConfig().isUpdateAble()) { - table.addContainerProperty("edit", Button.class, null); - table.setColumnWidth("edit", 16); - table.setColumnHeader("edit", ""); - } - if (getModuleConfig().isDeleteAble()) { - table.addContainerProperty("del", Button.class, null); - table.setColumnWidth("del", 16); - table.setColumnHeader("del", ""); - } - } catch (Exception e) { - throw new HsarwebException(e); - } - } - - private void loadTable() throws HsarwebException { - table.removeAllItems(); - try { - ModuleConfig moduleConfig = getModuleConfig(); - Object callSearch = application.getRemote().callSearch(moduleConfig.getName(), new HashMap()); - List propertyList = moduleConfig.getPropertyList(); - if (callSearch instanceof Object[]) { - for (Object row : ((Object[])callSearch)) { - long oid = -1L; - if (row instanceof Map) { - int numOfcolumns = propertyList.size(); - if (moduleConfig.isUpdateAble()) { - numOfcolumns++; - } - if (moduleConfig.isDeleteAble()) { - numOfcolumns++; - } - numOfcolumns = moduleConfig.getNumOfColumns(); - Object[] itemData = new Object[numOfcolumns]; - int idx = 0; - for (PropertyConfig prop : propertyList) { - PropertyTableColumn propTableColumn = prop.getPropTableColumn(); - if (propTableColumn != PropertyTableColumn.NONE) { - Object valueObject = ((Map) row).get(prop.getId()); - if (valueObject != null && valueObject instanceof String) { - if (Long.class.equals(prop.getType())) { - itemData[idx] = Long.parseLong((String) valueObject); - } - if (Date.class.equals(prop.getType())) { - try { - itemData[idx] = df.parse((String) valueObject); - } catch (ParseException e) { - Calendar cal = Calendar.getInstance(); - cal.clear(); - itemData[idx] = cal.getTime(); - } - } - if (String.class.equals(prop.getType())) { - itemData[idx] = (String) valueObject; - } - if (propTableColumn == PropertyTableColumn.INTERNAL_KEY && Long.class.equals(prop.getType())) { - if (valueObject instanceof String) { - oid = Long.parseLong((String) valueObject); - } - } - } - idx++; - } - } - if (moduleConfig.isUpdateAble()) { - itemData[idx] = createEditButton(oid); - idx++; - } - if (moduleConfig.isDeleteAble()) { - itemData[idx] = createDeleteButton(oid); - idx++; - } - table.addItem(itemData, oid); - } - } - table.sort(); - } - } catch (UnsupportedOperationException e) { - throw new HsarwebException(e); - } - } - - private void deleteRow(long id) throws HsarwebException { - Map paramHash = new HashMap(); - paramHash.put(findIdKey(), Long.toString(id)); - application.getRemote().callDelete(getModuleConfig().getName(), paramHash); - loadTable(); - } - - private void updateRow(Form form) throws HsarwebException { + public void updateRow(Map paramHash) throws HsarwebException { Map whereHash = new HashMap(); - whereHash.put(findIdKey(), ((Long) form.getData()).toString()); - Map setHash = new HashMap(); - Iterator componentIterator = form.getLayout().getComponentIterator(); - while (componentIterator.hasNext()) { - Component c = componentIterator.next(); - transferToHash(setHash, c); - } - application.getRemote().callUpdate(getModuleConfig().getName(), setHash, whereHash); - loadTable(); - } - - private void insertRow(Form form) throws HsarwebException { - Map setHash = new HashMap(); - Iterator componentIterator = form.getLayout().getComponentIterator(); - while (componentIterator.hasNext()) { - Component c = componentIterator.next(); - transferToHash(setHash, c); - } - application.getRemote().callAdd(getModuleConfig().getName(), setHash); - loadTable(); - } - - private void transferToHash(Map setHash, Component c) { - if (c instanceof AbstractTextField) { - AbstractTextField tf = (AbstractTextField) c; - Object data = tf.getData(); - Object value = tf.getValue(); - setHash.put((String) data, (String) value); - } - if (c instanceof Select) { - Select sel = (Select) c; - Object data = sel.getData(); - Object value = sel.getValue(); - setHash.put((String) data, (String) value); - } + String idKey = findIdKey(); + whereHash.put(idKey, paramHash.get(idKey)); + getApplication().getRemote().callUpdate(getModuleConfig().getName(), paramHash, whereHash); } private String findIdKey() { @@ -312,203 +39,4 @@ public abstract class GenericModule implements Serializable { return idKey; } - private Button createEditButton(long id) { - ThemeResource icon = new ThemeResource("../runo/icons/16/document-txt.png"); - final Button button = new Button(); - button.setIcon(icon); - button.setData(id); - button.setStyleName(BaseTheme.BUTTON_LINK); - button.addListener(new Button.ClickListener() { - private static final long serialVersionUID = 1L; - private Window childWindow; - @Override - public void buttonClick(ClickEvent event) { - final Form form = createForm((Long) button.getData()); - LocaleConfig localeConfig = application.getLocaleConfig(); - childWindow = new Window(getModuleConfig().getLabel("moduletitle") + " " + localeConfig.getText("update")); - childWindow.setWidth(640.0f, Sizeable.UNITS_PIXELS); - VerticalLayout vLayout = new VerticalLayout(); - vLayout.setMargin(true); - vLayout.setSpacing(true); - vLayout.addComponent(form); - HorizontalLayout hLayout = new HorizontalLayout(); - Button btSaveRow = new Button(localeConfig.getText("save")); - btSaveRow.addListener(new Button.ClickListener() { - private static final long serialVersionUID = 1L; - @Override - public void buttonClick(ClickEvent event) { - application.getMainWindow().removeWindow(childWindow); - try { - updateRow(form); - } catch (HsarwebException e) { - application.showUserException(e); - } - } - }); - Button btAbort = new Button(localeConfig.getText("abort")); - btAbort.addListener(new Button.ClickListener() { - private static final long serialVersionUID = 1L; - @Override - public void buttonClick(ClickEvent event) { - application.getMainWindow().removeWindow(childWindow); - } - }); - hLayout.addComponent(btSaveRow); - hLayout.addComponent(btAbort); - vLayout.addComponent(hLayout); - childWindow.setContent(vLayout); - childWindow.setModal(true); - application.getMainWindow().addWindow(childWindow); - } - }); - return button; - } - - private Button createDeleteButton(long id) { - ThemeResource icon = new ThemeResource("../runo/icons/16/document-delete.png"); - final Button button = new Button(); - button.setIcon(icon); - button.setData(id); - button.setStyleName(BaseTheme.BUTTON_LINK); - button.addListener(new Button.ClickListener() { - private static final long serialVersionUID = 1L; - private Window childWindow; - @Override - public void buttonClick(ClickEvent event) { - LocaleConfig localeConfig = application.getLocaleConfig(); - childWindow = new Window(getModuleConfig().getLabel("moduletitle") + " " + localeConfig.getText("delete")); - childWindow.setWidth(320.0f, Sizeable.UNITS_PIXELS); - VerticalLayout vLayout = new VerticalLayout(); - vLayout.setMargin(true); - vLayout.setSpacing(true); - vLayout.addComponent(new Label(localeConfig.getText("confirmdelete"))); - HorizontalLayout hLayout = new HorizontalLayout(); - Button btDeleteRow = new Button(localeConfig.getText("delete")); - btDeleteRow.addListener(new Button.ClickListener() { - private static final long serialVersionUID = 1L; - @Override - public void buttonClick(ClickEvent event) { - application.getMainWindow().removeWindow(childWindow); - try { - deleteRow((Long) button.getData()); - } catch (HsarwebException e) { - application.showUserException(e); - } - } - }); - Button btAbort = new Button(localeConfig.getText("abort")); - btAbort.addListener(new Button.ClickListener() { - private static final long serialVersionUID = 1L; - @Override - public void buttonClick(ClickEvent event) { - application.getMainWindow().removeWindow(childWindow); - } - }); - hLayout.addComponent(btDeleteRow); - hLayout.addComponent(btAbort); - vLayout.addComponent(hLayout); - childWindow.setContent(vLayout); - childWindow.setModal(true); - application.getMainWindow().addWindow(childWindow); - } - }); - return button; - } - - private Form createForm(Long key) { - try { - Map where = new HashMap(); - where.put(findIdKey(), key.toString()); - Object searchResult = application.getRemote().callSearch(getModuleConfig().getName(), where); - if (searchResult instanceof Object[]) { - Map row = (Map) (((Object[]) searchResult)[0]); - Form f = new Form(); - f.setCaption(getModuleConfig().getLabel("update")); - f.setData(key); - Layout layout = f.getLayout(); - for (PropertyConfig prop : getModuleConfig().getPropertyList()) { - PropertyFormField propFormField = prop.getPropFormField(); - if (propFormField != PropertyFormField.INTERNAL_KEY && propFormField != PropertyFormField.NONE) { - if (prop.hasSelectList()) { - Select sel = new Select(prop.getLabel()); - sel.setData(prop.getId()); - sel.setNullSelectionAllowed(false); - sel.setNewItemsAllowed(prop.newItemsAllowed()); - Map selectValues = prop.getSelectValues(); - for (Object skey : selectValues.keySet()) { - sel.addItem(skey); - sel.setItemCaption(skey, selectValues.get(skey)); - } - sel.setWidth(480.0f, Sizeable.UNITS_PIXELS); - Object value = row.get(prop.getId()); - sel.setValue(value != null ? value : prop.getDefaultValue()); - sel.setReadOnly(PropertyFormField.READONLY == propFormField || PropertyFormField.WRITEONCE == propFormField); - layout.addComponent(sel); - } else { - if (propFormField != PropertyFormField.PASSWORD) { - TextField tf = new TextField(prop.getLabel()); - tf.setData(prop.getId()); - tf.setWidth(480.0f, Sizeable.UNITS_PIXELS); - Object value = row.get(prop.getId()); - tf.setValue(value != null ? value : prop.getDefaultValue()); - tf.setReadOnly(PropertyFormField.READONLY == propFormField || PropertyFormField.WRITEONCE == propFormField); - layout.addComponent(tf); - } - } - } - } - return f; - } - } catch (HsarwebException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - return null; - } - - private Form createForm() { - Form f = new Form(); - f.setCaption(getModuleConfig().getLabel("new")); - Layout layout = f.getLayout(); - for (PropertyConfig prop : getModuleConfig().getPropertyList()) { - PropertyFormField propFormField = prop.getPropFormField(); - if (PropertyFormField.READWRITE == propFormField || PropertyFormField.WRITEONCE == propFormField || PropertyFormField.PASSWORD == propFormField) { - if (prop.hasSelectList()) { - Select sel = new Select(prop.getLabel()); - sel.setData(prop.getId()); - sel.setNullSelectionAllowed(false); - sel.setNewItemsAllowed(prop.newItemsAllowed()); - Map selectValues = prop.getSelectValues(); - for (Object key : selectValues.keySet()) { - sel.addItem(key); - sel.setItemCaption(key, selectValues.get(key)); - } - sel.setWidth(480.0f, Sizeable.UNITS_PIXELS); - sel.setValue(prop.getDefaultValue()); - layout.addComponent(sel); - } else { - if (PropertyFormField.PASSWORD == propFormField) { - PasswordField tf1 = new PasswordField(getModuleConfig().getLabel(prop.getId() + "1")); - tf1.setData(prop.getId()); - tf1.setWidth(480.0f, Sizeable.UNITS_PIXELS); - tf1.setValue(prop.getDefaultValue()); - layout.addComponent(tf1); - PasswordField tf2 = new PasswordField(getModuleConfig().getLabel(prop.getId() + "2")); - tf2.setData(prop.getId()); - tf2.setWidth(480.0f, Sizeable.UNITS_PIXELS); - tf2.setValue(prop.getDefaultValue()); - layout.addComponent(tf2); - } else { - TextField tf = new TextField(prop.getLabel()); - tf.setData(prop.getId()); - tf.setWidth(480.0f, Sizeable.UNITS_PIXELS); - tf.setValue(prop.getDefaultValue()); - layout.addComponent(tf); - } - } - } - } - return f; - } - } diff --git a/hsarweb/src/de/hsadmin/web/InsertAble.java b/hsarweb/src/de/hsadmin/web/InsertAble.java new file mode 100644 index 0000000..3c49771 --- /dev/null +++ b/hsarweb/src/de/hsadmin/web/InsertAble.java @@ -0,0 +1,9 @@ +package de.hsadmin.web; + +import java.util.Map; + +public interface InsertAble { + + public void insertRow(Map paramHash) throws HsarwebException; + +} diff --git a/hsarweb/src/de/hsadmin/web/MainApplication.java b/hsarweb/src/de/hsadmin/web/MainApplication.java index 01c1016..1d160ed 100644 --- a/hsarweb/src/de/hsadmin/web/MainApplication.java +++ b/hsarweb/src/de/hsadmin/web/MainApplication.java @@ -37,7 +37,7 @@ public class MainApplication extends Application implements HttpServletRequestLi private AttributePrincipal userPrincipal; private LocaleConfig localeConfig; private Remote remote; - private Map modules; + private Map modules; @Override @@ -49,14 +49,12 @@ public class MainApplication extends Application implements HttpServletRequestLi verticalLayout.setSizeFull(); TabSheet tabs = new TabSheet(); tabs.setSizeFull(); -// tabs.setWidth(95.0f, Sizeable.UNITS_PERCENTAGE); -// tabs.setHeight(95.0f, Sizeable.UNITS_PERCENTAGE); String modulesParamString = getContextParam("hsarmodules"); - modules = new HashMap(); - GenericModule firstModule = null; + modules = new HashMap(); + Module firstModule = null; for (String className : modulesParamString.split(",")) { try { - GenericModule module = (GenericModule) Class.forName(className).newInstance(); + Module module = (Module) Class.forName(className).newInstance(); module.setApplication(this); if (firstModule == null) { firstModule = module; @@ -64,7 +62,7 @@ public class MainApplication extends Application implements HttpServletRequestLi ModuleConfig moduleConfig = module.getModuleConfig(); String label = moduleConfig.getLabel("moduletitle"); modules.put(label, module); - tabs.addTab(module.getComponent(), label, new ThemeResource(moduleConfig.getLabel("moduleicon"))); + tabs.addTab((Component) module.getComponent(), label, new ThemeResource(moduleConfig.getLabel("moduleicon"))); } catch (Exception e) { showSystemException(e); } @@ -126,7 +124,7 @@ public class MainApplication extends Application implements HttpServletRequestLi TabSheet tabSheet = event.getTabSheet(); Component selectedTab = tabSheet.getSelectedTab(); Tab tab = tabSheet.getTab(selectedTab); - GenericModule module = modules.get(tab.getCaption()); + Module module = modules.get(tab.getCaption()); try { module.reload(); } catch (HsarwebException e) { diff --git a/hsarweb/src/de/hsadmin/web/Module.java b/hsarweb/src/de/hsadmin/web/Module.java new file mode 100644 index 0000000..7c4d4b2 --- /dev/null +++ b/hsarweb/src/de/hsadmin/web/Module.java @@ -0,0 +1,17 @@ +package de.hsadmin.web; + +import de.hsadmin.web.config.ModuleConfig; + +public interface Module { + + public abstract MainApplication getApplication(); + + public abstract ModuleConfig getModuleConfig(); + + public abstract void reload() throws HsarwebException; + + public abstract void setApplication(MainApplication mainApplication) throws HsarwebException; + + public abstract Object getComponent(); + +} \ No newline at end of file diff --git a/hsarweb/src/de/hsadmin/web/QueueTaskModule.java b/hsarweb/src/de/hsadmin/web/QueueTaskModule.java index 1c0c3d8..36a326f 100644 --- a/hsarweb/src/de/hsadmin/web/QueueTaskModule.java +++ b/hsarweb/src/de/hsadmin/web/QueueTaskModule.java @@ -6,7 +6,7 @@ import de.hsadmin.web.config.ModuleConfig; import de.hsadmin.web.config.PropertyConfig; import de.hsadmin.web.config.PropertyTableColumn; -public class QueueTaskModule extends GenericModule { +public class QueueTaskModule extends AbstractModule { private static final long serialVersionUID = 1L; @@ -15,10 +15,6 @@ public class QueueTaskModule extends GenericModule { @Override protected void initModule() { moduleConfig = new ModuleConfig("q"); - moduleConfig.setUpdateAble(false); - moduleConfig.setDeleteAble(false); - moduleConfig.setAddAble(false); - moduleConfig.setSearchAble(false); moduleConfig.addProperty(new PropertyConfig(moduleConfig, "id", Long.class, PropertyTableColumn.INTERNAL_KEY)); moduleConfig.addProperty(new PropertyConfig(moduleConfig, "title", String.class)); moduleConfig.addProperty(new PropertyConfig(moduleConfig, "status", String.class)); diff --git a/hsarweb/src/de/hsadmin/web/SearchAble.java b/hsarweb/src/de/hsadmin/web/SearchAble.java new file mode 100644 index 0000000..4329920 --- /dev/null +++ b/hsarweb/src/de/hsadmin/web/SearchAble.java @@ -0,0 +1,6 @@ +package de.hsadmin.web; + + +public interface SearchAble { + +} diff --git a/hsarweb/src/de/hsadmin/web/UnixUserModule.java b/hsarweb/src/de/hsadmin/web/UnixUserModule.java index b4f69b0..f7f1d98 100644 --- a/hsarweb/src/de/hsadmin/web/UnixUserModule.java +++ b/hsarweb/src/de/hsadmin/web/UnixUserModule.java @@ -6,9 +6,10 @@ import java.util.TreeMap; import de.hsadmin.web.config.ModuleConfig; import de.hsadmin.web.config.PropertyConfig; import de.hsadmin.web.config.PropertyDefaultValue; -import de.hsadmin.web.config.PropertyFormField; import de.hsadmin.web.config.PropertySelectValues; import de.hsadmin.web.config.PropertyTableColumn; +import de.hsadmin.web.vaadin.PasswordPropertyFieldFactory; +import de.hsadmin.web.vaadin.SelectPropertyFieldFactory; public class UnixUserModule extends GenericModule { @@ -21,9 +22,12 @@ public class UnixUserModule extends GenericModule { moduleConfig = new ModuleConfig("user"); String login = getApplication().getLogin(); final String pac = login.length() >= 5 ? login.substring(0, 5) : ""; - PropertyConfig useridProp = new PropertyConfig(moduleConfig, "userid", Long.class, PropertyTableColumn.HIDDEN, PropertyFormField.READONLY); - PropertyConfig idProp = new PropertyConfig(moduleConfig, "id", Long.class, PropertyTableColumn.INTERNAL_KEY, PropertyFormField.INTERNAL_KEY); - PropertyConfig nameProp = new PropertyConfig(moduleConfig, "name", String.class, PropertyFormField.WRITEONCE); + PropertyConfig idProp = new PropertyConfig(moduleConfig, "id", Long.class, PropertyTableColumn.INTERNAL_KEY); + idProp.setReadOnly(true); + PropertyConfig useridProp = new PropertyConfig(moduleConfig, "userid", Long.class, PropertyTableColumn.HIDDEN); + useridProp.setReadOnly(true); + PropertyConfig nameProp = new PropertyConfig(moduleConfig, "name", String.class); + nameProp.setWriteOnce(true); nameProp.setDefaultValue(new PropertyDefaultValue() { @Override public String getDefaultValue() { @@ -33,9 +37,9 @@ public class UnixUserModule extends GenericModule { return ""; } }); - PropertyConfig passwordProp = new PropertyConfig(moduleConfig, "password", String.class, PropertyTableColumn.NONE, PropertyFormField.PASSWORD); + PropertyConfig passwordProp = new PropertyConfig(moduleConfig, "password", String.class, PropertyTableColumn.NONE, new PasswordPropertyFieldFactory(this)); PropertyConfig commentProp = new PropertyConfig(moduleConfig, "comment", String.class); - PropertyConfig shellProp = new PropertyConfig(moduleConfig, "shell", String.class); + PropertyConfig shellProp = new PropertyConfig(moduleConfig, "shell", String.class, new SelectPropertyFieldFactory()); shellProp.setDefaultValue(new PropertyDefaultValue() { @Override public String getDefaultValue() { @@ -65,8 +69,10 @@ public class UnixUserModule extends GenericModule { return true; } }); - PropertyConfig homedirProp = new PropertyConfig(moduleConfig, "homedir", String.class, PropertyTableColumn.HIDDEN, PropertyFormField.READONLY); - PropertyConfig pacProp = new PropertyConfig(moduleConfig, "pac", String.class, PropertyTableColumn.HIDDEN, PropertyFormField.READONLY); + PropertyConfig homedirProp = new PropertyConfig(moduleConfig, "homedir", String.class, PropertyTableColumn.HIDDEN); + homedirProp.setReadOnly(true); + PropertyConfig pacProp = new PropertyConfig(moduleConfig, "pac", String.class, PropertyTableColumn.HIDDEN); + pacProp.setReadOnly(true); pacProp.setDefaultValue(new PropertyDefaultValue() { @Override public String getDefaultValue() { diff --git a/hsarweb/src/de/hsadmin/web/UpdateAble.java b/hsarweb/src/de/hsadmin/web/UpdateAble.java new file mode 100644 index 0000000..e9aaaae --- /dev/null +++ b/hsarweb/src/de/hsadmin/web/UpdateAble.java @@ -0,0 +1,9 @@ +package de.hsadmin.web; + +import java.util.Map; + +public interface UpdateAble { + + public void updateRow(Map paramHash) throws HsarwebException; + +} diff --git a/hsarweb/src/de/hsadmin/web/config/ComponentFactory.java b/hsarweb/src/de/hsadmin/web/config/ComponentFactory.java new file mode 100644 index 0000000..87284ef --- /dev/null +++ b/hsarweb/src/de/hsadmin/web/config/ComponentFactory.java @@ -0,0 +1,11 @@ +package de.hsadmin.web.config; + +import de.hsadmin.web.HsarwebException; + +public interface ComponentFactory { + + public Object initComponent() throws HsarwebException; + + public void loadData() throws HsarwebException; + +} diff --git a/hsarweb/src/de/hsadmin/web/config/ModuleConfig.java b/hsarweb/src/de/hsadmin/web/config/ModuleConfig.java index 762c67b..acf8bb6 100644 --- a/hsarweb/src/de/hsadmin/web/config/ModuleConfig.java +++ b/hsarweb/src/de/hsadmin/web/config/ModuleConfig.java @@ -15,20 +15,12 @@ public class ModuleConfig implements Serializable { private List propertyList; private Map propertyMap; private LocaleConfig localeConfig; - private boolean deleteAble; - private boolean updateAble; - private boolean addAble; - private boolean searchAble; public ModuleConfig(String name) { this.name = name; propertyList = new ArrayList(); propertyMap = new HashMap(); localeConfig = new LocaleConfig(Locale.getDefault(), name); - addAble = true; - updateAble = true; - deleteAble = true; - searchAble = true; } public String getName() { @@ -52,38 +44,6 @@ public class ModuleConfig implements Serializable { return localeConfig.getText(key); } - public boolean isDeleteAble() { - return deleteAble; - } - - public boolean isUpdateAble() { - return updateAble; - } - - public boolean isAddAble() { - return addAble; - } - - public boolean isSearchAble() { - return searchAble; - } - - public void setDeleteAble(boolean deleteAble) { - this.deleteAble = deleteAble; - } - - public void setUpdateAble(boolean updateAble) { - this.updateAble = updateAble; - } - - public void setAddAble(boolean addAble) { - this.addAble = addAble; - } - - public void setSearchAble(boolean searchAble) { - this.searchAble = searchAble; - } - public int getNumOfColumns() { int numOfCols = 0; for (PropertyConfig prop : propertyList) { @@ -91,12 +51,6 @@ public class ModuleConfig implements Serializable { numOfCols++; } } - if (isUpdateAble()) { - numOfCols++; - } - if (isDeleteAble()) { - numOfCols++; - } return numOfCols; } diff --git a/hsarweb/src/de/hsadmin/web/config/PropertyConfig.java b/hsarweb/src/de/hsadmin/web/config/PropertyConfig.java index 372303c..ca04fd9 100644 --- a/hsarweb/src/de/hsadmin/web/config/PropertyConfig.java +++ b/hsarweb/src/de/hsadmin/web/config/PropertyConfig.java @@ -4,6 +4,8 @@ import java.io.Serializable; import java.util.HashMap; import java.util.Map; +import de.hsadmin.web.vaadin.DefaultPropertyFieldFactory; + public class PropertyConfig implements Serializable, PropertyDefaultValue, PropertySelectValues { private static final long serialVersionUID = 1L; @@ -12,7 +14,7 @@ public class PropertyConfig implements Serializable, PropertyDefaultValue, Prope private String id; private Class type; private PropertyTableColumn propTableColumn; - private PropertyFormField propFormField; + private PropertyFieldFactory propFieldFactory; private PropertyDefaultValue defaultValue; private PropertySelectValues selectValues; @@ -21,17 +23,17 @@ public class PropertyConfig implements Serializable, PropertyDefaultValue, Prope this.id = id; this.type = clasz; this.propTableColumn = PropertyTableColumn.DISPLAY; - this.propFormField = PropertyFormField.READWRITE; + this.setPropFieldFactory(new DefaultPropertyFieldFactory()); this.defaultValue = null; this.selectValues = null; } - public PropertyConfig(ModuleConfig moduleConfig, String id, Class clasz, PropertyFormField formField) { + public PropertyConfig(ModuleConfig moduleConfig, String id, Class clasz, PropertyFieldFactory fieldFactory) { this.moduleConfig = moduleConfig; this.id = id; this.type = clasz; this.propTableColumn = PropertyTableColumn.DISPLAY; - this.propFormField = formField; + this.setPropFieldFactory(fieldFactory); this.defaultValue = null; this.selectValues = null; } @@ -41,17 +43,17 @@ public class PropertyConfig implements Serializable, PropertyDefaultValue, Prope this.id = id; this.type = clasz; this.propTableColumn = tablecolumn; - this.propFormField = PropertyFormField.READWRITE; + this.setPropFieldFactory(new DefaultPropertyFieldFactory()); this.defaultValue = null; this.selectValues = null; } - public PropertyConfig(ModuleConfig moduleConfig, String id, Class clasz, PropertyTableColumn tablecolumn, PropertyFormField formField) { + public PropertyConfig(ModuleConfig moduleConfig, String id, Class clasz, PropertyTableColumn tablecolumn, PropertyFieldFactory fieldFactory) { this.moduleConfig = moduleConfig; this.id = id; this.type = clasz; this.propTableColumn = tablecolumn; - this.propFormField = formField; + this.setPropFieldFactory(fieldFactory); this.defaultValue = null; this.selectValues = null; } @@ -72,10 +74,6 @@ public class PropertyConfig implements Serializable, PropertyDefaultValue, Prope return propTableColumn; } - public PropertyFormField getPropFormField() { - return propFormField; - } - public void setDefaultValue(PropertyDefaultValue defaultValue) { this.defaultValue = defaultValue; } @@ -102,7 +100,7 @@ public class PropertyConfig implements Serializable, PropertyDefaultValue, Prope if (selectValues != null) { return selectValues.newItemsAllowed(); } - return propFormField == PropertyFormField.READWRITE || propFormField == PropertyFormField.WRITEONCE; + return true; } @Override @@ -112,5 +110,21 @@ public class PropertyConfig implements Serializable, PropertyDefaultValue, Prope } return false; } + + public void setPropFieldFactory(PropertyFieldFactory propFieldFactory) { + this.propFieldFactory = propFieldFactory; + } + + public PropertyFieldFactory getPropFieldFactory() { + return propFieldFactory; + } + + public void setReadOnly(boolean readOnly) { + propFieldFactory.setReadOnly(readOnly); + } + + public void setWriteOnce(boolean writeOnce) { + propFieldFactory.setWriteOnce(writeOnce); + } } diff --git a/hsarweb/src/de/hsadmin/web/config/PropertyFieldFactory.java b/hsarweb/src/de/hsadmin/web/config/PropertyFieldFactory.java new file mode 100644 index 0000000..90fc176 --- /dev/null +++ b/hsarweb/src/de/hsadmin/web/config/PropertyFieldFactory.java @@ -0,0 +1,19 @@ +package de.hsadmin.web.config; + +import de.hsadmin.web.HsarwebException; + +public interface PropertyFieldFactory { + + public Object createFieldComponent(PropertyConfig prop, Object value); + + public String getValue(PropertyConfig prop, Object component) throws HsarwebException; + + public void setReadOnly(boolean readOnly); + + public boolean isReadOnly(); + + public void setWriteOnce(boolean writeOnce); + + public boolean isWriteOnce(); + +} diff --git a/hsarweb/src/de/hsadmin/web/config/PropertyFormField.java b/hsarweb/src/de/hsadmin/web/config/PropertyFormField.java deleted file mode 100644 index cc0da81..0000000 --- a/hsarweb/src/de/hsadmin/web/config/PropertyFormField.java +++ /dev/null @@ -1,10 +0,0 @@ -package de.hsadmin.web.config; - -public enum PropertyFormField { - INTERNAL_KEY, - READWRITE, - WRITEONCE, - READONLY, - PASSWORD, - NONE -} diff --git a/hsarweb/src/de/hsadmin/web/vaadin/DefaultPropertyFieldFactory.java b/hsarweb/src/de/hsadmin/web/vaadin/DefaultPropertyFieldFactory.java new file mode 100644 index 0000000..80ea527 --- /dev/null +++ b/hsarweb/src/de/hsadmin/web/vaadin/DefaultPropertyFieldFactory.java @@ -0,0 +1,51 @@ +package de.hsadmin.web.vaadin; + +import com.vaadin.terminal.Sizeable; +import com.vaadin.ui.TextField; + +import de.hsadmin.web.config.PropertyConfig; +import de.hsadmin.web.config.PropertyFieldFactory; + +public class DefaultPropertyFieldFactory implements PropertyFieldFactory { + + private boolean readOnly = false; + private boolean writeOnce; + + @Override + public Object createFieldComponent(PropertyConfig prop, Object value) { + TextField tf = new TextField(prop.getLabel()); + tf.setData(prop.getId()); + tf.setWidth(480.0f, Sizeable.UNITS_PIXELS); + tf.setValue(value != null ? value : prop.getDefaultValue()); + tf.setReadOnly(isReadOnly()); + return tf; + } + + @Override + public String getValue(PropertyConfig prop, Object component) { + if (component instanceof TextField) { + return (String) ((TextField) component).getValue(); + } + return null; + } + + @Override + public void setReadOnly(boolean readOnly) { + this.readOnly = readOnly; + } + + public boolean isReadOnly() { + return readOnly; + } + + @Override + public void setWriteOnce(boolean writeOnce) { + this.writeOnce = writeOnce; + } + + @Override + public boolean isWriteOnce() { + return writeOnce; + } + +} diff --git a/hsarweb/src/de/hsadmin/web/vaadin/GenericForm.java b/hsarweb/src/de/hsadmin/web/vaadin/GenericForm.java new file mode 100644 index 0000000..be0c8ea --- /dev/null +++ b/hsarweb/src/de/hsadmin/web/vaadin/GenericForm.java @@ -0,0 +1,102 @@ +package de.hsadmin.web.vaadin; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import com.vaadin.ui.AbstractComponent; +import com.vaadin.ui.Component; +import com.vaadin.ui.Form; +import com.vaadin.ui.Layout; + +import de.hsadmin.web.HsarwebException; +import de.hsadmin.web.MainApplication; +import de.hsadmin.web.Module; +import de.hsadmin.web.config.ModuleConfig; +import de.hsadmin.web.config.PropertyConfig; +import de.hsadmin.web.config.PropertyFieldFactory; +import de.hsadmin.web.config.PropertyTableColumn; + +public class GenericForm { + + private Module module; + private Long entityId; + + public GenericForm(Module module, Long entityId) { + this.module = module; + this.entityId = entityId; + } + + public Form createAddForm() { + Form f = new Form(); + ModuleConfig config = module.getModuleConfig(); + f.setCaption(config.getLabel("new")); + Layout layout = f.getLayout(); + for (PropertyConfig prop : config.getPropertyList()) { + PropertyFieldFactory propFieldFactory = prop.getPropFieldFactory(); + if (!propFieldFactory.isReadOnly()) { + layout.addComponent((Component) propFieldFactory.createFieldComponent(prop, null)); + } + } + return f; + } + + public Form createUpdateForm() { + try { + MainApplication application = module.getApplication(); + ModuleConfig config = module.getModuleConfig(); + Map where = new HashMap(); + where.put(findIdKey(), entityId.toString()); + Object searchResult = application.getRemote().callSearch(config.getName(), where); + if (searchResult instanceof Object[]) { + Map row = (Map) (((Object[]) searchResult)[0]); + Form f = new Form(); + f.setCaption(config.getLabel("update")); + f.setData(entityId); + Layout layout = f.getLayout(); + for (PropertyConfig prop : config.getPropertyList()) { + PropertyFieldFactory propFieldFactory = prop.getPropFieldFactory(); + Object value = row.get(prop.getId()); + Component component = (Component) propFieldFactory.createFieldComponent(prop, value); + if (propFieldFactory.isWriteOnce()) { + component.setReadOnly(true); + } + layout.addComponent(component); + } + return f; + } + } catch (HsarwebException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + private String findIdKey() { + List propertyList = module.getModuleConfig().getPropertyList(); + String idKey = null; + for (PropertyConfig propConf : propertyList) { + PropertyTableColumn propTableColumn = propConf.getPropTableColumn(); + if (PropertyTableColumn.INTERNAL_KEY == propTableColumn) { + idKey = propConf.getId(); + return idKey; + } + } + return idKey; + } + + public void transferToHash(Map map, Form form) throws HsarwebException { + Iterator iterator = form.getLayout().getComponentIterator(); + while (iterator.hasNext()) { + Component component = (Component) iterator.next(); + if (component instanceof AbstractComponent) { + Object data = ((AbstractComponent) component).getData(); + String propName = (String) data; + PropertyConfig property = module.getModuleConfig().getProperty(propName); + map.put(propName, property.getPropFieldFactory().getValue(property, component)); + } + } + } + +} diff --git a/hsarweb/src/de/hsadmin/web/vaadin/PasswordPropertyFieldFactory.java b/hsarweb/src/de/hsadmin/web/vaadin/PasswordPropertyFieldFactory.java new file mode 100644 index 0000000..7264273 --- /dev/null +++ b/hsarweb/src/de/hsadmin/web/vaadin/PasswordPropertyFieldFactory.java @@ -0,0 +1,79 @@ +package de.hsadmin.web.vaadin; + +import com.vaadin.terminal.Sizeable; +import com.vaadin.ui.PasswordField; +import com.vaadin.ui.VerticalLayout; + +import de.hsadmin.web.HsarwebException; +import de.hsadmin.web.Module; +import de.hsadmin.web.config.ModuleConfig; +import de.hsadmin.web.config.PropertyConfig; +import de.hsadmin.web.config.PropertyFieldFactory; + +public class PasswordPropertyFieldFactory implements PropertyFieldFactory { + + private Module module; + private boolean readOnly; + private boolean writeOnce; + + public PasswordPropertyFieldFactory(Module module) { + this.module = module; + } + + @Override + public Object createFieldComponent(PropertyConfig prop, Object value) { + ModuleConfig config = module.getModuleConfig(); + VerticalLayout layout = new VerticalLayout(); + layout.setCaption(prop.getLabel()); + layout.setData(prop.getId()); + PasswordField tf1 = new PasswordField(config.getLabel(prop.getId() + "1")); + tf1.setData(prop.getId()); + tf1.setWidth(480.0f, Sizeable.UNITS_PIXELS); + tf1.setValue(value != null ? value : prop.getDefaultValue()); + tf1.setReadOnly(readOnly); + layout.addComponent(tf1); + PasswordField tf2 = new PasswordField(config.getLabel(prop.getId() + "2")); + tf2.setData(prop.getId()); + tf2.setWidth(480.0f, Sizeable.UNITS_PIXELS); + tf2.setValue(value != null ? value : prop.getDefaultValue()); + tf2.setReadOnly(readOnly); + layout.addComponent(tf2); + return layout; + } + + @Override + public String getValue(PropertyConfig prop, Object component) throws HsarwebException { + if (component instanceof VerticalLayout) { + VerticalLayout layout = (VerticalLayout) component; + PasswordField pw1 = (PasswordField) layout.getComponent(0); + PasswordField pw2 = (PasswordField) layout.getComponent(1); + if (pw1.getValue().equals(pw2.getValue())) { + return (String) pw1.getValue(); + } else { + throw new HsarwebException("password mismatch"); + } + } + return null; + } + + @Override + public void setReadOnly(boolean readOnly) { + this.readOnly = readOnly; + } + + @Override + public boolean isReadOnly() { + return readOnly; + } + + @Override + public void setWriteOnce(boolean writeOnce) { + this.writeOnce = writeOnce; + } + + @Override + public boolean isWriteOnce() { + return writeOnce; + } + +} diff --git a/hsarweb/src/de/hsadmin/web/vaadin/SelectPropertyFieldFactory.java b/hsarweb/src/de/hsadmin/web/vaadin/SelectPropertyFieldFactory.java new file mode 100644 index 0000000..a901388 --- /dev/null +++ b/hsarweb/src/de/hsadmin/web/vaadin/SelectPropertyFieldFactory.java @@ -0,0 +1,64 @@ +package de.hsadmin.web.vaadin; + +import java.util.Map; + +import com.vaadin.terminal.Sizeable; +import com.vaadin.ui.Select; + +import de.hsadmin.web.HsarwebException; +import de.hsadmin.web.config.PropertyConfig; +import de.hsadmin.web.config.PropertyFieldFactory; + +public class SelectPropertyFieldFactory implements PropertyFieldFactory { + + private boolean readOnly; + private boolean writeOnce; + + @Override + public Object createFieldComponent(PropertyConfig prop, Object value) { + Select sel = new Select(prop.getLabel()); + sel.setData(prop.getId()); + sel.setNullSelectionAllowed(false); + sel.setNewItemsAllowed(prop.newItemsAllowed()); + Map selectValues = prop.getSelectValues(); + for (Object key : selectValues.keySet()) { + sel.addItem(key); + sel.setItemCaption(key, selectValues.get(key)); + } + sel.setWidth(480.0f, Sizeable.UNITS_PIXELS); + sel.setValue(value != null ? value : prop.getDefaultValue()); + sel.setReadOnly(readOnly); + sel.setInvalidAllowed(prop.newItemsAllowed()); + return sel; + } + + @Override + public String getValue(PropertyConfig prop, Object component) + throws HsarwebException { + if (component instanceof Select) { + return (String) ((Select) component).getValue(); + } + return null; + } + + @Override + public void setReadOnly(boolean readOnly) { + this.readOnly = readOnly; + } + + @Override + public boolean isReadOnly() { + return readOnly; + } + + @Override + public void setWriteOnce(boolean writeOnce) { + this.writeOnce = writeOnce; + } + + @Override + public boolean isWriteOnce() { + return writeOnce; + } + +} diff --git a/hsarweb/src/de/hsadmin/web/vaadin/TableComponentFactory.java b/hsarweb/src/de/hsadmin/web/vaadin/TableComponentFactory.java new file mode 100644 index 0000000..034734c --- /dev/null +++ b/hsarweb/src/de/hsadmin/web/vaadin/TableComponentFactory.java @@ -0,0 +1,296 @@ +package de.hsadmin.web.vaadin; + +import java.io.Serializable; +import java.text.DateFormat; +import java.text.ParseException; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.vaadin.data.Property; +import com.vaadin.terminal.Sizeable; +import com.vaadin.terminal.ThemeResource; +import com.vaadin.ui.Button; +import com.vaadin.ui.Form; +import com.vaadin.ui.HorizontalLayout; +import com.vaadin.ui.Label; +import com.vaadin.ui.Table; +import com.vaadin.ui.VerticalLayout; +import com.vaadin.ui.Window; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.themes.BaseTheme; + +import de.hsadmin.web.DeleteAble; +import de.hsadmin.web.HsarwebException; +import de.hsadmin.web.MainApplication; +import de.hsadmin.web.Module; +import de.hsadmin.web.UpdateAble; +import de.hsadmin.web.config.ComponentFactory; +import de.hsadmin.web.config.LocaleConfig; +import de.hsadmin.web.config.ModuleConfig; +import de.hsadmin.web.config.PropertyConfig; +import de.hsadmin.web.config.PropertyTableColumn; + +public class TableComponentFactory implements ComponentFactory, Serializable { + + private static final long serialVersionUID = 1L; + private static final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT); + + private Module module; + private Table table; + + public TableComponentFactory(Module module) { + this.module = module; + } + + @Override + public Object initComponent() throws HsarwebException { + ModuleConfig config = module.getModuleConfig(); + table = new Table() { + private static final long serialVersionUID = 1L; + @Override + protected String formatPropertyValue(Object rowId, Object colId, + Property property) { + if (Date.class == property.getType()) { + try { + return df.format(property.getValue()); + } catch (IllegalArgumentException e) { + return "---"; + } + } + return super.formatPropertyValue(rowId, colId, property); + } + }; + try { + table.setWidth(100.0f, Sizeable.UNITS_PERCENTAGE); + table.setHeight(100.0f, Sizeable.UNITS_PERCENTAGE); + table.setSelectable(false); + table.setImmediate(true); + table.setColumnCollapsingAllowed(true); + table.setColumnReorderingAllowed(true); + for (PropertyConfig prop : config.getPropertyList()) { + PropertyTableColumn propTableColumn = prop.getPropTableColumn(); + if (propTableColumn != PropertyTableColumn.NONE) { + table.addContainerProperty(prop.getId(), prop.getType(), prop.getDefaultValue()); + table.setColumnHeader(prop.getId(), prop.getLabel()); + if (propTableColumn == PropertyTableColumn.HIDDEN) { + table.setColumnCollapsed(prop.getId(), true); + } + if (propTableColumn == PropertyTableColumn.INTERNAL_KEY) { + table.setColumnCollapsed(prop.getId(), true); + } + } + } + if (module instanceof UpdateAble) { + table.addContainerProperty("edit", Button.class, null); + table.setColumnWidth("edit", 16); + table.setColumnHeader("edit", ""); + } + if (module instanceof DeleteAble) { + table.addContainerProperty("del", Button.class, null); + table.setColumnWidth("del", 16); + table.setColumnHeader("del", ""); + } + } catch (Exception e) { + throw new HsarwebException(e); + } + return table; + } + + @Override + public void loadData() throws HsarwebException { + table.removeAllItems(); + try { + ModuleConfig moduleConfig = module.getModuleConfig(); + Object callSearch = module.getApplication().getRemote().callSearch(moduleConfig.getName(), new HashMap()); + List propertyList = moduleConfig.getPropertyList(); + if (callSearch instanceof Object[]) { + for (Object row : ((Object[])callSearch)) { + long oid = -1L; + if (row instanceof Map) { + int numOfcolumns = moduleConfig.getNumOfColumns(); + if (module instanceof UpdateAble) { + numOfcolumns++; + } + if (module instanceof DeleteAble) { + numOfcolumns++; + } + Object[] itemData = new Object[numOfcolumns]; + int idx = 0; + for (PropertyConfig prop : propertyList) { + PropertyTableColumn propTableColumn = prop.getPropTableColumn(); + if (propTableColumn != PropertyTableColumn.NONE) { + Object valueObject = ((Map) row).get(prop.getId()); + if (valueObject != null && valueObject instanceof String) { + if (Long.class.equals(prop.getType())) { + itemData[idx] = Long.parseLong((String) valueObject); + } + if (Date.class.equals(prop.getType())) { + try { + itemData[idx] = df.parse((String) valueObject); + } catch (ParseException e) { + Calendar cal = Calendar.getInstance(); + cal.clear(); + itemData[idx] = cal.getTime(); + } + } + if (String.class.equals(prop.getType())) { + itemData[idx] = (String) valueObject; + } + if (propTableColumn == PropertyTableColumn.INTERNAL_KEY && Long.class.equals(prop.getType())) { + if (valueObject instanceof String) { + oid = Long.parseLong((String) valueObject); + } + } + } + idx++; + } + } + if (module instanceof UpdateAble) { + itemData[idx] = createEditButton(oid); + idx++; + } + if (module instanceof DeleteAble) { + itemData[idx] = createDeleteButton(oid); + idx++; + } + table.addItem(itemData, oid); + } + } + table.sort(); + } + } catch (UnsupportedOperationException e) { + throw new HsarwebException(e); + } + } + + private Button createEditButton(long id) { + ThemeResource icon = new ThemeResource("../runo/icons/16/document-txt.png"); + final Button button = new Button(); + final Module thisModule = module; + button.setIcon(icon); + button.setData(id); + button.setStyleName(BaseTheme.BUTTON_LINK); + button.addListener(new Button.ClickListener() { + private static final long serialVersionUID = 1L; + private Window childWindow; + @Override + public void buttonClick(ClickEvent event) { + final GenericForm genericForm = new GenericForm(thisModule, (Long) button.getData()); + final Form form = genericForm.createUpdateForm(); + final MainApplication application = module.getApplication(); + LocaleConfig localeConfig = application.getLocaleConfig(); + childWindow = new Window(module.getModuleConfig().getLabel("moduletitle") + " " + localeConfig.getText("update")); + childWindow.setWidth(640.0f, Sizeable.UNITS_PIXELS); + VerticalLayout vLayout = new VerticalLayout(); + vLayout.setMargin(true); + vLayout.setSpacing(true); + vLayout.addComponent(form); + HorizontalLayout hLayout = new HorizontalLayout(); + Button btSaveRow = new Button(localeConfig.getText("save")); + btSaveRow.addListener(new Button.ClickListener() { + private static final long serialVersionUID = 1L; + @Override + public void buttonClick(ClickEvent event) { + application.getMainWindow().removeWindow(childWindow); + try { + Map map = new HashMap(); + genericForm.transferToHash(map, form); + ((UpdateAble) module).updateRow(map); + loadData(); + } catch (HsarwebException e) { + application.showUserException(e); + } + } + }); + Button btAbort = new Button(localeConfig.getText("abort")); + btAbort.addListener(new Button.ClickListener() { + private static final long serialVersionUID = 1L; + @Override + public void buttonClick(ClickEvent event) { + application.getMainWindow().removeWindow(childWindow); + } + }); + hLayout.addComponent(btSaveRow); + hLayout.addComponent(btAbort); + vLayout.addComponent(hLayout); + childWindow.setContent(vLayout); + childWindow.setModal(true); + application.getMainWindow().addWindow(childWindow); + } + }); + return button; + } + + private Button createDeleteButton(long id) { + ThemeResource icon = new ThemeResource("../runo/icons/16/document-delete.png"); + final Button button = new Button(); + button.setIcon(icon); + button.setData(id); + button.setStyleName(BaseTheme.BUTTON_LINK); + button.addListener(new Button.ClickListener() { + private static final long serialVersionUID = 1L; + private Window childWindow; + @Override + public void buttonClick(ClickEvent event) { + final MainApplication application = module.getApplication(); + LocaleConfig localeConfig = application.getLocaleConfig(); + childWindow = new Window(module.getModuleConfig().getLabel("moduletitle") + " " + localeConfig.getText("delete")); + childWindow.setWidth(320.0f, Sizeable.UNITS_PIXELS); + VerticalLayout vLayout = new VerticalLayout(); + vLayout.setMargin(true); + vLayout.setSpacing(true); + vLayout.addComponent(new Label(localeConfig.getText("confirmdelete"))); + HorizontalLayout hLayout = new HorizontalLayout(); + Button btDeleteRow = new Button(localeConfig.getText("delete")); + btDeleteRow.addListener(new Button.ClickListener() { + private static final long serialVersionUID = 1L; + @Override + public void buttonClick(ClickEvent event) { + application.getMainWindow().removeWindow(childWindow); + try { + Map map = new HashMap(); + map.put(findIdKey(), ((Long) button.getData()).toString()); + ((DeleteAble) module).deleteRow(map); + loadData(); + } catch (HsarwebException e) { + application.showUserException(e); + } + } + }); + Button btAbort = new Button(localeConfig.getText("abort")); + btAbort.addListener(new Button.ClickListener() { + private static final long serialVersionUID = 1L; + @Override + public void buttonClick(ClickEvent event) { + application.getMainWindow().removeWindow(childWindow); + } + }); + hLayout.addComponent(btDeleteRow); + hLayout.addComponent(btAbort); + vLayout.addComponent(hLayout); + childWindow.setContent(vLayout); + childWindow.setModal(true); + application.getMainWindow().addWindow(childWindow); + } + }); + return button; + } + + private String findIdKey() { + List propertyList = module.getModuleConfig().getPropertyList(); + String idKey = null; + for (PropertyConfig propConf : propertyList) { + PropertyTableColumn propTableColumn = propConf.getPropTableColumn(); + if (PropertyTableColumn.INTERNAL_KEY == propTableColumn) { + idKey = propConf.getId(); + return idKey; + } + } + return idKey; + } + + +} diff --git a/hsarweb/src/texts/user.properties b/hsarweb/src/texts/user.properties index 9ca404b..8e5f4fd 100644 --- a/hsarweb/src/texts/user.properties +++ b/hsarweb/src/texts/user.properties @@ -1,6 +1,7 @@ id=identifier name=username -password1=password +password=password +password1=new password password2=repeat password comment=comment shell=shell diff --git a/hsarweb/src/texts/user_de.properties b/hsarweb/src/texts/user_de.properties index c95ffdd..9ca69c5 100644 --- a/hsarweb/src/texts/user_de.properties +++ b/hsarweb/src/texts/user_de.properties @@ -1,7 +1,8 @@ id=Schlüssel name=Benutzername -password1=Passwort -password2=Passwort (Wdhlg.) +password=Passwort +password1=neues Passwort +password2=Passwort-Wiederholung comment=Kommentar shell=Shell userid=Benutzerkennung