From 6ad12420de4435feed22cc17088843086ebff6d8 Mon Sep 17 00:00:00 2001 From: Peter Hormanns Date: Sun, 9 Apr 2017 15:23:35 +0200 Subject: [PATCH 01/18] add member_share and member_asset tables --- .../main/resources/liquibase/db.changelog.xml | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/db-migration/src/main/resources/liquibase/db.changelog.xml b/db-migration/src/main/resources/liquibase/db.changelog.xml index 43391c9..82fe28f 100644 --- a/db-migration/src/main/resources/liquibase/db.changelog.xml +++ b/db-migration/src/main/resources/liquibase/db.changelog.xml @@ -724,4 +724,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + From a2aad851bb05deaea62e0302022dee43260143d9 Mon Sep 17 00:00:00 2001 From: Peter Hormanns Date: Tue, 18 Apr 2017 12:31:19 +0200 Subject: [PATCH 02/18] set context for tomee:run --- cust-services/pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/cust-services/pom.xml b/cust-services/pom.xml index 357f99a..eb09a5b 100644 --- a/cust-services/pom.xml +++ b/cust-services/pom.xml @@ -104,6 +104,7 @@ webprofile false 8000 + cust-webapp ${project.basedir}/src/test/tomee/conf org.postgresql:postgresql:9.4.1212.jre7 From be09bfc0365588ed782bd0cc344e939f8c10e083 Mon Sep 17 00:00:00 2001 From: Peter Hormanns Date: Tue, 18 Apr 2017 12:32:22 +0200 Subject: [PATCH 03/18] skip internaly generated proeprties --- .../java/de/hsadmin/service/property/PropertyService.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/framework/src/main/java/de/hsadmin/service/property/PropertyService.java b/framework/src/main/java/de/hsadmin/service/property/PropertyService.java index fff838d..beeb1c7 100644 --- a/framework/src/main/java/de/hsadmin/service/property/PropertyService.java +++ b/framework/src/main/java/de/hsadmin/service/property/PropertyService.java @@ -67,9 +67,13 @@ public class PropertyService extends AbstractModule implements Prope final ValueObject valueObject = serviceRemote.createValueObject(); final Field[] declaredFields = valueObject.getClass().getDeclaredFields(); for (Field f : declaredFields) { + final String fName = f.getName(); + if (fName.startsWith("$")) { + continue; + } final PropertyVO vo = buildVO(); vo.setModule(properyName); - vo.setName(f.getName()); + vo.setName(fName); final ReadWrite readWrite = f.getAnnotation(ReadWrite.class); if (readWrite == null) { vo.setReadwriteable(ReadWritePolicy.NONE.name().toLowerCase()); @@ -104,7 +108,7 @@ public class PropertyService extends AbstractModule implements Prope vo.setMinLength(size.min()); vo.setMaxLength(size.max()); } - vo.setType(printableTypeName(valueObject.get(f.getName()).getValueType())); + vo.setType(printableTypeName(valueObject.get(fName).getValueType())); emptyList.add(vo); } } From d8f2345d6fd011cd1df05078f1304415ba2fe3ba Mon Sep 17 00:00:00 2001 From: Peter Hormanns Date: Tue, 18 Apr 2017 16:56:33 +0200 Subject: [PATCH 04/18] fix ProeprtyService --- .../de/hsadmin/module/impl/AbstractVO.java | 17 ++-- .../service/property/PropertyService.java | 83 +++++++++++-------- 2 files changed, 55 insertions(+), 45 deletions(-) diff --git a/framework/src/main/java/de/hsadmin/module/impl/AbstractVO.java b/framework/src/main/java/de/hsadmin/module/impl/AbstractVO.java index 6326160..1d1f7ce 100644 --- a/framework/src/main/java/de/hsadmin/module/impl/AbstractVO.java +++ b/framework/src/main/java/de/hsadmin/module/impl/AbstractVO.java @@ -86,7 +86,7 @@ public abstract class AbstractVO implements ValueObject { } private boolean isPropertyField(final Field f) { - ReadWrite annotation = f.getAnnotation(ReadWrite.class); + final ReadWrite annotation = f.getAnnotation(ReadWrite.class); return annotation != null; } @@ -102,12 +102,15 @@ public abstract class AbstractVO implements ValueObject { final Class type = Class.forName("de.hsadmin.module.property." + simplePropertyClassName + "Property"); final Constructor constructor = type.getConstructor(ValueObject.class, String.class, ReadWritePolicy.class, SearchPolicy.class, boolean.class); final Property newInstance = (Property) constructor.newInstance(this, f.getName(), getReadWritePolicy(f), getSearchPolicy(f), isRequired(f)); - set(f.getName(), newInstance); + final String propertyName = f.getName(); + assert propertyName != null && propertyName.length() > 0; + assert newInstance != null; + propertiesMap.put(propertyName, newInstance); if (ContainsElements.class.isAssignableFrom(type)) { ContainsElements container = (ContainsElements) newInstance; container.setElementsType(getElementsType(f)); } - Mapping mapping = f.getAnnotation(Mapping.class); + final Mapping mapping = f.getAnnotation(Mapping.class); if (mapping != null && newInstance instanceof AbstractProperty) { AbstractProperty prop = (AbstractProperty) newInstance; PersistentObjectMapper persistentObjectMapper = mapping.boMapping().newInstance(); @@ -119,17 +122,11 @@ public abstract class AbstractVO implements ValueObject { } } } catch (IllegalArgumentException | IllegalAccessException | InstantiationException | InvocationTargetException - | NoSuchMethodException | SecurityException | UserException | ClassNotFoundException e) { + | NoSuchMethodException | SecurityException | ClassNotFoundException e) { throw new TechnicalException(e); } } - private void set(final String propertyName, final Property propertyInstance) throws UserException { - assert propertyName != null && propertyName.length() > 0; - assert propertyInstance != null; - propertiesMap.put(propertyName, propertyInstance); - } - private SearchPolicy getSearchPolicy(final Field f) { final Search search = f.getAnnotation(Search.class); SearchPolicy searchPolicy = SearchPolicy.NONE; diff --git a/framework/src/main/java/de/hsadmin/service/property/PropertyService.java b/framework/src/main/java/de/hsadmin/service/property/PropertyService.java index beeb1c7..3876c79 100644 --- a/framework/src/main/java/de/hsadmin/service/property/PropertyService.java +++ b/framework/src/main/java/de/hsadmin/service/property/PropertyService.java @@ -1,7 +1,6 @@ package de.hsadmin.service.property; import java.io.IOException; -import java.lang.reflect.Field; import java.util.Enumeration; import java.util.List; import java.util.Properties; @@ -14,6 +13,7 @@ import javax.validation.constraints.Size; import de.hsadmin.common.error.TechnicalException; import de.hsadmin.common.error.UserException; +import de.hsadmin.common.util.ReflectionUtil; import de.hsadmin.login.RequestContext; import de.hsadmin.login.RequiredScope; import de.hsadmin.login.Role; @@ -22,6 +22,7 @@ import de.hsadmin.module.ValueObject; import de.hsadmin.module.impl.AbstractModule; import de.hsadmin.module.property.Display; import de.hsadmin.module.property.DisplayPolicy; +import de.hsadmin.module.property.Property; import de.hsadmin.module.property.ReadWrite; import de.hsadmin.module.property.ReadWritePolicy; import de.hsadmin.module.property.Search; @@ -31,6 +32,8 @@ import de.hsadmin.xmlrpc.AbstractRemote; @Stateless public class PropertyService extends AbstractModule implements PropertyServiceLocal { + public static final String DEFAULT_VALIDATION_REGEXP = "[a-zA-Z0-9\\_\\-\\.\\,\\ ]*"; + @PersistenceContext(name="hsar") private EntityManager entityManager; @@ -47,6 +50,7 @@ public class PropertyService extends AbstractModule implements Prope } @Override + @SuppressWarnings("unchecked") @RequiredScope({@ScopePolicy(Role.ANY)}) public List read(final RequestContext requestContext, final PropertyVO criteria) throws UserException, TechnicalException { @@ -55,60 +59,57 @@ public class PropertyService extends AbstractModule implements Prope final String requestedModuleName = criteria.getModule(); try { remoteServicesProperties.load(getClass().getClassLoader().getResourceAsStream("org/apache/xmlrpc/webserver/XmlRpcServlet.properties")); - final Enumeration propertyNames = remoteServicesProperties.propertyNames(); - while (propertyNames.hasMoreElements()) { - final String properyName = (String) propertyNames.nextElement(); - if (requestedModuleName != null && !requestedModuleName.equals(properyName)) { + final Enumeration remoteModuleNames = remoteServicesProperties.propertyNames(); + while (remoteModuleNames.hasMoreElements()) { + final String moduleName = (String) remoteModuleNames.nextElement(); + if (requestedModuleName != null && !requestedModuleName.equals(moduleName)) { continue; } - final Class serviceRemoteClass = Class.forName(remoteServicesProperties.getProperty(properyName)); - @SuppressWarnings("unchecked") + final Class serviceRemoteClass = Class.forName(remoteServicesProperties.getProperty(moduleName)); final AbstractRemote serviceRemote = (AbstractRemote) serviceRemoteClass.newInstance(); final ValueObject valueObject = serviceRemote.createValueObject(); - final Field[] declaredFields = valueObject.getClass().getDeclaredFields(); - for (Field f : declaredFields) { - final String fName = f.getName(); - if (fName.startsWith("$")) { - continue; - } + final Class voClass = valueObject.getClass(); + final List> propertiesList = valueObject.properties(); + for (final Property prop : propertiesList) { final PropertyVO vo = buildVO(); - vo.setModule(properyName); - vo.setName(fName); - final ReadWrite readWrite = f.getAnnotation(ReadWrite.class); + final String propName = prop.getName(); + setStringValue(vo, "module", moduleName); + setStringValue(vo, "name", propName); + final ReadWrite readWrite = (ReadWrite) ReflectionUtil.getAnnotation(voClass, propName, ReadWrite.class); if (readWrite == null) { - vo.setReadwriteable(ReadWritePolicy.NONE.name().toLowerCase()); + setStringValue(vo, "readwriteable", ReadWritePolicy.NONE.name().toLowerCase()); } else { - vo.setReadwriteable(readWrite.value().name().toLowerCase()); + setStringValue(vo, "readwriteable", readWrite.value().name().toLowerCase()); } - final Search search = f.getAnnotation(Search.class); + final Search search = (Search) ReflectionUtil.getAnnotation(voClass, propName, Search.class); if (search == null) { - vo.setSearchable(SearchPolicy.NONE.name().toLowerCase()); + setStringValue(vo, "searchable", SearchPolicy.NONE.name().toLowerCase()); } else { - vo.setSearchable(search.value().name().toLowerCase()); + setStringValue(vo, "searchable", search.value().name().toLowerCase()); } - final Display sequence = f.getAnnotation(Display.class); + final Display sequence = (Display) ReflectionUtil.getAnnotation(voClass, propName, Display.class); if (sequence == null) { - vo.setDisplaySequence(Integer.valueOf(9999)); - vo.setDisplayVisible(DisplayPolicy.ALWAYS.name().toLowerCase());; + setIntValue(vo, "displaySequence", 9999); + setStringValue(vo, "displayVisible", DisplayPolicy.ALWAYS.name().toLowerCase()); } else { - vo.setDisplaySequence(sequence.sequence()); - vo.setDisplayVisible(sequence.visible().name().toLowerCase());; + setIntValue(vo, "displaySequence", sequence.sequence()); + setStringValue(vo, "displayVisible", sequence.visible().name().toLowerCase()); } - final Pattern pattern = f.getAnnotation(Pattern.class); + final Pattern pattern = (Pattern) ReflectionUtil.getAnnotation(voClass, propName, Pattern.class); if (pattern == null) { - vo.setValidationRegexp("[a-zA-Z0-9\\_\\-\\.\\,\\ ]*"); + setStringValue(vo, "validationRegexp", DEFAULT_VALIDATION_REGEXP); } else { - vo.setValidationRegexp(pattern.regexp()); + setStringValue(vo, "validationRegexp", pattern.regexp()); } - final Size size = f.getAnnotation(Size.class); + final Size size = (Size) ReflectionUtil.getAnnotation(voClass, propName, Size.class); if (size == null) { - vo.setMinLength(Integer.valueOf(0)); - vo.setMaxLength(Integer.valueOf(999)); + setIntValue(vo, "minLength", 0); + setIntValue(vo, "maxLength", 999); } else { - vo.setMinLength(size.min()); - vo.setMaxLength(size.max()); + setIntValue(vo, "minLength", size.min()); + setIntValue(vo, "maxLength", size.max()); } - vo.setType(printableTypeName(valueObject.get(fName).getValueType())); + setStringValue(vo, "type", printableTypeName(valueObject.get(propName).getValueType())); emptyList.add(vo); } } @@ -118,6 +119,18 @@ public class PropertyService extends AbstractModule implements Prope return emptyList; } + private void setStringValue(final PropertyVO vo, final String propertyName, final String value) throws TechnicalException, UserException { + @SuppressWarnings("unchecked") + final Property property = (Property) vo.get(propertyName); + property.setValue(value); + } + + private void setIntValue(final PropertyVO vo, final String propertyName, final int value) throws TechnicalException, UserException { + @SuppressWarnings("unchecked") + final Property property = (Property) vo.get(propertyName); + property.setValue(value); + } + private String printableTypeName(Class type) { String name = type.getName().toLowerCase(); if (name.indexOf('.') >= 0) { From 9f8ccd461b8c0d3c17551c7525ffdce2f22acfc3 Mon Sep 17 00:00:00 2001 From: Michael Hierweck Date: Wed, 19 Apr 2017 13:48:09 +0200 Subject: [PATCH 05/18] Renamed AssetAction to MemberAssetAction and ShareAction to MemberShareAction. --- .../src/main/java/de/hsadmin/bo/customer/MemberAsset.java | 6 +++--- .../customer/{AssetAction.java => MemberAssetAction.java} | 2 +- .../src/main/java/de/hsadmin/bo/customer/MemberShare.java | 6 +++--- .../customer/{ShareAction.java => MemberShareAction.java} | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) rename cust-services/src/main/java/de/hsadmin/bo/customer/{AssetAction.java => MemberAssetAction.java} (77%) rename cust-services/src/main/java/de/hsadmin/bo/customer/{ShareAction.java => MemberShareAction.java} (68%) diff --git a/cust-services/src/main/java/de/hsadmin/bo/customer/MemberAsset.java b/cust-services/src/main/java/de/hsadmin/bo/customer/MemberAsset.java index 036e85c..ecbe217 100644 --- a/cust-services/src/main/java/de/hsadmin/bo/customer/MemberAsset.java +++ b/cust-services/src/main/java/de/hsadmin/bo/customer/MemberAsset.java @@ -36,7 +36,7 @@ public class MemberAsset implements Serializable { private Date date; @Column(name="action", nullable = false) - private ShareAction action; + private MemberShareAction action; @Column(name="amount", nullable = false) private BigDecimal amount; @@ -76,11 +76,11 @@ public class MemberAsset implements Serializable { this.date = date; } - public ShareAction getAction() { + public MemberShareAction getAction() { return action; } - public void setAction(ShareAction action) { + public void setAction(MemberShareAction action) { this.action = action; } diff --git a/cust-services/src/main/java/de/hsadmin/bo/customer/AssetAction.java b/cust-services/src/main/java/de/hsadmin/bo/customer/MemberAssetAction.java similarity index 77% rename from cust-services/src/main/java/de/hsadmin/bo/customer/AssetAction.java rename to cust-services/src/main/java/de/hsadmin/bo/customer/MemberAssetAction.java index 6268ed1..b36b923 100644 --- a/cust-services/src/main/java/de/hsadmin/bo/customer/AssetAction.java +++ b/cust-services/src/main/java/de/hsadmin/bo/customer/MemberAssetAction.java @@ -1,6 +1,6 @@ package de.hsadmin.bo.customer; -public enum AssetAction { +public enum MemberAssetAction { PAYMENT, PAYBACK, ADOPTION, diff --git a/cust-services/src/main/java/de/hsadmin/bo/customer/MemberShare.java b/cust-services/src/main/java/de/hsadmin/bo/customer/MemberShare.java index 8d825d6..5b985e1 100644 --- a/cust-services/src/main/java/de/hsadmin/bo/customer/MemberShare.java +++ b/cust-services/src/main/java/de/hsadmin/bo/customer/MemberShare.java @@ -35,7 +35,7 @@ public class MemberShare implements Serializable { private Date date; @Column(name="action", nullable = false) - private ShareAction action; + private MemberShareAction action; @Column(name="quantity", nullable = false) private int quantity; @@ -67,11 +67,11 @@ public class MemberShare implements Serializable { this.date = date; } - public ShareAction getAction() { + public MemberShareAction getAction() { return action; } - public void setAction(ShareAction action) { + public void setAction(MemberShareAction action) { this.action = action; } diff --git a/cust-services/src/main/java/de/hsadmin/bo/customer/ShareAction.java b/cust-services/src/main/java/de/hsadmin/bo/customer/MemberShareAction.java similarity index 68% rename from cust-services/src/main/java/de/hsadmin/bo/customer/ShareAction.java rename to cust-services/src/main/java/de/hsadmin/bo/customer/MemberShareAction.java index a915d75..9adc0a1 100644 --- a/cust-services/src/main/java/de/hsadmin/bo/customer/ShareAction.java +++ b/cust-services/src/main/java/de/hsadmin/bo/customer/MemberShareAction.java @@ -1,6 +1,6 @@ package de.hsadmin.bo.customer; -public enum ShareAction { +public enum MemberShareAction { SUBSCRIPTION, UNSUBSCRIPTION From da867ae48bfbcc61f88ac9b6d6a4f2cf0081a6d4 Mon Sep 17 00:00:00 2001 From: Michael Hierweck Date: Wed, 19 Apr 2017 14:07:10 +0200 Subject: [PATCH 06/18] Close BufferedReader. --- framework/src/main/java/de/hsadmin/login/CASTicketValidator.java | 1 + 1 file changed, 1 insertion(+) diff --git a/framework/src/main/java/de/hsadmin/login/CASTicketValidator.java b/framework/src/main/java/de/hsadmin/login/CASTicketValidator.java index 40337b9..0fb3464 100644 --- a/framework/src/main/java/de/hsadmin/login/CASTicketValidator.java +++ b/framework/src/main/java/de/hsadmin/login/CASTicketValidator.java @@ -38,6 +38,7 @@ public class CASTicketValidator implements TicketValidator { while (nextLine != null) { if (nextLine.contains("")) { String user = extractUser(nextLine); + reader.close(); inputStream.close(); return user; } From 91cce7a8d9e86809dfaa7563d056b80a89cfcadb Mon Sep 17 00:00:00 2001 From: Michael Hierweck Date: Wed, 19 Apr 2017 14:07:27 +0200 Subject: [PATCH 07/18] Remove obsolete import. --- .../src/main/java/de/hsadmin/bo/pac/PacEntityListener.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/cust-services/src/main/java/de/hsadmin/bo/pac/PacEntityListener.java b/cust-services/src/main/java/de/hsadmin/bo/pac/PacEntityListener.java index 2201453..859c7e8 100644 --- a/cust-services/src/main/java/de/hsadmin/bo/pac/PacEntityListener.java +++ b/cust-services/src/main/java/de/hsadmin/bo/pac/PacEntityListener.java @@ -1,7 +1,5 @@ package de.hsadmin.bo.pac; -import java.util.Date; - //import javax.jms.JMSException; //import javax.jms.Queue; //import javax.jms.QueueConnection; From 806039220b83ca8da425534e0d93d30b82046dad Mon Sep 17 00:00:00 2001 From: Peter Hormanns Date: Fri, 28 Apr 2017 17:28:10 +0200 Subject: [PATCH 08/18] web client uses hsadmin.properties --- .../java/de/hsadmin/model/TicketService.java | 20 ++++++++++--------- .../main/java/de/hsadmin/web/MainWindow.java | 13 ++++++------ 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/web/src/main/java/de/hsadmin/model/TicketService.java b/web/src/main/java/de/hsadmin/model/TicketService.java index 34efd97..e98b0ff 100644 --- a/web/src/main/java/de/hsadmin/model/TicketService.java +++ b/web/src/main/java/de/hsadmin/model/TicketService.java @@ -10,6 +10,7 @@ import java.net.URLEncoder; import javax.net.ssl.HttpsURLConnection; +import de.hsadmin.common.config.Config; import de.hsadmin.rpc.RpcException; /** @@ -21,18 +22,17 @@ import de.hsadmin.rpc.RpcException; */ public class TicketService implements Serializable { - public static final String SERVICE_URL = "https://config.hostsharing.net:443/hsar/backend"; - public static final String CAS_URL = "https://login.hostsharing.net/cas/v1/tickets"; - private static final long serialVersionUID = 1L; public String getGrantingTicket(final String user, final String password) throws RpcException { String ticket = null; try { - String userParam = "username=" + URLEncoder.encode(user, "UTF-8"); - String passwordParam = "password=" + URLEncoder.encode(password, "UTF-8"); - String encodedData = userParam + "&" + passwordParam; - URL url = new URL(CAS_URL); + final Config conf = Config.getInstance(); + final String userParam = "username=" + URLEncoder.encode(user, "UTF-8"); + final String passwordParam = "password=" + URLEncoder.encode(password, "UTF-8"); + final String encodedData = userParam + "&" + passwordParam; + final String casUrl = conf.getProperty("loginURL"); + final URL url = new URL(casUrl); final HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); connection.setRequestMethod("POST"); @@ -56,8 +56,10 @@ public class TicketService implements Serializable { public String getServiceTicket(String grantingTicket) throws RpcException { String ticket = null; try { - String serviceParam = "service=" + URLEncoder.encode(SERVICE_URL, "UTF-8"); - URL url = new URL(grantingTicket); + final Config conf = Config.getInstance(); + final String backendURL = conf.getProperty("backendURL"); + final String serviceParam = "service=" + URLEncoder.encode(backendURL, "UTF-8"); + final URL url = new URL(grantingTicket); final HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); connection.setRequestMethod("POST"); diff --git a/web/src/main/java/de/hsadmin/web/MainWindow.java b/web/src/main/java/de/hsadmin/web/MainWindow.java index 30cbc9a..b83263a 100644 --- a/web/src/main/java/de/hsadmin/web/MainWindow.java +++ b/web/src/main/java/de/hsadmin/web/MainWindow.java @@ -14,6 +14,8 @@ import com.vaadin.ui.HorizontalSplitPanel; import com.vaadin.ui.Panel; import com.vaadin.ui.VerticalLayout; +import de.hsadmin.common.config.Config; +import de.hsadmin.common.error.TechnicalException; import de.hsadmin.model.TicketService; import de.hsadmin.rpc.HSAdminSession; import de.hsadmin.rpc.ModulesManager; @@ -26,11 +28,6 @@ public class MainWindow extends CustomComponent implements HSAdminSession { private static final Logger LOG = Logger.getLogger(MainWindow.class); - public static final String[] SERVICE_URLS = new String[] { - "https://config2.hostsharing.net:443/hsar/xmlrpc/hsadmin", - "https://config.hostsharing.net:443/hsar/xmlrpc/hsadmin" - }; - final private TicketService ticketService; final private String grantingTicket; final private String username; @@ -52,11 +49,13 @@ public class MainWindow extends CustomComponent implements HSAdminSession { mainPanel.setContent(vl); try { + final Config conf = Config.getInstance(); + final String[] rpcUrls = conf.getProperty("xmlrpcURL").split(","); final MainToolbar mainToolbar = new MainToolbar(this); vl.addComponent(mainToolbar); vl.setExpandRatio(mainToolbar, 0.0f); final ModulesManagerFactory modulesManagerFactory = new ModulesManagerFactory(grantingTicket, username); - modulesManager = modulesManagerFactory.newModulesManager(SERVICE_URLS); + modulesManager = modulesManagerFactory.newModulesManager(rpcUrls); content = new HorizontalSplitPanel(); content.setSizeFull(); vl.addComponent(content); @@ -66,7 +65,7 @@ public class MainWindow extends CustomComponent implements HSAdminSession { content.setFirstComponent(entryPoints); content.setSecondComponent(new MainPanel()); content.setSplitPosition(26.6f); - } catch (RpcException e) { + } catch (RpcException | TechnicalException e) { LOG.fatal(e.getLocalizedMessage(), e); } } From 09d069f18106d8bdd02973de514f9452996f9582 Mon Sep 17 00:00:00 2001 From: Peter Hormanns Date: Fri, 28 Apr 2017 17:07:10 +0200 Subject: [PATCH 09/18] use same Config class everywhere --- cli/pom.xml | 5 ++ .../main/java/de/hsadmin/jscli/RpcClient.java | 5 +- .../hsadmin/jscli/cas/CASTicketProvider.java | 13 +++-- .../jscli/cas/TicketProviderFactory.java | 22 ++++--- .../hsadmin/jscli/conf/CommandlineParser.java | 6 +- .../java/de/hsadmin/jscli/conf/Config.java | 57 ------------------- web/pom.xml | 6 ++ 7 files changed, 41 insertions(+), 73 deletions(-) delete mode 100644 cli/src/main/java/de/hsadmin/jscli/conf/Config.java diff --git a/cli/pom.xml b/cli/pom.xml index 6eee3b8..90a38bb 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -14,6 +14,11 @@ HSAdmin-Cli + + de.hsadmin + framework + 1.0-SNAPSHOT + org.apache.xmlrpc xmlrpc-client diff --git a/cli/src/main/java/de/hsadmin/jscli/RpcClient.java b/cli/src/main/java/de/hsadmin/jscli/RpcClient.java index 833975d..1ef26cd 100644 --- a/cli/src/main/java/de/hsadmin/jscli/RpcClient.java +++ b/cli/src/main/java/de/hsadmin/jscli/RpcClient.java @@ -11,7 +11,8 @@ import org.apache.xmlrpc.XmlRpcException; import org.apache.xmlrpc.client.XmlRpcClient; import org.apache.xmlrpc.client.XmlRpcClientConfigImpl; -import de.hsadmin.jscli.conf.Config; +import de.hsadmin.common.config.Config; +import de.hsadmin.common.error.TechnicalException; import de.hsadmin.jscli.exception.JSCliException; public class RpcClient { @@ -37,6 +38,8 @@ public class RpcClient { } } catch (MalformedURLException e) { throw new JSCliException(e); + } catch (TechnicalException e) { + throw new JSCliException(e); } } diff --git a/cli/src/main/java/de/hsadmin/jscli/cas/CASTicketProvider.java b/cli/src/main/java/de/hsadmin/jscli/cas/CASTicketProvider.java index 73f5749..66f763a 100644 --- a/cli/src/main/java/de/hsadmin/jscli/cas/CASTicketProvider.java +++ b/cli/src/main/java/de/hsadmin/jscli/cas/CASTicketProvider.java @@ -18,8 +18,9 @@ import java.util.Properties; import javax.net.ssl.HttpsURLConnection; +import de.hsadmin.common.config.Config; +import de.hsadmin.common.error.TechnicalException; import de.hsadmin.jscli.TicketProvider; -import de.hsadmin.jscli.conf.Config; import de.hsadmin.jscli.console.PasswordReader; import de.hsadmin.jscli.exception.JSCliException; @@ -81,11 +82,11 @@ public class CASTicketProvider implements TicketProvider { private String getGrantingTicket() throws JSCliException { grantingTicket = null; - String password = Config.getInstance().getProperty(user + ".passWord"); - if (password == null || password.length() <= 0) { - password = readPasswordFromConsole(); - } try { + String password = Config.getInstance().getProperty(user + ".passWord"); + if (password == null || password.length() <= 0) { + password = readPasswordFromConsole(); + } String encodedParams = URLEncoder.encode("username", "UTF-8") + "=" + URLEncoder.encode(user, "UTF-8") + "&" + URLEncoder.encode("password", "UTF-8") @@ -95,6 +96,8 @@ public class CASTicketProvider implements TicketProvider { throw new JSCliException(e); } catch (FileNotFoundException e) { throw new JSCliException("cas server not available: " + loginURL); + } catch (TechnicalException e) { + throw new JSCliException(e); } return grantingTicket; } diff --git a/cli/src/main/java/de/hsadmin/jscli/cas/TicketProviderFactory.java b/cli/src/main/java/de/hsadmin/jscli/cas/TicketProviderFactory.java index 47691ce..329426e 100644 --- a/cli/src/main/java/de/hsadmin/jscli/cas/TicketProviderFactory.java +++ b/cli/src/main/java/de/hsadmin/jscli/cas/TicketProviderFactory.java @@ -1,7 +1,8 @@ package de.hsadmin.jscli.cas; +import de.hsadmin.common.config.Config; +import de.hsadmin.common.error.TechnicalException; import de.hsadmin.jscli.TicketProvider; -import de.hsadmin.jscli.conf.Config; import de.hsadmin.jscli.console.PasswordReader; import de.hsadmin.jscli.exception.JSCliException; @@ -12,13 +13,18 @@ public class TicketProviderFactory { public static TicketProvider getInstance(final PasswordReader console, final String user, final String runAs) throws JSCliException { - final Config config = Config.getInstance(); - final String backendURL = config.getProperty("backendURL", HOSTSHARING_BACKEND_URL); - final String loginURL = config.getProperty("loginURL", HOSTSHARING_LOGIN_URL); - if ("TestUmgebung".equalsIgnoreCase(loginURL)) { - return new TestTicketProvider(user, runAs); - } else { - return new CASTicketProvider(console, user, runAs, backendURL, loginURL); + Config config; + try { + config = Config.getInstance(); + final String backendURL = config.getProperty("backendURL", HOSTSHARING_BACKEND_URL); + final String loginURL = config.getProperty("loginURL", HOSTSHARING_LOGIN_URL); + if ("TestUmgebung".equalsIgnoreCase(loginURL)) { + return new TestTicketProvider(user, runAs); + } else { + return new CASTicketProvider(console, user, runAs, backendURL, loginURL); + } + } catch (TechnicalException e) { + throw new JSCliException(e); } } diff --git a/cli/src/main/java/de/hsadmin/jscli/conf/CommandlineParser.java b/cli/src/main/java/de/hsadmin/jscli/conf/CommandlineParser.java index b900683..8da6c9a 100644 --- a/cli/src/main/java/de/hsadmin/jscli/conf/CommandlineParser.java +++ b/cli/src/main/java/de/hsadmin/jscli/conf/CommandlineParser.java @@ -6,6 +6,8 @@ import org.apache.commons.cli.Options; import org.apache.commons.cli.ParseException; import org.apache.commons.cli.PosixParser; +import de.hsadmin.common.config.Config; +import de.hsadmin.common.error.TechnicalException; import de.hsadmin.jscli.exception.JSCliException; public class CommandlineParser { @@ -38,13 +40,13 @@ public class CommandlineParser { } } - public String getUser() { + public String getUser() throws TechnicalException { final String systemUser = System.getProperty("user.name"); final String configUser = Config.getInstance().getProperty("userName", systemUser); return cmd.getOptionValue("user", configUser); } - public String getRunAs() { + public String getRunAs() throws TechnicalException { return cmd.getOptionValue("runas", getUser()); } diff --git a/cli/src/main/java/de/hsadmin/jscli/conf/Config.java b/cli/src/main/java/de/hsadmin/jscli/conf/Config.java deleted file mode 100644 index 5b24a65..0000000 --- a/cli/src/main/java/de/hsadmin/jscli/conf/Config.java +++ /dev/null @@ -1,57 +0,0 @@ -package de.hsadmin.jscli.conf; - -import java.io.File; -import java.io.FileReader; -import java.util.Properties; - -public class Config { - - private static Config instance; - - private Properties props; - - private Config() { - props = new Properties(); - File file = new File(System.getProperty("user.dir") + "/hsadmin.properties"); - if (!file.canRead()) { - file = new File(System.getProperty("user.dir") + "/conf/hsadmin.properties"); - } - if (!file.canRead()) { - file = new File(System.getProperty("user.home") + "/.hsadmin.properties"); - } - if (!file.canRead()) { - file = new File("/etc/hsadmin.properties"); - } - if (!file.canRead()) { - file = new File("/etc/hsadmin/hsadmin.properties"); - } - if (file.canRead()) { - try { - props.load(new FileReader(file)); - } catch (Exception e) { - // should not happen - e.printStackTrace(); - } - } - } - - public static Config getInstance() { - if (instance == null) { - instance = new Config(); - } - return instance; - } - - public String getProperty(String propertyName) { - String property = props.getProperty(propertyName); - if (property == null) { - return null; - } - return property.trim(); - } - - public String getProperty(String propertyName, String defaultValue) { - return props.getProperty(propertyName, defaultValue).trim(); - } - -} diff --git a/web/pom.xml b/web/pom.xml index fb9d956..059ba5c 100644 --- a/web/pom.xml +++ b/web/pom.xml @@ -21,6 +21,12 @@ provided + + de.hsadmin + framework + 1.0-SNAPSHOT + + org.apache.xmlrpc xmlrpc-client From 19c43be1d7cbbbb4c4981f6873f75053ab73aad8 Mon Sep 17 00:00:00 2001 From: Peter Hormanns Date: Mon, 8 May 2017 19:25:13 +0200 Subject: [PATCH 10/18] WebUI mit lokalem Server starten --- .../java/de/hsadmin/jscli/ScriptClient.java | 89 +++++++++--------- .../java/de/hsadmin/jscli/TicketProvider.java | 13 --- .../jscli/cas/TicketProviderFactory.java | 31 ------- .../hsadmin/jscli/console/ConsoleWrapper.java | 12 +-- .../hsadmin/jscli/console/PasswordReader.java | 11 --- .../hsadmin/service/customer/RoleRemote.java | 13 +++ .../hsadmin/service/customer/RoleService.java | 54 +++++++++++ .../service/customer/RoleServiceLocal.java | 10 +++ .../de/hsadmin/service/customer/RoleVO.java | 31 +++++++ .../xmlrpc/webserver/XmlRpcServlet.properties | 1 + .../java/de/hsadmin/login/LoginService.java | 18 +--- .../java/de/hsadmin/login/TicketProvider.java | 11 +++ .../hsadmin/login}/cas/CASTicketProvider.java | 39 ++++---- .../login/{ => cas}/CASTicketValidator.java | 11 +-- .../de/hsadmin/login/cas/PasswordReader.java | 11 +++ .../login}/cas/TestTicketProvider.java | 10 +-- .../login/{ => cas}/TestTicketValidator.java | 4 +- .../login/cas/TicketProviderFactory.java | 24 +++++ .../login/cas/TicketValidatorFactory.java | 23 +++++ web/hsadmin.properties | 5 ++ web/pom.xml | 7 ++ .../de/hsadmin/model/CASTicketService.java | 90 +++++++++++++++++++ .../de/hsadmin/model/TestTicketService.java | 21 +++++ .../java/de/hsadmin/model/TicketService.java | 85 +----------------- .../hsadmin/model/TicketServiceFactory.java | 16 ++++ .../de/hsadmin/rpc/ModulesManagerFactory.java | 6 +- .../de/hsadmin/web/EntryPointsFactory.java | 24 +++-- .../main/java/de/hsadmin/web/HSAdminUI.java | 14 +-- 28 files changed, 435 insertions(+), 249 deletions(-) delete mode 100644 cli/src/main/java/de/hsadmin/jscli/TicketProvider.java delete mode 100644 cli/src/main/java/de/hsadmin/jscli/cas/TicketProviderFactory.java delete mode 100644 cli/src/main/java/de/hsadmin/jscli/console/PasswordReader.java create mode 100644 cust-services/src/main/java/de/hsadmin/service/customer/RoleRemote.java create mode 100644 cust-services/src/main/java/de/hsadmin/service/customer/RoleService.java create mode 100644 cust-services/src/main/java/de/hsadmin/service/customer/RoleServiceLocal.java create mode 100644 cust-services/src/main/java/de/hsadmin/service/customer/RoleVO.java create mode 100644 framework/src/main/java/de/hsadmin/login/TicketProvider.java rename {cli/src/main/java/de/hsadmin/jscli => framework/src/main/java/de/hsadmin/login}/cas/CASTicketProvider.java (82%) rename framework/src/main/java/de/hsadmin/login/{ => cas}/CASTicketValidator.java (80%) create mode 100644 framework/src/main/java/de/hsadmin/login/cas/PasswordReader.java rename {cli/src/main/java/de/hsadmin/jscli => framework/src/main/java/de/hsadmin/login}/cas/TestTicketProvider.java (61%) rename framework/src/main/java/de/hsadmin/login/{ => cas}/TestTicketValidator.java (78%) create mode 100644 framework/src/main/java/de/hsadmin/login/cas/TicketProviderFactory.java create mode 100644 framework/src/main/java/de/hsadmin/login/cas/TicketValidatorFactory.java create mode 100644 web/hsadmin.properties create mode 100644 web/src/main/java/de/hsadmin/model/CASTicketService.java create mode 100644 web/src/main/java/de/hsadmin/model/TestTicketService.java create mode 100644 web/src/main/java/de/hsadmin/model/TicketServiceFactory.java diff --git a/cli/src/main/java/de/hsadmin/jscli/ScriptClient.java b/cli/src/main/java/de/hsadmin/jscli/ScriptClient.java index 0324884..5cc1ef3 100644 --- a/cli/src/main/java/de/hsadmin/jscli/ScriptClient.java +++ b/cli/src/main/java/de/hsadmin/jscli/ScriptClient.java @@ -11,9 +11,10 @@ import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; -import de.hsadmin.jscli.cas.TicketProviderFactory; +import de.hsadmin.common.error.TechnicalException; import de.hsadmin.jscli.console.ConsoleWrapper; import de.hsadmin.jscli.exception.JSCliException; +import de.hsadmin.login.cas.TicketProviderFactory; public class ScriptClient { @@ -22,51 +23,55 @@ public class ScriptClient { public ScriptClient(final ConsoleWrapper console, final String user, final String runAs, final String... arguments) throws JSCliException { final RpcClient rpcClient = new RpcClient(); - engine = new ScriptEngineManager().getEngineByName("js"); - engine.put("casgrantingticket", TicketProviderFactory.getInstance(console, user, runAs)); - engine.put("xmlrpcclient", rpcClient); - engine.put("xmlrpcLastResult", null); - completionStrings = new HashSet(); - completionStrings.add("set"); - completionStrings.add("where"); - considerArguments(arguments); try { - final InputStream inputResource = getClass().getClassLoader().getResourceAsStream("js/functions.js"); - engine.eval(new InputStreamReader(inputResource)); - } catch (ScriptException e) { - throw new JSCliException(e); - } - final List methods = rpcClient.listMethods(); - for (final String method : methods) { - final String[] parts = method.split("\\."); - if (parts.length == 2) { - final String module = parts[0]; - final String function = parts[1]; - if ("system".equals(module) || "getModuleLookup".equals(function) || "createValueObject".equals(function)) { - continue; - } - completionStrings.add(module); - final String jsFunctionIdent; - if ("delete".equals(function)) { - jsFunctionIdent = module + "['remove']"; - completionStrings.add(module + ".remove"); - } else { - jsFunctionIdent = module + "['" + function + "']"; - completionStrings.add(module + "." + function); - } - try { - engine.eval( - "if (typeof " + module + " === 'undefined')" + - " { var " + module + " = { }; };\n" + - jsFunctionIdent + - " = function(json) { return hsaModuleCall('" + module + "', '" + function + "', json); }" - ); - } catch (ScriptException e) { - e.printStackTrace(); + engine = new ScriptEngineManager().getEngineByName("js"); + engine.put("casgrantingticket", TicketProviderFactory.getInstance(console, user, runAs)); + engine.put("xmlrpcclient", rpcClient); + engine.put("xmlrpcLastResult", null); + completionStrings = new HashSet(); + completionStrings.add("set"); + completionStrings.add("where"); + considerArguments(arguments); + try { + final InputStream inputResource = getClass().getClassLoader().getResourceAsStream("js/functions.js"); + engine.eval(new InputStreamReader(inputResource)); + } catch (ScriptException e) { + throw new JSCliException(e); + } + final List methods = rpcClient.listMethods(); + for (final String method : methods) { + final String[] parts = method.split("\\."); + if (parts.length == 2) { + final String module = parts[0]; + final String function = parts[1]; + if ("system".equals(module) || "getModuleLookup".equals(function) || "createValueObject".equals(function)) { + continue; + } + completionStrings.add(module); + final String jsFunctionIdent; + if ("delete".equals(function)) { + jsFunctionIdent = module + "['remove']"; + completionStrings.add(module + ".remove"); + } else { + jsFunctionIdent = module + "['" + function + "']"; + completionStrings.add(module + "." + function); + } + try { + engine.eval( + "if (typeof " + module + " === 'undefined')" + + " { var " + module + " = { }; };\n" + + jsFunctionIdent + + " = function(json) { return hsaModuleCall('" + module + "', '" + function + "', json); }" + ); + } catch (ScriptException e) { + e.printStackTrace(); + } } } + console.codeCompletion(getCodeCompletionStrings()); + } catch (TechnicalException e) { + throw new JSCliException(e); } - console.codeCompletion(getCodeCompletionStrings()); } public String[] getCodeCompletionStrings() { diff --git a/cli/src/main/java/de/hsadmin/jscli/TicketProvider.java b/cli/src/main/java/de/hsadmin/jscli/TicketProvider.java deleted file mode 100644 index 6e50c0c..0000000 --- a/cli/src/main/java/de/hsadmin/jscli/TicketProvider.java +++ /dev/null @@ -1,13 +0,0 @@ -package de.hsadmin.jscli; - -import java.io.FileNotFoundException; - -import de.hsadmin.jscli.exception.JSCliException; - -public interface TicketProvider { - - public String getTicket() throws JSCliException, FileNotFoundException; - - public String getRunAs(); - -} \ No newline at end of file diff --git a/cli/src/main/java/de/hsadmin/jscli/cas/TicketProviderFactory.java b/cli/src/main/java/de/hsadmin/jscli/cas/TicketProviderFactory.java deleted file mode 100644 index 329426e..0000000 --- a/cli/src/main/java/de/hsadmin/jscli/cas/TicketProviderFactory.java +++ /dev/null @@ -1,31 +0,0 @@ -package de.hsadmin.jscli.cas; - -import de.hsadmin.common.config.Config; -import de.hsadmin.common.error.TechnicalException; -import de.hsadmin.jscli.TicketProvider; -import de.hsadmin.jscli.console.PasswordReader; -import de.hsadmin.jscli.exception.JSCliException; - -public class TicketProviderFactory { - - private static final String HOSTSHARING_LOGIN_URL = "https://login.hostsharing.net:443/cas/v1/tickets"; - private static final String HOSTSHARING_BACKEND_URL = "https://config.hostsharing.net:443/hsar/backend"; - - public static TicketProvider getInstance(final PasswordReader console, final String user, final String runAs) throws JSCliException - { - Config config; - try { - config = Config.getInstance(); - final String backendURL = config.getProperty("backendURL", HOSTSHARING_BACKEND_URL); - final String loginURL = config.getProperty("loginURL", HOSTSHARING_LOGIN_URL); - if ("TestUmgebung".equalsIgnoreCase(loginURL)) { - return new TestTicketProvider(user, runAs); - } else { - return new CASTicketProvider(console, user, runAs, backendURL, loginURL); - } - } catch (TechnicalException e) { - throw new JSCliException(e); - } - } - -} diff --git a/cli/src/main/java/de/hsadmin/jscli/console/ConsoleWrapper.java b/cli/src/main/java/de/hsadmin/jscli/console/ConsoleWrapper.java index 1722374..478af11 100644 --- a/cli/src/main/java/de/hsadmin/jscli/console/ConsoleWrapper.java +++ b/cli/src/main/java/de/hsadmin/jscli/console/ConsoleWrapper.java @@ -3,7 +3,9 @@ package de.hsadmin.jscli.console; import java.io.File; import java.io.IOException; +import de.hsadmin.common.error.TechnicalException; import de.hsadmin.jscli.exception.JSCliException; +import de.hsadmin.login.cas.PasswordReader; import jline.console.ConsoleReader; import jline.console.completer.StringsCompleter; import jline.console.history.FileHistory; @@ -38,25 +40,25 @@ public class ConsoleWrapper implements PasswordReader { } } - public void println(final String text) throws JSCliException { + public void println(final String text) throws TechnicalException { try { if (cons != null) { cons.println(text); } else { - throw new JSCliException("cannot write console"); + throw new TechnicalException("cannot write console"); } } catch (IOException e) { - throw new JSCliException(e); + throw new TechnicalException(e); } } - public String readPassword() throws JSCliException { + public String readPassword() throws TechnicalException { try { final String pw = cons.readLine("Password: ", new Character('*')); cons.setPrompt(prompt); return pw; } catch (IOException e) { - throw new JSCliException(e); + throw new TechnicalException(e); } } diff --git a/cli/src/main/java/de/hsadmin/jscli/console/PasswordReader.java b/cli/src/main/java/de/hsadmin/jscli/console/PasswordReader.java deleted file mode 100644 index 95f220d..0000000 --- a/cli/src/main/java/de/hsadmin/jscli/console/PasswordReader.java +++ /dev/null @@ -1,11 +0,0 @@ -package de.hsadmin.jscli.console; - -import de.hsadmin.jscli.exception.JSCliException; - -public interface PasswordReader { - - public String readPassword() throws JSCliException; - - public void println(final String text) throws JSCliException; - -} diff --git a/cust-services/src/main/java/de/hsadmin/service/customer/RoleRemote.java b/cust-services/src/main/java/de/hsadmin/service/customer/RoleRemote.java new file mode 100644 index 0000000..83c3ae3 --- /dev/null +++ b/cust-services/src/main/java/de/hsadmin/service/customer/RoleRemote.java @@ -0,0 +1,13 @@ +package de.hsadmin.service.customer; + +import de.hsadmin.xmlrpc.AbstractRemote; +import de.hsadmin.xmlrpc.Remote; + +public class RoleRemote extends AbstractRemote implements Remote { + + @Override + protected String getModuleLookup() { + return "RoleServiceLocal"; + } + +} diff --git a/cust-services/src/main/java/de/hsadmin/service/customer/RoleService.java b/cust-services/src/main/java/de/hsadmin/service/customer/RoleService.java new file mode 100644 index 0000000..e201efc --- /dev/null +++ b/cust-services/src/main/java/de/hsadmin/service/customer/RoleService.java @@ -0,0 +1,54 @@ +package de.hsadmin.service.customer; + +import java.util.ArrayList; +import java.util.List; + +import javax.ejb.Stateless; + +import de.hsadmin.common.error.TechnicalException; +import de.hsadmin.common.error.UserException; +import de.hsadmin.login.RequestContext; +import de.hsadmin.login.RequiredScope; +import de.hsadmin.login.Role; +import de.hsadmin.login.ScopePolicy; +import de.hsadmin.module.impl.AbstractModule; +import de.hsadmin.module.property.StringProperty; + +@Stateless +public class RoleService extends AbstractModule implements RoleServiceLocal { + + @Override + public RoleVO buildVO() throws TechnicalException { + return new RoleVO(); + } + + @Override + @RequiredScope({ @ScopePolicy(Role.NONE) }) + public RoleVO create(RequestContext requestContext, RoleVO prototype) throws UserException, TechnicalException { + return null; + } + + @Override + @RequiredScope({ @ScopePolicy(Role.ANY) }) + public List read(RequestContext requestContext, RoleVO criteria) throws UserException, TechnicalException { + final Role loginRole = requestContext.getLoginRole(); + final ArrayList userRoles = new ArrayList(); + final RoleVO roleVO = buildVO(); + roleVO.setRole(loginRole.name()); + ((StringProperty) roleVO.get("role")).setValue(loginRole.name()); + userRoles.add(roleVO); + return userRoles; + } + + @Override + @RequiredScope({ @ScopePolicy(Role.NONE) }) + public List update(RequestContext requestContext, RoleVO criteria, RoleVO prototype) + throws UserException, TechnicalException { + return new ArrayList(); + } + + @Override + @RequiredScope({ @ScopePolicy(Role.NONE) }) + public void delete(RequestContext requestContext, RoleVO criteria) throws UserException, TechnicalException { + } +} diff --git a/cust-services/src/main/java/de/hsadmin/service/customer/RoleServiceLocal.java b/cust-services/src/main/java/de/hsadmin/service/customer/RoleServiceLocal.java new file mode 100644 index 0000000..da47c92 --- /dev/null +++ b/cust-services/src/main/java/de/hsadmin/service/customer/RoleServiceLocal.java @@ -0,0 +1,10 @@ +package de.hsadmin.service.customer; + +import javax.ejb.Local; + +import de.hsadmin.module.Module; + +@Local +public interface RoleServiceLocal extends Module { + +} diff --git a/cust-services/src/main/java/de/hsadmin/service/customer/RoleVO.java b/cust-services/src/main/java/de/hsadmin/service/customer/RoleVO.java new file mode 100644 index 0000000..d84c7e1 --- /dev/null +++ b/cust-services/src/main/java/de/hsadmin/service/customer/RoleVO.java @@ -0,0 +1,31 @@ +package de.hsadmin.service.customer; + +import javax.validation.constraints.Size; + +import de.hsadmin.common.error.TechnicalException; +import de.hsadmin.module.ValueObject; +import de.hsadmin.module.impl.AbstractVO; +import de.hsadmin.module.property.ReadWrite; +import de.hsadmin.module.property.ReadWritePolicy; +import de.hsadmin.module.property.Required; + +public class RoleVO extends AbstractVO implements ValueObject { + + @ReadWrite(ReadWritePolicy.READ) + @Required(true) + @Size(min=1,max=24) + private String role; + + public RoleVO() throws TechnicalException { + super(); + } + + public String getRole() { + return role; + } + + public void setRole(String role) { + this.role = role; + } + +} diff --git a/cust-services/src/main/resources/org/apache/xmlrpc/webserver/XmlRpcServlet.properties b/cust-services/src/main/resources/org/apache/xmlrpc/webserver/XmlRpcServlet.properties index f5864b8..8bcb46d 100644 --- a/cust-services/src/main/resources/org/apache/xmlrpc/webserver/XmlRpcServlet.properties +++ b/cust-services/src/main/resources/org/apache/xmlrpc/webserver/XmlRpcServlet.properties @@ -1,3 +1,4 @@ +role=de.hsadmin.service.customer.RoleRemote customer=de.hsadmin.service.customer.CustomerRemote contact=de.hsadmin.service.customer.ContactRemote mandat=de.hsadmin.service.customer.SEPADirectDebitRemote diff --git a/framework/src/main/java/de/hsadmin/login/LoginService.java b/framework/src/main/java/de/hsadmin/login/LoginService.java index 785855d..d113597 100644 --- a/framework/src/main/java/de/hsadmin/login/LoginService.java +++ b/framework/src/main/java/de/hsadmin/login/LoginService.java @@ -8,6 +8,7 @@ import de.hsadmin.common.config.Config; import de.hsadmin.common.error.TechnicalException; import de.hsadmin.common.error.UserError; import de.hsadmin.common.error.UserException; +import de.hsadmin.login.cas.TicketValidatorFactory; @Stateless public class LoginService implements LoginServiceLocal { @@ -15,8 +16,6 @@ public class LoginService implements LoginServiceLocal { @PersistenceContext(name = "hsar") private EntityManager entityManager; - private TicketValidator ticketValidator; - @Override public RequestContext createContext(final String ticket, final String runAsUser) throws UserException, TechnicalException { if (ticket != null && !ticket.isEmpty()) { @@ -74,21 +73,8 @@ public class LoginService implements LoginServiceLocal { } private String validateTicket(final String ticket) throws TechnicalException, UserException { - final TicketValidator ticketValidator = getTicketValidator(); + final TicketValidator ticketValidator = TicketValidatorFactory.getTicketValidator(); return ticketValidator.validate(ticket); } - private TicketValidator getTicketValidator() throws TechnicalException { - if (ticketValidator == null) { - try { - final String property = Config.getInstance().getProperty(Config.TICKETVALIDATOR_CLASS); - final Class validatorClass = Class.forName(property); - ticketValidator = (TicketValidator) validatorClass.newInstance(); - } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) { - throw new TechnicalException(e); - } - } - return ticketValidator; - } - } diff --git a/framework/src/main/java/de/hsadmin/login/TicketProvider.java b/framework/src/main/java/de/hsadmin/login/TicketProvider.java new file mode 100644 index 0000000..32e7561 --- /dev/null +++ b/framework/src/main/java/de/hsadmin/login/TicketProvider.java @@ -0,0 +1,11 @@ +package de.hsadmin.login; + +import de.hsadmin.common.error.TechnicalException; + +public interface TicketProvider { + + public String getTicket() throws TechnicalException; + + public String getRunAs(); + +} \ No newline at end of file diff --git a/cli/src/main/java/de/hsadmin/jscli/cas/CASTicketProvider.java b/framework/src/main/java/de/hsadmin/login/cas/CASTicketProvider.java similarity index 82% rename from cli/src/main/java/de/hsadmin/jscli/cas/CASTicketProvider.java rename to framework/src/main/java/de/hsadmin/login/cas/CASTicketProvider.java index 66f763a..5432331 100644 --- a/cli/src/main/java/de/hsadmin/jscli/cas/CASTicketProvider.java +++ b/framework/src/main/java/de/hsadmin/login/cas/CASTicketProvider.java @@ -1,9 +1,8 @@ -package de.hsadmin.jscli.cas; +package de.hsadmin.login.cas; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; -import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; @@ -20,9 +19,7 @@ import javax.net.ssl.HttpsURLConnection; import de.hsadmin.common.config.Config; import de.hsadmin.common.error.TechnicalException; -import de.hsadmin.jscli.TicketProvider; -import de.hsadmin.jscli.console.PasswordReader; -import de.hsadmin.jscli.exception.JSCliException; +import de.hsadmin.login.TicketProvider; public class CASTicketProvider implements TicketProvider { @@ -34,7 +31,7 @@ public class CASTicketProvider implements TicketProvider { private String grantingTicket; - public CASTicketProvider(final PasswordReader console, final String user, final String runAs, final String backendURL, final String loginURL) throws JSCliException { + public CASTicketProvider(final PasswordReader console, final String user, final String runAs, final String backendURL, final String loginURL) throws TechnicalException { this.passwordReader = console; this.user = user; this.runAs = runAs; @@ -44,7 +41,7 @@ public class CASTicketProvider implements TicketProvider { } @Override - public String getTicket() throws JSCliException { + public String getTicket() throws TechnicalException { try { final String encodedParams = URLEncoder.encode("service", "UTF-8") + "=" + URLEncoder.encode(backendURL, "UTF-8"); @@ -64,14 +61,14 @@ public class CASTicketProvider implements TicketProvider { } trails++; if (trails > 3) { - throw new JSCliException("exceeded number of login attempts"); + throw new TechnicalException("exceeded number of login attempts"); } urlString = getGrantingTicket(); } } return result; } catch (UnsupportedEncodingException e) { - throw new JSCliException(e); + throw new TechnicalException(e); } } @@ -80,7 +77,7 @@ public class CASTicketProvider implements TicketProvider { return runAs; } - private String getGrantingTicket() throws JSCliException { + private String getGrantingTicket() throws TechnicalException { grantingTicket = null; try { String password = Config.getInstance().getProperty(user + ".passWord"); @@ -93,25 +90,21 @@ public class CASTicketProvider implements TicketProvider { + "=" + URLEncoder.encode(password, "UTF-8"); grantingTicket = requestForGrantingTicket(loginURL, encodedParams); } catch (UnsupportedEncodingException e) { - throw new JSCliException(e); - } catch (FileNotFoundException e) { - throw new JSCliException("cas server not available: " + loginURL); - } catch (TechnicalException e) { - throw new JSCliException(e); + throw new TechnicalException(e); } return grantingTicket; } - private String readPasswordFromConsole() throws JSCliException { + private String readPasswordFromConsole() throws TechnicalException { return passwordReader.readPassword(); } - private String requestForGrantingTicket(final String urlString, final String encodedParams) throws JSCliException, FileNotFoundException { + private String requestForGrantingTicket(final String urlString, final String encodedParams) throws TechnicalException { try { final HttpsURLConnection connection = doConnect(urlString, encodedParams); return connection.getHeaderField("Location"); } catch (IOException e) { - throw new JSCliException(e); + throw new TechnicalException(e); } } @@ -148,7 +141,7 @@ public class CASTicketProvider implements TicketProvider { return connection; } - private void readFiledGrantingTicket() throws JSCliException { + private void readFiledGrantingTicket() throws TechnicalException { final File file = getTicketFile(); final Properties properties = loadProperties(file); final String filedTicket = properties.getProperty(user); @@ -162,25 +155,25 @@ public class CASTicketProvider implements TicketProvider { return new File(ticketFileName); } - private void saveProperties(final String filedTicket, final File file) throws JSCliException { + private void saveProperties(final String filedTicket, final File file) throws TechnicalException { final Properties properties = loadProperties(file); if (filedTicket != null) { properties.setProperty(user, filedTicket); try { properties.store(new FileOutputStream(file), "stored cas tickets"); } catch (IOException e) { - throw new JSCliException(e); + throw new TechnicalException(e); } } } - private Properties loadProperties(final File file) throws JSCliException { + private Properties loadProperties(final File file) throws TechnicalException { final Properties properties = new Properties(); if (file.isFile() && file.canRead()) { try { properties.load(new FileReader(file)); } catch (IOException e) { - throw new JSCliException(e); + throw new TechnicalException(e); } } return properties; diff --git a/framework/src/main/java/de/hsadmin/login/CASTicketValidator.java b/framework/src/main/java/de/hsadmin/login/cas/CASTicketValidator.java similarity index 80% rename from framework/src/main/java/de/hsadmin/login/CASTicketValidator.java rename to framework/src/main/java/de/hsadmin/login/cas/CASTicketValidator.java index 0fb3464..96e6039 100644 --- a/framework/src/main/java/de/hsadmin/login/CASTicketValidator.java +++ b/framework/src/main/java/de/hsadmin/login/cas/CASTicketValidator.java @@ -1,4 +1,4 @@ -package de.hsadmin.login; +package de.hsadmin.login.cas; import java.io.BufferedReader; import java.io.IOException; @@ -11,6 +11,7 @@ import de.hsadmin.common.config.Config; import de.hsadmin.common.error.TechnicalException; import de.hsadmin.common.error.UserError; import de.hsadmin.common.error.UserException; +import de.hsadmin.login.TicketValidator; public class CASTicketValidator implements TicketValidator { @@ -29,11 +30,11 @@ public class CASTicketValidator implements TicketValidator { throw new TechnicalException("TicketValidator is not initialized."); } try { - URL url = new URL(proxyValidateURL + "?service=" + proxyServiceURL + "&ticket=" + ticket); - URLConnection httpConnection = url.openConnection(); + final URL url = new URL(proxyValidateURL + "?service=" + proxyServiceURL + "&ticket=" + ticket); + final URLConnection httpConnection = url.openConnection(); httpConnection.connect(); - InputStream inputStream = httpConnection.getInputStream(); - BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); + final InputStream inputStream = httpConnection.getInputStream(); + final BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); String nextLine = reader.readLine(); while (nextLine != null) { if (nextLine.contains("")) { diff --git a/framework/src/main/java/de/hsadmin/login/cas/PasswordReader.java b/framework/src/main/java/de/hsadmin/login/cas/PasswordReader.java new file mode 100644 index 0000000..c5726af --- /dev/null +++ b/framework/src/main/java/de/hsadmin/login/cas/PasswordReader.java @@ -0,0 +1,11 @@ +package de.hsadmin.login.cas; + +import de.hsadmin.common.error.TechnicalException; + +public interface PasswordReader { + + public String readPassword() throws TechnicalException; + + public void println(final String text) throws TechnicalException; + +} diff --git a/cli/src/main/java/de/hsadmin/jscli/cas/TestTicketProvider.java b/framework/src/main/java/de/hsadmin/login/cas/TestTicketProvider.java similarity index 61% rename from cli/src/main/java/de/hsadmin/jscli/cas/TestTicketProvider.java rename to framework/src/main/java/de/hsadmin/login/cas/TestTicketProvider.java index 3bb3f67..4e42af2 100644 --- a/cli/src/main/java/de/hsadmin/jscli/cas/TestTicketProvider.java +++ b/framework/src/main/java/de/hsadmin/login/cas/TestTicketProvider.java @@ -1,9 +1,7 @@ -package de.hsadmin.jscli.cas; +package de.hsadmin.login.cas; -import java.io.FileNotFoundException; - -import de.hsadmin.jscli.TicketProvider; -import de.hsadmin.jscli.exception.JSCliException; +import de.hsadmin.common.error.TechnicalException; +import de.hsadmin.login.TicketProvider; public class TestTicketProvider implements TicketProvider { @@ -16,7 +14,7 @@ public class TestTicketProvider implements TicketProvider { } @Override - public String getTicket() throws JSCliException, FileNotFoundException { + public String getTicket() throws TechnicalException { return grantingTicket; } diff --git a/framework/src/main/java/de/hsadmin/login/TestTicketValidator.java b/framework/src/main/java/de/hsadmin/login/cas/TestTicketValidator.java similarity index 78% rename from framework/src/main/java/de/hsadmin/login/TestTicketValidator.java rename to framework/src/main/java/de/hsadmin/login/cas/TestTicketValidator.java index 37a6bf4..d03d209 100644 --- a/framework/src/main/java/de/hsadmin/login/TestTicketValidator.java +++ b/framework/src/main/java/de/hsadmin/login/cas/TestTicketValidator.java @@ -1,4 +1,6 @@ -package de.hsadmin.login; +package de.hsadmin.login.cas; + +import de.hsadmin.login.TicketValidator; public class TestTicketValidator implements TicketValidator { diff --git a/framework/src/main/java/de/hsadmin/login/cas/TicketProviderFactory.java b/framework/src/main/java/de/hsadmin/login/cas/TicketProviderFactory.java new file mode 100644 index 0000000..f994e60 --- /dev/null +++ b/framework/src/main/java/de/hsadmin/login/cas/TicketProviderFactory.java @@ -0,0 +1,24 @@ +package de.hsadmin.login.cas; + +import de.hsadmin.common.config.Config; +import de.hsadmin.common.error.TechnicalException; +import de.hsadmin.login.TicketProvider; + +public class TicketProviderFactory { + + private static final String HOSTSHARING_LOGIN_URL = "https://login.hostsharing.net:443/cas/v1/tickets"; + private static final String HOSTSHARING_BACKEND_URL = "https://config.hostsharing.net:443/hsar/backend"; + + public static TicketProvider getInstance(final PasswordReader console, final String user, final String runAs) throws TechnicalException + { + final Config config = Config.getInstance(); + final String backendURL = config.getProperty("backendURL", HOSTSHARING_BACKEND_URL); + final String loginURL = config.getProperty("loginURL", HOSTSHARING_LOGIN_URL); + if ("TestUmgebung".equalsIgnoreCase(loginURL)) { + return new TestTicketProvider(user, runAs); + } else { + return new CASTicketProvider(console, user, runAs, backendURL, loginURL); + } + } + +} diff --git a/framework/src/main/java/de/hsadmin/login/cas/TicketValidatorFactory.java b/framework/src/main/java/de/hsadmin/login/cas/TicketValidatorFactory.java new file mode 100644 index 0000000..ebfe311 --- /dev/null +++ b/framework/src/main/java/de/hsadmin/login/cas/TicketValidatorFactory.java @@ -0,0 +1,23 @@ +package de.hsadmin.login.cas; + +import de.hsadmin.common.config.Config; +import de.hsadmin.common.error.TechnicalException; +import de.hsadmin.login.TicketValidator; + +public class TicketValidatorFactory { + + public static TicketValidator getTicketValidator() throws TechnicalException { + TicketValidator ticketValidator = null; + if (ticketValidator == null) { + try { + final String property = Config.getInstance().getProperty(Config.TICKETVALIDATOR_CLASS); + final Class validatorClass = Class.forName(property); + ticketValidator = (TicketValidator) validatorClass.newInstance(); + } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) { + throw new TechnicalException(e); + } + } + return ticketValidator; + } + +} diff --git a/web/hsadmin.properties b/web/hsadmin.properties new file mode 100644 index 0000000..785c811 --- /dev/null +++ b/web/hsadmin.properties @@ -0,0 +1,5 @@ +backendURL=https://config.hostsharing.net:443/hsar/backend +;xmlrpcURL=https://config.hostsharing.net:443/hsar/xmlrpc/hsadmin +;loginURL=https://login.hostsharing.net:443/cas/v1/tickets +xmlrpcURL=http://localhost:8080/cust-webapp/xmlrpc/hsadmin +loginURL=TestUmgebung diff --git a/web/pom.xml b/web/pom.xml index 059ba5c..58ca7ea 100644 --- a/web/pom.xml +++ b/web/pom.xml @@ -25,6 +25,12 @@ de.hsadmin framework 1.0-SNAPSHOT + + + org.apache.xmlrpc + xmlrpc-server + + @@ -96,6 +102,7 @@ 2.2 / + 8081 diff --git a/web/src/main/java/de/hsadmin/model/CASTicketService.java b/web/src/main/java/de/hsadmin/model/CASTicketService.java new file mode 100644 index 0000000..4813e5f --- /dev/null +++ b/web/src/main/java/de/hsadmin/model/CASTicketService.java @@ -0,0 +1,90 @@ +package de.hsadmin.model; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.io.Serializable; +import java.net.URL; +import java.net.URLEncoder; + +import javax.net.ssl.HttpsURLConnection; + +import de.hsadmin.common.config.Config; +import de.hsadmin.rpc.RpcException; + +/** + * Helper for service tickets. + * Hostsharing uses the CAS authentication service to authenticate + * users of hostsharing services. This class is used to create a + * "ticket granting ticket" for a session and service ticket for + * individual service calls. + */ +class CASTicketService implements Serializable, TicketService { + + private static final long serialVersionUID = 1L; + + @Override + public String getGrantingTicket(final String user, final String password) throws RpcException { + String ticket = null; + try { + final Config conf = Config.getInstance(); + final String userParam = "username=" + URLEncoder.encode(user, "UTF-8"); + final String passwordParam = "password=" + URLEncoder.encode(password, "UTF-8"); + final String encodedData = userParam + "&" + passwordParam; + final String casUrl = conf.getProperty("loginURL"); + final URL url = new URL(casUrl); + + final HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); + connection.setRequestMethod("POST"); + connection.setRequestProperty("Content-type", "application/x-www-form-urlencoded; charset=UTF-8"); + connection.setDoInput(true); + connection.setDoOutput(true); + connection.setUseCaches(false); + connection.setAllowUserInteraction(false); + final BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream())); + writer.write(encodedData); + writer.close(); + connection.connect(); + ticket = connection.getHeaderField("Location"); + } catch (Exception e) { + throw new RpcException(e); + } + + return ticket; + } + + @Override + public String getServiceTicket(String grantingTicket) throws RpcException { + String ticket = null; + try { + final Config conf = Config.getInstance(); + final String backendURL = conf.getProperty("backendURL"); + final String serviceParam = "service=" + URLEncoder.encode(backendURL, "UTF-8"); + final URL url = new URL(grantingTicket); + + final HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); + connection.setRequestMethod("POST"); + connection.setRequestProperty("Content-type", "application/x-www-form-urlencoded; charset=UTF-8"); + connection.setDoInput(true); + connection.setDoOutput(true); + connection.setUseCaches(false); + connection.setAllowUserInteraction(false); + final BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream())); + writer.write(serviceParam); + writer.close(); + connection.connect(); + final BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); + ticket = reader.readLine(); + String readLine = reader.readLine(); + do { + readLine = reader.readLine(); + } while (readLine != null); + } catch (Exception e) { + throw new RpcException(e); + } + + return ticket; + } + +} diff --git a/web/src/main/java/de/hsadmin/model/TestTicketService.java b/web/src/main/java/de/hsadmin/model/TestTicketService.java new file mode 100644 index 0000000..e257ddd --- /dev/null +++ b/web/src/main/java/de/hsadmin/model/TestTicketService.java @@ -0,0 +1,21 @@ +package de.hsadmin.model; + +import java.io.Serializable; + +import de.hsadmin.rpc.RpcException; + +public class TestTicketService implements TicketService, Serializable { + + private static final long serialVersionUID = 1L; + + @Override + public String getGrantingTicket(final String user, final String password) throws RpcException { + return "granting:" + user; + } + + @Override + public String getServiceTicket(final String grantingTicket) throws RpcException { + return "user" + grantingTicket.substring(grantingTicket.indexOf(':')); + } + +} diff --git a/web/src/main/java/de/hsadmin/model/TicketService.java b/web/src/main/java/de/hsadmin/model/TicketService.java index e98b0ff..2579227 100644 --- a/web/src/main/java/de/hsadmin/model/TicketService.java +++ b/web/src/main/java/de/hsadmin/model/TicketService.java @@ -1,88 +1,11 @@ package de.hsadmin.model; -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.InputStreamReader; -import java.io.OutputStreamWriter; -import java.io.Serializable; -import java.net.URL; -import java.net.URLEncoder; - -import javax.net.ssl.HttpsURLConnection; - -import de.hsadmin.common.config.Config; import de.hsadmin.rpc.RpcException; -/** - * Helper for service tickets. - * Hostsharing uses the CAS authentication service to authenticate - * users of hostsharing services. This class is used to create a - * "ticket granting ticket" for a session and service ticket for - * individual service calls. - */ -public class TicketService implements Serializable { +public interface TicketService { - private static final long serialVersionUID = 1L; + String getGrantingTicket(String user, String password) throws RpcException; - public String getGrantingTicket(final String user, final String password) throws RpcException { - String ticket = null; - try { - final Config conf = Config.getInstance(); - final String userParam = "username=" + URLEncoder.encode(user, "UTF-8"); - final String passwordParam = "password=" + URLEncoder.encode(password, "UTF-8"); - final String encodedData = userParam + "&" + passwordParam; - final String casUrl = conf.getProperty("loginURL"); - final URL url = new URL(casUrl); + String getServiceTicket(String grantingTicket) throws RpcException; - final HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); - connection.setRequestMethod("POST"); - connection.setRequestProperty("Content-type", "application/x-www-form-urlencoded; charset=UTF-8"); - connection.setDoInput(true); - connection.setDoOutput(true); - connection.setUseCaches(false); - connection.setAllowUserInteraction(false); - final BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream())); - writer.write(encodedData); - writer.close(); - connection.connect(); - ticket = connection.getHeaderField("Location"); - } catch (Exception e) { - throw new RpcException(e); - } - - return ticket; - } - - public String getServiceTicket(String grantingTicket) throws RpcException { - String ticket = null; - try { - final Config conf = Config.getInstance(); - final String backendURL = conf.getProperty("backendURL"); - final String serviceParam = "service=" + URLEncoder.encode(backendURL, "UTF-8"); - final URL url = new URL(grantingTicket); - - final HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); - connection.setRequestMethod("POST"); - connection.setRequestProperty("Content-type", "application/x-www-form-urlencoded; charset=UTF-8"); - connection.setDoInput(true); - connection.setDoOutput(true); - connection.setUseCaches(false); - connection.setAllowUserInteraction(false); - final BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream())); - writer.write(serviceParam); - writer.close(); - connection.connect(); - final BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); - ticket = reader.readLine(); - String readLine = reader.readLine(); - do { - readLine = reader.readLine(); - } while (readLine != null); - } catch (Exception e) { - throw new RpcException(e); - } - - return ticket; - } - -} +} \ No newline at end of file diff --git a/web/src/main/java/de/hsadmin/model/TicketServiceFactory.java b/web/src/main/java/de/hsadmin/model/TicketServiceFactory.java new file mode 100644 index 0000000..022f320 --- /dev/null +++ b/web/src/main/java/de/hsadmin/model/TicketServiceFactory.java @@ -0,0 +1,16 @@ +package de.hsadmin.model; + +import de.hsadmin.common.config.Config; +import de.hsadmin.common.error.TechnicalException; + +public class TicketServiceFactory { + + public static TicketService getTicketService() throws TechnicalException { + final String loginURL = Config.getInstance().getProperty("loginURL"); + if ("TestUmgebung".equals(loginURL)) { + return new TestTicketService(); + } + return new CASTicketService(); + } + +} diff --git a/web/src/main/java/de/hsadmin/rpc/ModulesManagerFactory.java b/web/src/main/java/de/hsadmin/rpc/ModulesManagerFactory.java index ed79a8b..b1d853c 100644 --- a/web/src/main/java/de/hsadmin/rpc/ModulesManagerFactory.java +++ b/web/src/main/java/de/hsadmin/rpc/ModulesManagerFactory.java @@ -12,7 +12,9 @@ import org.apache.xmlrpc.XmlRpcException; import org.apache.xmlrpc.client.XmlRpcClient; import org.apache.xmlrpc.client.XmlRpcClientConfigImpl; +import de.hsadmin.common.error.TechnicalException; import de.hsadmin.model.TicketService; +import de.hsadmin.model.TicketServiceFactory; public class ModulesManagerFactory { @@ -26,8 +28,8 @@ public class ModulesManagerFactory { public ModulesManager newModulesManager(final String... serverURLs) throws RpcException { final ModulesManager moduleManager = new ModulesManager(); - final TicketService ticketService = new TicketService(); try { + final TicketService ticketService = TicketServiceFactory.getTicketService();; for (final String servername : serverURLs) { final XmlRpcClient rpcClient = new XmlRpcClient(); @@ -63,7 +65,7 @@ public class ModulesManagerFactory { moduleManager.module(moduleName).add(propInfo); } } - } catch (MalformedURLException | XmlRpcException e) { + } catch (MalformedURLException | XmlRpcException | TechnicalException e) { throw new RpcException(e); } return moduleManager; diff --git a/web/src/main/java/de/hsadmin/web/EntryPointsFactory.java b/web/src/main/java/de/hsadmin/web/EntryPointsFactory.java index 61efa20..638fef4 100644 --- a/web/src/main/java/de/hsadmin/web/EntryPointsFactory.java +++ b/web/src/main/java/de/hsadmin/web/EntryPointsFactory.java @@ -1,20 +1,28 @@ package de.hsadmin.web; +import de.hsadmin.login.Role; + public class EntryPointsFactory extends AbstractEntryPointsFactory { +// FIXME: Domain-Modul zum Testen auskommentiert (ph) + @Override public String[] getEntryPointNames(final String role) { - if ("HOSTMASTER".equals(role)) { - return new String[] { "customer", "pac", "domain" }; + + if (Role.SYSTEM.name().equals(role)) { + return new String[] { "customer", "pac" }; +// return new String[] { "customer", "pac", "domain" }; } - if ("CUSTOMER".equals(role)) { - return new String[] { "customer", "pac", "domain" }; + if (Role.CUSTOMER.name().equals(role)) { + return new String[] { "customer", "pac" }; +// return new String[] { "customer", "pac", "domain" }; } - if ("PAC_ADMIN_DW".equals(role)) { - return new String[] { "pac", "domain" }; + if (Role.PACKET.name().equals(role)) { + return new String[] { "pac" }; +// return new String[] { "pac", "domain" }; } - if ("DOM_ADMIN".equals(role)) { - return new String[] { "domain" }; + if (Role.DOMAIN.name().equals(role)) { +// return new String[] { "domain" }; } return new String[] { }; } diff --git a/web/src/main/java/de/hsadmin/web/HSAdminUI.java b/web/src/main/java/de/hsadmin/web/HSAdminUI.java index eba84b1..8659fed 100644 --- a/web/src/main/java/de/hsadmin/web/HSAdminUI.java +++ b/web/src/main/java/de/hsadmin/web/HSAdminUI.java @@ -11,7 +11,9 @@ import com.vaadin.ui.UI; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.themes.ValoTheme; +import de.hsadmin.common.error.TechnicalException; import de.hsadmin.model.TicketService; +import de.hsadmin.model.TicketServiceFactory; @Title("HSAdmin Web") @Theme(ValoTheme.THEME_NAME) @@ -23,7 +25,7 @@ public class HSAdminUI extends UI { @VaadinServletConfiguration(productionMode = false, ui = HSAdminUI.class) public static class Servlet extends VaadinServlet { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; } @@ -35,10 +37,12 @@ public class HSAdminUI extends UI { setSizeFull(); layout = new VerticalLayout(); layout.setSizeFull(); - - ticketService = new TicketService(); - UI.getCurrent().addWindow(new LoginWindow(this, ticketService)); - + try { + ticketService = TicketServiceFactory.getTicketService(); + UI.getCurrent().addWindow(new LoginWindow(this, ticketService)); + } catch (TechnicalException e) { + // dont care + } setContent(layout); } From da37fd88325fc8835df412520d8d18cc24b1cbb9 Mon Sep 17 00:00:00 2001 From: Peter Hormanns Date: Wed, 10 May 2017 11:45:52 +0200 Subject: [PATCH 11/18] customer tab works in local admin-web --- .../src/test/tomee/conf/hsadmin.properties | 4 +- .../de/hsadmin/web/EntryPointsFactory.java | 40 ++++++++++++++----- .../de/hsadmin/web/EntryPointsSelector.java | 2 +- .../java/de/hsadmin/web/FactoryProducer.java | 4 +- 4 files changed, 35 insertions(+), 15 deletions(-) diff --git a/cust-services/src/test/tomee/conf/hsadmin.properties b/cust-services/src/test/tomee/conf/hsadmin.properties index 5941ad2..cb2d37f 100644 --- a/cust-services/src/test/tomee/conf/hsadmin.properties +++ b/cust-services/src/test/tomee/conf/hsadmin.properties @@ -1,6 +1,6 @@ -ticketvalidator.class=de.hsadmin.login.TestTicketValidator +ticketvalidator.class=de.hsadmin.login.cas.TestTicketValidator cas.validate.url=https://login.hostsharing.net:443/cas/proxyValidate cas.service.url=https://config.hostsharing.net:443/hsar/backend accountprefix.hostmaster=hsh01 accountprefix.customer=hsh00 -domainpostfix.pacdomain=hostsharing.net \ No newline at end of file +domainpostfix.pacdomain=hostsharing.net diff --git a/web/src/main/java/de/hsadmin/web/EntryPointsFactory.java b/web/src/main/java/de/hsadmin/web/EntryPointsFactory.java index 638fef4..2759fbb 100644 --- a/web/src/main/java/de/hsadmin/web/EntryPointsFactory.java +++ b/web/src/main/java/de/hsadmin/web/EntryPointsFactory.java @@ -1,30 +1,50 @@ package de.hsadmin.web; +import java.util.ArrayList; +import java.util.List; + import de.hsadmin.login.Role; +import de.hsadmin.rpc.ModulesManager; public class EntryPointsFactory extends AbstractEntryPointsFactory { -// FIXME: Domain-Modul zum Testen auskommentiert (ph) + private final MainWindow mainWindow; + + public EntryPointsFactory(final MainWindow window) { + this.mainWindow = window; + } @Override public String[] getEntryPointNames(final String role) { - + final ModulesManager modulesManager = mainWindow.getModulesManager(); + final List entryPointNames = new ArrayList<>(); if (Role.SYSTEM.name().equals(role)) { - return new String[] { "customer", "pac" }; -// return new String[] { "customer", "pac", "domain" }; + addEntryPointIfModuleExists(modulesManager, entryPointNames, "customer"); + addEntryPointIfModuleExists(modulesManager, entryPointNames, "pac"); + addEntryPointIfModuleExists(modulesManager, entryPointNames, "domain"); } if (Role.CUSTOMER.name().equals(role)) { - return new String[] { "customer", "pac" }; -// return new String[] { "customer", "pac", "domain" }; + addEntryPointIfModuleExists(modulesManager, entryPointNames, "customer"); + addEntryPointIfModuleExists(modulesManager, entryPointNames, "pac"); + addEntryPointIfModuleExists(modulesManager, entryPointNames, "domain"); } if (Role.PACKET.name().equals(role)) { - return new String[] { "pac" }; -// return new String[] { "pac", "domain" }; + addEntryPointIfModuleExists(modulesManager, entryPointNames, "pac"); + addEntryPointIfModuleExists(modulesManager, entryPointNames, "domain"); } if (Role.DOMAIN.name().equals(role)) { -// return new String[] { "domain" }; + addEntryPointIfModuleExists(modulesManager, entryPointNames, "domain"); + } + return entryPointNames.toArray(new String[] {}); + } + + private void addEntryPointIfModuleExists( + final ModulesManager modulesManager, final List entryPointNames, + final String moduleName) + { + if (modulesManager.hasModule(moduleName)) { + entryPointNames.add(moduleName); } - return new String[] { }; } } diff --git a/web/src/main/java/de/hsadmin/web/EntryPointsSelector.java b/web/src/main/java/de/hsadmin/web/EntryPointsSelector.java index 60439de..88beae3 100644 --- a/web/src/main/java/de/hsadmin/web/EntryPointsSelector.java +++ b/web/src/main/java/de/hsadmin/web/EntryPointsSelector.java @@ -41,7 +41,7 @@ public class EntryPointsSelector extends CustomComponent implements ItemClickLis private void createTabs() throws RpcException { final String role = getRole(); - final AbstractEntryPointsFactory entryPointsFactory = FactoryProducer.getEntryPointsFactory("default"); + final AbstractEntryPointsFactory entryPointsFactory = FactoryProducer.getEntryPointsFactory(mainWindow, "default"); int tabCount = 0; for(String tabName : entryPointsFactory.getEntryPointNames(role)) { accordion.addTab(new EntryPoint(this, tabName), I18N.getText(tabName)); diff --git a/web/src/main/java/de/hsadmin/web/FactoryProducer.java b/web/src/main/java/de/hsadmin/web/FactoryProducer.java index 2a0fd2a..7c52cea 100644 --- a/web/src/main/java/de/hsadmin/web/FactoryProducer.java +++ b/web/src/main/java/de/hsadmin/web/FactoryProducer.java @@ -18,8 +18,8 @@ public class FactoryProducer { return new GenericEditorFactory(); } - public static AbstractEntryPointsFactory getEntryPointsFactory(String choice) { - return new EntryPointsFactory(); + public static AbstractEntryPointsFactory getEntryPointsFactory(MainWindow window, String choice) { + return new EntryPointsFactory(window); } } From 8a36ca7901e57490654009bf0942e8280d8c0ce6 Mon Sep 17 00:00:00 2001 From: Peter Hormanns Date: Wed, 21 Jun 2017 20:39:45 +0200 Subject: [PATCH 12/18] prepare letsencrypt feature --- .../de/hsadmin/web/DomainOptionsEditor.java | 4 ++-- .../de/hsadmin/web/EntryPointsSelector.java | 17 ++++++++++++++++- .../resources/de/hsadmin/web/main.properties | 3 +++ .../resources/de/hsadmin/web/main_de.properties | 3 +++ 4 files changed, 24 insertions(+), 3 deletions(-) diff --git a/web/src/main/java/de/hsadmin/web/DomainOptionsEditor.java b/web/src/main/java/de/hsadmin/web/DomainOptionsEditor.java index a422a4a..7b37388 100644 --- a/web/src/main/java/de/hsadmin/web/DomainOptionsEditor.java +++ b/web/src/main/java/de/hsadmin/web/DomainOptionsEditor.java @@ -16,9 +16,9 @@ import de.hsadmin.rpc.PropertyInfo; public class DomainOptionsEditor extends CustomComponent implements IHSEditor { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 2L; - private static final String[] OPTIONS = new String[] { "greylisting", "multiviews", "indexes", "htdocsfallback", "includes", "backupmxforexternalmx" }; + private static final String[] OPTIONS = new String[] { "greylisting", "multiviews", "indexes", "htdocsfallback", "includes", "backupmxforexternalmx", "letsencrypt" }; private final PropertyInfo propertyInfo; private final VerticalLayout layout; diff --git a/web/src/main/java/de/hsadmin/web/EntryPointsSelector.java b/web/src/main/java/de/hsadmin/web/EntryPointsSelector.java index 88beae3..db7918f 100644 --- a/web/src/main/java/de/hsadmin/web/EntryPointsSelector.java +++ b/web/src/main/java/de/hsadmin/web/EntryPointsSelector.java @@ -16,6 +16,7 @@ import com.vaadin.ui.TabSheet.SelectedTabChangeEvent; import com.vaadin.ui.TabSheet.SelectedTabChangeListener; import com.vaadin.ui.Table; +import de.hsadmin.login.Role; import de.hsadmin.model.IRemote; import de.hsadmin.model.TicketService; import de.hsadmin.rpc.RpcException; @@ -64,12 +65,26 @@ public class EntryPointsSelector extends CustomComponent implements ItemClickLis final String serviceTicket = ticketService.getServiceTicket(grantingTicket); try { final List> list = rolesProxy.search(user, serviceTicket, new HashMap()); - return (String) list.get(0).get("role"); + final String remoteRole = (String) list.get(0).get("role"); + return fixRole(remoteRole); } catch (XmlRpcException e) { throw new RpcException(e); } } + private String fixRole(String remoteRole) { + if ("HOSTMASTER".equals(remoteRole)) { + return Role.SYSTEM.name(); + } + if ("PAC_ADMIN_DW".equals(remoteRole)) { + return Role.PACKET.name(); + } + if ("DOM_ADMIN".equals(remoteRole)) { + return Role.DOMAIN.name(); + } + return remoteRole; + } + @Override public void itemClick(ItemClickEvent event) { Table table = (Table) event.getSource(); diff --git a/web/src/main/resources/de/hsadmin/web/main.properties b/web/src/main/resources/de/hsadmin/web/main.properties index be469bf..d183aa8 100644 --- a/web/src/main/resources/de/hsadmin/web/main.properties +++ b/web/src/main/resources/de/hsadmin/web/main.properties @@ -32,12 +32,14 @@ domain.user=Domain User domain.since=Domain since domain.dnsMaster=DNS master domain.domainoptions=Domain options +domain.validsubdomainnames=valid subdomain names domainoption.greylisting=greylisting domainoption.multiviews=multiviews domainoption.indexes=indexes domainoption.htdocsfallback=htdocsfallback domainoption.includes=includes domainoption.backupmxforexternalmx=backupmxforexternalmx +domainoption.letsencrypt=letsencrypt mysqluser.name=MySql username mysqluser.instance=MySql instance mysqluser.pac=MySql package @@ -89,6 +91,7 @@ quota_softlimit=Quota soft limit quota_hardlimit=Quota hard limit target=Target owner=Owner +validsubdomainnames=valid subdomain names encoding=Encoding localpart=Local part subdomain=Subdomain diff --git a/web/src/main/resources/de/hsadmin/web/main_de.properties b/web/src/main/resources/de/hsadmin/web/main_de.properties index 8ed70ac..e69f622 100644 --- a/web/src/main/resources/de/hsadmin/web/main_de.properties +++ b/web/src/main/resources/de/hsadmin/web/main_de.properties @@ -32,12 +32,14 @@ domain.user=Domain-Administrator domain.since=eingerichtet am domain.dnsMaster=DNS Server domain.domainoptions=Domain-Optionen +domain.validsubdomainnames=gültige Subdomain (oder * für Wildcard) domainoption.greylisting=Greylisting domainoption.multiviews=Multiviews domainoption.indexes=Indexes domainoption.htdocsfallback=htdocsfallback domainoption.includes=Includes domainoption.backupmxforexternalmx=Backupmx for external MX +domainoption.letsencrypt=Lets Encrypt Zertifikat mysqluser.name=MySql User mysqluser.instance=Datenbank-System mysqluser.pac=Web-Paket @@ -88,6 +90,7 @@ quota_softlimit=Quota (Soft-Limit) quota_hardlimit=Quota (Hard-Limit) target=Postfach/Weiterleitung owner=Domain-Administrator +validsubdomainnames=gültige Subdomain encoding=Zeichen-Kodierung localpart=lokaler Teil subdomain=Subdomain From 6377b9b31c8a26d426eccc9306d91cf0780233ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Uwe=20M=C3=BCller?= Date: Thu, 22 Jun 2017 15:34:24 +0200 Subject: [PATCH 13/18] memberasset first change table --- .../main/java/de/hsadmin/bo/customer/MemberAsset.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/cust-services/src/main/java/de/hsadmin/bo/customer/MemberAsset.java b/cust-services/src/main/java/de/hsadmin/bo/customer/MemberAsset.java index ecbe217..65e5721 100644 --- a/cust-services/src/main/java/de/hsadmin/bo/customer/MemberAsset.java +++ b/cust-services/src/main/java/de/hsadmin/bo/customer/MemberAsset.java @@ -24,7 +24,7 @@ public class MemberAsset implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "member_share_id", columnDefinition = "integer") + @Column(name = "member_asset_id", columnDefinition = "integer") private long id; @JoinColumn(name = "bp_id", columnDefinition = "integer", nullable = false) @@ -36,7 +36,7 @@ public class MemberAsset implements Serializable { private Date date; @Column(name="action", nullable = false) - private MemberShareAction action; + private MemberAssetAction action; @Column(name="amount", nullable = false) private BigDecimal amount; @@ -76,16 +76,14 @@ public class MemberAsset implements Serializable { this.date = date; } - public MemberShareAction getAction() { + public MemberAssetAction getAction() { return action; } - public void setAction(MemberShareAction action) { + public void setAction(MemberAssetAction action) { this.action = action; } - - public String getComment() { return comment; } From c81297107389827be80d2f5f1cf97501c7b8d6ea Mon Sep 17 00:00:00 2001 From: Peter Hormanns Date: Thu, 22 Jun 2017 15:55:59 +0200 Subject: [PATCH 14/18] text subdomains field --- web/src/main/resources/de/hsadmin/web/main_de.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/src/main/resources/de/hsadmin/web/main_de.properties b/web/src/main/resources/de/hsadmin/web/main_de.properties index e69f622..0345937 100644 --- a/web/src/main/resources/de/hsadmin/web/main_de.properties +++ b/web/src/main/resources/de/hsadmin/web/main_de.properties @@ -32,7 +32,7 @@ domain.user=Domain-Administrator domain.since=eingerichtet am domain.dnsMaster=DNS Server domain.domainoptions=Domain-Optionen -domain.validsubdomainnames=gültige Subdomain (oder * für Wildcard) +domain.validsubdomainnames=gültige Subdomains domainoption.greylisting=Greylisting domainoption.multiviews=Multiviews domainoption.indexes=Indexes @@ -90,7 +90,7 @@ quota_softlimit=Quota (Soft-Limit) quota_hardlimit=Quota (Hard-Limit) target=Postfach/Weiterleitung owner=Domain-Administrator -validsubdomainnames=gültige Subdomain +validsubdomainnames=gültige Subdomains ('*' für Wildcard) encoding=Zeichen-Kodierung localpart=lokaler Teil subdomain=Subdomain From 2299ec4a8778dcbb6e2db8f4427ec3fca86d602d Mon Sep 17 00:00:00 2001 From: Peter Hormanns Date: Thu, 22 Jun 2017 17:27:54 +0200 Subject: [PATCH 15/18] fix localization --- .../java/de/hsadmin/web/CustomerPanel.java | 8 ++++---- .../de/hsadmin/web/DomainOptionsEditor.java | 6 +++--- .../main/java/de/hsadmin/web/DomainPanel.java | 4 ++-- .../java/de/hsadmin/web/EMailTargetEditor.java | 18 +++++++++--------- .../de/hsadmin/web/EntryPointsSelector.java | 2 +- .../java/de/hsadmin/web/GenericFormWindow.java | 5 ++++- .../main/java/de/hsadmin/web/HSConfirmBox.java | 2 +- .../java/de/hsadmin/web/HSPasswordField.java | 3 ++- web/src/main/java/de/hsadmin/web/HSSelect.java | 3 ++- web/src/main/java/de/hsadmin/web/HSTab.java | 2 +- .../main/java/de/hsadmin/web/HSTextField.java | 3 ++- .../main/java/de/hsadmin/web/HelpWindow.java | 2 +- web/src/main/java/de/hsadmin/web/I18N.java | 11 ++++++++--- .../main/java/de/hsadmin/web/LoginWindow.java | 15 ++++++++------- .../main/java/de/hsadmin/web/MainPanel.java | 4 ++-- .../main/java/de/hsadmin/web/MainToolbar.java | 2 +- .../main/java/de/hsadmin/web/PackagePanel.java | 16 ++++++++-------- .../main/java/de/hsadmin/web/PanelToolbar.java | 4 ++-- .../java/de/hsadmin/web/UserProfileWindow.java | 5 ++++- 19 files changed, 65 insertions(+), 50 deletions(-) diff --git a/web/src/main/java/de/hsadmin/web/CustomerPanel.java b/web/src/main/java/de/hsadmin/web/CustomerPanel.java index bcae029..2a67d6f 100644 --- a/web/src/main/java/de/hsadmin/web/CustomerPanel.java +++ b/web/src/main/java/de/hsadmin/web/CustomerPanel.java @@ -33,14 +33,14 @@ public class CustomerPanel extends CustomComponent implements IHSPanel, Selected tabsheet.setSizeFull(); tabsheet.addSelectedTabChangeListener(this); tabsheet.addSelectedTabChangeListener(this); - tabsheet.addTab(new GenericForm("customer", session, itemId, "name"), I18N.getText("customer")); + tabsheet.addTab(new GenericForm("customer", session, itemId, "name"), I18N.getText("customer", getLocale())); final HSTab usersTab = new HSTab("contact", session, "customer", itemId, "email"); usersTab.fillTable(); - tabsheet.addTab(usersTab, I18N.getText("contact")); + tabsheet.addTab(usersTab, I18N.getText("contact", getLocale())); HSTab aliasTab = new HSTab("mandat", session, "customer", itemId, "mandatRef"); - tabsheet.addTab(aliasTab, I18N.getText("mandat")); + tabsheet.addTab(aliasTab, I18N.getText("mandat", getLocale())); HSTab pacTab = new HSTab("pac", session, "customer", itemId, "name"); - tabsheet.addTab(pacTab, I18N.getText("pac")); + tabsheet.addTab(pacTab, I18N.getText("pac", getLocale())); return tabsheet; } diff --git a/web/src/main/java/de/hsadmin/web/DomainOptionsEditor.java b/web/src/main/java/de/hsadmin/web/DomainOptionsEditor.java index 7b37388..c0aa152 100644 --- a/web/src/main/java/de/hsadmin/web/DomainOptionsEditor.java +++ b/web/src/main/java/de/hsadmin/web/DomainOptionsEditor.java @@ -27,14 +27,14 @@ public class DomainOptionsEditor extends CustomComponent implements IHSEditor { public DomainOptionsEditor(final PropertyInfo propertyInfo, final HSAdminSession session, final Map whereContext) { this.checkboxes = new HashMap<>(); this.propertyInfo = propertyInfo; - this.setCaption(I18N.getText(propertyInfo.getName())); + this.setCaption(I18N.getText(propertyInfo.getName(), getLocale())); layout = new VerticalLayout(); for (String opt : OPTIONS) { - final CheckBox checkBox = new CheckBox(I18N.getText("domainoption." + opt)); + final CheckBox checkBox = new CheckBox(I18N.getText("domainoption." + opt, getLocale())); checkboxes.put(opt, checkBox); layout.addComponent(checkBox); } - layout.setCaption(I18N.getText(propertyInfo.getName())); + layout.setCaption(I18N.getText(propertyInfo.getName(), getLocale())); setCompositionRoot(layout); } diff --git a/web/src/main/java/de/hsadmin/web/DomainPanel.java b/web/src/main/java/de/hsadmin/web/DomainPanel.java index c352dab..8d75666 100644 --- a/web/src/main/java/de/hsadmin/web/DomainPanel.java +++ b/web/src/main/java/de/hsadmin/web/DomainPanel.java @@ -30,10 +30,10 @@ public class DomainPanel extends CustomComponent implements IHSPanel, SelectedTa public TabSheet createTabs(Object itemId) throws RpcException { final TabSheet tabsheet = new TabSheet(); - tabsheet.addTab(new GenericForm("domain", session, itemId, "name"), I18N.getText("domain")); + tabsheet.addTab(new GenericForm("domain", session, itemId, "name"), I18N.getText("domain", getLocale())); HSTab emailTab = new HSTab("emailaddress", session, "domain", itemId, "id"); emailTab.fillTable(); - tabsheet.addTab(emailTab, I18N.getText("emailaddress")); + tabsheet.addTab(emailTab, I18N.getText("emailaddress", getLocale())); return tabsheet; } diff --git a/web/src/main/java/de/hsadmin/web/EMailTargetEditor.java b/web/src/main/java/de/hsadmin/web/EMailTargetEditor.java index 150fad9..b91830c 100644 --- a/web/src/main/java/de/hsadmin/web/EMailTargetEditor.java +++ b/web/src/main/java/de/hsadmin/web/EMailTargetEditor.java @@ -44,12 +44,12 @@ public class EMailTargetEditor extends CustomComponent implements IHSEditor, Val this.isEditAble = PanelToolbar.ACTION_EDIT.equals(action) || PanelToolbar.ACTION_NEW.equals(action); this.propertyInfo = propertyInfo; this.validators = new ArrayList<>(); - this.setCaption(I18N.getText(propertyInfo.getName())); + this.setCaption(I18N.getText(propertyInfo.getName(), getLocale())); this.aliases = targetsSelect("emailalias", session, whereContext); this.postboxes = targetsSelect("user", session, whereContext); postboxes.removeAll(aliases); layout = new VerticalLayout(); - layout.setCaption(I18N.getText(propertyInfo.getName())); + layout.setCaption(I18N.getText(propertyInfo.getName(), getLocale())); setCompositionRoot(layout); } @@ -175,7 +175,7 @@ public class EMailTargetEditor extends CustomComponent implements IHSEditor, Val targetTypeSelect.setMultiSelect(false); targetTypeSelect.setNullSelectionAllowed(true); targetTypeSelect.setNullSelectionItemId(" "); - targetTypeSelect.addItems(new Object[] { " ", I18N.getText("emailtarget.email"), I18N.getText("emailtarget.postbox"), I18N.getText("emailtarget.alias") }); + targetTypeSelect.addItems(new Object[] { " ", I18N.getText("emailtarget.email", getLocale()), I18N.getText("emailtarget.postbox", getLocale()), I18N.getText("emailtarget.alias", getLocale()) }); targetTypeSelect.setValue(" "); targetTypeSelect.setWidth("6.0em"); addComponent(targetTypeSelect); @@ -184,7 +184,7 @@ public class EMailTargetEditor extends CustomComponent implements IHSEditor, Val AbstractComponent targetField = null; NativeSelect sel = null; if (aliases.contains(target)) { - targetTypeSelect.setValue(I18N.getText("emailtarget.alias")); + targetTypeSelect.setValue(I18N.getText("emailtarget.alias", getLocale())); sel = new NativeSelect(); sel.addItems(aliases); sel.setValue(target); @@ -193,7 +193,7 @@ public class EMailTargetEditor extends CustomComponent implements IHSEditor, Val targetField = sel; } else { if (postboxes.contains(target)) { - targetTypeSelect.setValue(I18N.getText("emailtarget.postbox")); + targetTypeSelect.setValue(I18N.getText("emailtarget.postbox", getLocale())); sel = new NativeSelect(); sel.addItems(postboxes); sel.setValue(target); @@ -201,7 +201,7 @@ public class EMailTargetEditor extends CustomComponent implements IHSEditor, Val sel.setEnabled(isEditAble); targetField = sel; } else { - targetTypeSelect.setValue(I18N.getText("emailtarget.email")); + targetTypeSelect.setValue(I18N.getText("emailtarget.email", getLocale())); targetField = new TextField(); targetField.setEnabled(isEditAble); ((TextField) targetField).setValue(target); @@ -229,16 +229,16 @@ public class EMailTargetEditor extends CustomComponent implements IHSEditor, Val final String newValue = newValueObject.toString(); if (targetRow.getComponentCount() == 1) { AbstractComponent comp = null; - if (I18N.getText("emailtarget.email").equals(newValue)) { + if (I18N.getText("emailtarget.email", getLocale()).equals(newValue)) { final TextField textField = new TextField(); textField.addValueChangeListener(editor); textField.setImmediate(true); textField.setEnabled(isEditAble); comp = textField; } else { - if (I18N.getText("emailtarget.alias").equals(newValue) || I18N.getText("emailtarget.postbox").equals(newValue)) { + if (I18N.getText("emailtarget.alias", getLocale()).equals(newValue) || I18N.getText("emailtarget.postbox", getLocale()).equals(newValue)) { final NativeSelect select = new NativeSelect(); - if (I18N.getText("emailtarget.alias").equals(newValue)) { + if (I18N.getText("emailtarget.alias", getLocale()).equals(newValue)) { select.addItems(aliases); } else { select.addItems(postboxes); diff --git a/web/src/main/java/de/hsadmin/web/EntryPointsSelector.java b/web/src/main/java/de/hsadmin/web/EntryPointsSelector.java index db7918f..75237c8 100644 --- a/web/src/main/java/de/hsadmin/web/EntryPointsSelector.java +++ b/web/src/main/java/de/hsadmin/web/EntryPointsSelector.java @@ -45,7 +45,7 @@ public class EntryPointsSelector extends CustomComponent implements ItemClickLis final AbstractEntryPointsFactory entryPointsFactory = FactoryProducer.getEntryPointsFactory(mainWindow, "default"); int tabCount = 0; for(String tabName : entryPointsFactory.getEntryPointNames(role)) { - accordion.addTab(new EntryPoint(this, tabName), I18N.getText(tabName)); + accordion.addTab(new EntryPoint(this, tabName), I18N.getText(tabName, getLocale())); tabCount++; } if (tabCount > 0) { diff --git a/web/src/main/java/de/hsadmin/web/GenericFormWindow.java b/web/src/main/java/de/hsadmin/web/GenericFormWindow.java index bd95b01..9d9f771 100644 --- a/web/src/main/java/de/hsadmin/web/GenericFormWindow.java +++ b/web/src/main/java/de/hsadmin/web/GenericFormWindow.java @@ -2,6 +2,7 @@ package de.hsadmin.web; import java.util.HashMap; import java.util.Iterator; +import java.util.Locale; import java.util.Map; import java.util.Set; @@ -24,7 +25,9 @@ public class GenericFormWindow extends Window implements IHSWindow { public GenericFormWindow(final HSTab parent, final String module, final String action, final HSAdminSession session, final Map whereContext) { - super(I18N.getText(action) + " " + I18N.getText(module)); + super(); + final Locale locale = getLocale(); + setCaption(I18N.getText(action, locale) + " " + I18N.getText(module, locale)); this.parent = parent; center(); setModal(true); diff --git a/web/src/main/java/de/hsadmin/web/HSConfirmBox.java b/web/src/main/java/de/hsadmin/web/HSConfirmBox.java index 813a309..af6bcdf 100644 --- a/web/src/main/java/de/hsadmin/web/HSConfirmBox.java +++ b/web/src/main/java/de/hsadmin/web/HSConfirmBox.java @@ -85,7 +85,7 @@ public class HSConfirmBox extends HorizontalLayout { } } }); - cancelButton = new Button(I18N.getText("cancel")); + cancelButton = new Button(I18N.getText("cancel", getLocale())); cancelButton.setClickShortcut(KeyCode.ESCAPE); cancelButton.addClickListener(new ClickListener() { diff --git a/web/src/main/java/de/hsadmin/web/HSPasswordField.java b/web/src/main/java/de/hsadmin/web/HSPasswordField.java index 0460c9b..ba3d538 100644 --- a/web/src/main/java/de/hsadmin/web/HSPasswordField.java +++ b/web/src/main/java/de/hsadmin/web/HSPasswordField.java @@ -9,7 +9,8 @@ public class HSPasswordField extends PasswordField implements IHSEditor { private static final long serialVersionUID = 1L; public HSPasswordField(final String name, final boolean passwordRequired) { - super(I18N.getText(name)); + super(); + setCaption(I18N.getText(name, getLocale())); addValidator(new PasswordValidator(passwordRequired)); } diff --git a/web/src/main/java/de/hsadmin/web/HSSelect.java b/web/src/main/java/de/hsadmin/web/HSSelect.java index 3edefb8..7979ac3 100644 --- a/web/src/main/java/de/hsadmin/web/HSSelect.java +++ b/web/src/main/java/de/hsadmin/web/HSSelect.java @@ -16,7 +16,8 @@ public class HSSelect extends NativeSelect implements IHSEditor { } public HSSelect(final String label, final int defaultIndex, final List values) { - super(I18N.getText(label)); + super(); + setCaption(I18N.getText(label, getLocale())); this.propertyName = label; super.addItems(values); if (values != null && values.size() > defaultIndex) { diff --git a/web/src/main/java/de/hsadmin/web/HSTab.java b/web/src/main/java/de/hsadmin/web/HSTab.java index 0e4bca4..1d5b47f 100644 --- a/web/src/main/java/de/hsadmin/web/HSTab.java +++ b/web/src/main/java/de/hsadmin/web/HSTab.java @@ -149,7 +149,7 @@ public class HSTab extends CustomComponent { while (properties.hasNext()) { final PropertyInfo propertyInfo = properties.next(); if (showColumnInTable(propertyInfo)) { - grid.addContainerProperty(I18N.getText(propertyInfo.getModule() + "." + propertyInfo.getName()), String.class, ""); + grid.addContainerProperty(I18N.getText(propertyInfo.getModule() + "." + propertyInfo.getName(), getLocale()), String.class, ""); } } grid.setSelectable(true); diff --git a/web/src/main/java/de/hsadmin/web/HSTextField.java b/web/src/main/java/de/hsadmin/web/HSTextField.java index e925c87..1a2bc32 100644 --- a/web/src/main/java/de/hsadmin/web/HSTextField.java +++ b/web/src/main/java/de/hsadmin/web/HSTextField.java @@ -11,7 +11,8 @@ public class HSTextField extends TextField implements IHSEditor { private final String propertyName; public HSTextField(final String name) { - super(I18N.getText(name)); + super(); + setCaption(I18N.getText(name, getLocale())); this.propertyName = name; } diff --git a/web/src/main/java/de/hsadmin/web/HelpWindow.java b/web/src/main/java/de/hsadmin/web/HelpWindow.java index 6d0ad64..19fc72c 100644 --- a/web/src/main/java/de/hsadmin/web/HelpWindow.java +++ b/web/src/main/java/de/hsadmin/web/HelpWindow.java @@ -25,7 +25,7 @@ public class HelpWindow extends Window { final VerticalLayout subContent = new VerticalLayout(); subContent.setMargin(true); subContent.setSizeFull(); - final String helpBaseURL = I18N.getText("help.baseurl"); + final String helpBaseURL = I18N.getText("help.baseurl", getLocale()); final Component helpContent = new BrowserFrame("Help Window", new ExternalResource(helpBaseURL + helpTopic)); helpContent.setSizeFull(); subContent.addComponent(helpContent); diff --git a/web/src/main/java/de/hsadmin/web/I18N.java b/web/src/main/java/de/hsadmin/web/I18N.java index df14604..3b139dc 100644 --- a/web/src/main/java/de/hsadmin/web/I18N.java +++ b/web/src/main/java/de/hsadmin/web/I18N.java @@ -1,16 +1,21 @@ package de.hsadmin.web; +import java.util.Locale; import java.util.MissingResourceException; import java.util.ResourceBundle; public class I18N { - private static final ResourceBundle TEXTS = ResourceBundle.getBundle("de.hsadmin.web.main"); + private static final ResourceBundle TEXTS_DE = ResourceBundle.getBundle("de.hsadmin.web.main", Locale.GERMAN); + private static final ResourceBundle TEXTS_EN = ResourceBundle.getBundle("de.hsadmin.web.main", Locale.ENGLISH); - public static String getText(final String textProperty) { + public static String getText(final String textProperty, final Locale loc) { String textValue; try{ - textValue = I18N.TEXTS.getString(textProperty); + textValue = I18N.TEXTS_EN.getString(textProperty); + if (loc.getLanguage().equals(Locale.GERMAN.getLanguage())) { + textValue = I18N.TEXTS_DE.getString(textProperty); + } }catch(MissingResourceException e){ textValue = "./. " + textProperty; } diff --git a/web/src/main/java/de/hsadmin/web/LoginWindow.java b/web/src/main/java/de/hsadmin/web/LoginWindow.java index f97ab51..3cd686e 100644 --- a/web/src/main/java/de/hsadmin/web/LoginWindow.java +++ b/web/src/main/java/de/hsadmin/web/LoginWindow.java @@ -27,7 +27,8 @@ public class LoginWindow extends Window { private static final long serialVersionUID = 1L; public LoginWindow(final HSAdminUI parent, final TicketService ticketService) { - super(I18N.getText("login.title")); + super(); + setCaption(I18N.getText("login.title", getLocale())); center(); setModal(true); setWidth("480px"); @@ -35,11 +36,11 @@ public class LoginWindow extends Window { final FormLayout subContent = new FormLayout(); subContent.setMargin(true); - final TextField login = new TextField(I18N.getText("user.name")); + final TextField login = new TextField(I18N.getText("user.name", getLocale())); login.setWidth("100%"); subContent.addComponent(login); login.focus(); - final PasswordField password = new PasswordField(I18N.getText("password")); + final PasswordField password = new PasswordField(I18N.getText("password", getLocale())); password.setWidth("100%"); subContent.addComponent(password); final Label feedback = new Label(""); @@ -48,7 +49,7 @@ public class LoginWindow extends Window { subContent.addComponent(feedback); feedback.setStyleName(ValoTheme.LABEL_FAILURE); - final Button okButton = new Button(I18N.getText("login.button")); + final Button okButton = new Button(I18N.getText("login.button", getLocale())); okButton.setStyleName(ValoTheme.BUTTON_PRIMARY); okButton.setClickShortcut(KeyCode.ENTER); okButton.addClickListener(new ClickListener() @@ -74,9 +75,9 @@ public class LoginWindow extends Window { } } try { - final String user = credentials.get(I18N.getText("user.name")); + final String user = credentials.get(I18N.getText("user.name", getLocale())); final String loginUser = user.length() == 3 ? "hsh00-" + user : user; - final String password = credentials.get(I18N.getText("password")); + final String password = credentials.get(I18N.getText("password", getLocale())); final String grantingTicket = ticketService.getGrantingTicket(loginUser, password); if (grantingTicket != null && !grantingTicket.isEmpty()) { feedback.setValue("successful login"); @@ -99,7 +100,7 @@ public class LoginWindow extends Window { } }); subContent.addComponent(okButton); - final Link linkToOld = new Link(I18N.getText("main.panel.link_to_old"), new ExternalResource("https://admin.hostsharing.net/hsarweb")); + final Link linkToOld = new Link(I18N.getText("main.panel.link_to_old", getLocale()), new ExternalResource("https://admin.hostsharing.net/hsarweb")); subContent.addComponent(linkToOld); setContent(subContent); diff --git a/web/src/main/java/de/hsadmin/web/MainPanel.java b/web/src/main/java/de/hsadmin/web/MainPanel.java index a7fa611..4c5d605 100644 --- a/web/src/main/java/de/hsadmin/web/MainPanel.java +++ b/web/src/main/java/de/hsadmin/web/MainPanel.java @@ -10,8 +10,8 @@ public class MainPanel extends CustomComponent{ private static final long serialVersionUID = -1085100738394404620L; public MainPanel() { - final String helpBaseURL = I18N.getText("help.baseurl"); - final Component helpContent = new BrowserFrame(I18N.getText("main.panel.title"), new ExternalResource(helpBaseURL + "hsadmin")); + final String helpBaseURL = I18N.getText("help.baseurl", getLocale()); + final Component helpContent = new BrowserFrame(I18N.getText("main.panel.title", getLocale()), new ExternalResource(helpBaseURL + "hsadmin")); helpContent.setSizeFull(); setCompositionRoot(helpContent); setSizeFull(); diff --git a/web/src/main/java/de/hsadmin/web/MainToolbar.java b/web/src/main/java/de/hsadmin/web/MainToolbar.java index 85458f5..ad2ceff 100644 --- a/web/src/main/java/de/hsadmin/web/MainToolbar.java +++ b/web/src/main/java/de/hsadmin/web/MainToolbar.java @@ -52,7 +52,7 @@ public class MainToolbar extends CustomComponent implements ClickListener { final Button btn = new Button(); btn.setId(name + "-btn"); btn.setIcon(new ThemeResource("../icons/" + icon + "-icon.png")); - btn.setDescription(I18N.getText(name + ".tooltip")); + btn.setDescription(I18N.getText(name + ".tooltip", getLocale())); btn.setStyleName("borderless"); btn.addClickListener(this); return btn; diff --git a/web/src/main/java/de/hsadmin/web/PackagePanel.java b/web/src/main/java/de/hsadmin/web/PackagePanel.java index 5f92a76..de660e4 100644 --- a/web/src/main/java/de/hsadmin/web/PackagePanel.java +++ b/web/src/main/java/de/hsadmin/web/PackagePanel.java @@ -31,23 +31,23 @@ public class PackagePanel extends CustomComponent implements IHSPanel, SelectedT { final TabSheet tabsheet = new TabSheet(); tabsheet.addSelectedTabChangeListener(this); - tabsheet.addTab(new GenericForm("pac", session, itemId, "name"), I18N.getText("pac")); + tabsheet.addTab(new GenericForm("pac", session, itemId, "name"), I18N.getText("pac", getLocale())); final HSTab usersTab = new HSTab("user", session, "pac", itemId, "name"); usersTab.fillTable(); - tabsheet.addTab(usersTab, I18N.getText("user")); + tabsheet.addTab(usersTab, I18N.getText("user", getLocale())); final HSTab aliasTab = new HSTab("emailalias", session, "pac", itemId, "name"); - tabsheet.addTab(aliasTab, I18N.getText("emailalias")); + tabsheet.addTab(aliasTab, I18N.getText("emailalias", getLocale())); final HSTab domainTab = new HSTab("domain", session, "pac", itemId, "name"); - tabsheet.addTab(domainTab, I18N.getText("domain")); + tabsheet.addTab(domainTab, I18N.getText("domain", getLocale())); final HSTab mysqluserTab = new HSTab("mysqluser", session, "pac", itemId, "name"); - tabsheet.addTab(mysqluserTab, I18N.getText("mysqluser")); + tabsheet.addTab(mysqluserTab, I18N.getText("mysqluser", getLocale())); final HSTab mysqldbTab = new HSTab("mysqldb", session, "pac", itemId, "name"); - tabsheet.addTab(mysqldbTab, I18N.getText("mysqldb")); + tabsheet.addTab(mysqldbTab, I18N.getText("mysqldb", getLocale())); final HSTab postgresqluserTab = new HSTab("postgresqluser", session, "pac", itemId, "name"); - tabsheet.addTab(postgresqluserTab, I18N.getText("postgresqluser")); + tabsheet.addTab(postgresqluserTab, I18N.getText("postgresqluser", getLocale())); final HSTab postgresqldbTab = new HSTab("postgresqldb", session, "pac", itemId, "name"); - tabsheet.addTab(postgresqldbTab, I18N.getText("postgresqldb")); + tabsheet.addTab(postgresqldbTab, I18N.getText("postgresqldb", getLocale())); return tabsheet; } diff --git a/web/src/main/java/de/hsadmin/web/PanelToolbar.java b/web/src/main/java/de/hsadmin/web/PanelToolbar.java index 9fb9645..46d7a55 100644 --- a/web/src/main/java/de/hsadmin/web/PanelToolbar.java +++ b/web/src/main/java/de/hsadmin/web/PanelToolbar.java @@ -60,7 +60,7 @@ public class PanelToolbar extends HorizontalLayout implements ClickListener { if (image != null) { btn.setIcon(new ThemeResource("../icons/" + image + "-icon.png")); } - btn.setDescription(I18N.getText(tooltip)); + btn.setDescription(I18N.getText(tooltip, getLocale())); btn.setStyleName("borderless"); btn.addClickListener(this); return btn; @@ -88,7 +88,7 @@ public class PanelToolbar extends HorizontalLayout implements ClickListener { final Object value = parent.getSelection(); if (value == null) { if (ACTION_EDIT.equals(action) || ACTION_DELETE.equals(action)) { - UI.getCurrent().addWindow(new InfoWindow(I18N.getText("emptySelectionMessage") + " " + action)); + UI.getCurrent().addWindow(new InfoWindow(I18N.getText("emptySelectionMessage", getLocale()) + " " + action)); return; } } diff --git a/web/src/main/java/de/hsadmin/web/UserProfileWindow.java b/web/src/main/java/de/hsadmin/web/UserProfileWindow.java index cec28f2..33c279a 100644 --- a/web/src/main/java/de/hsadmin/web/UserProfileWindow.java +++ b/web/src/main/java/de/hsadmin/web/UserProfileWindow.java @@ -5,6 +5,7 @@ import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Set; @@ -28,7 +29,9 @@ public class UserProfileWindow extends Window implements IHSWindow { public UserProfileWindow(final HSAdminSession session, final Map whereContext) { - super(I18N.getText("edit") + " " + I18N.getText("user")); + super(); + final Locale locale = getLocale(); + setCaption(I18N.getText("edit", locale) + " " + I18N.getText("user", locale)); center(); setModal(true); setWidth("640px"); From b974a2521aaa60e276baed58fef85c9300b349fb Mon Sep 17 00:00:00 2001 From: Peter Hormanns Date: Thu, 22 Jun 2017 17:36:47 +0200 Subject: [PATCH 16/18] Revert "fix localization" This reverts commit 2299ec4a8778dcbb6e2db8f4427ec3fca86d602d. --- .../java/de/hsadmin/web/CustomerPanel.java | 8 ++++---- .../de/hsadmin/web/DomainOptionsEditor.java | 6 +++--- .../main/java/de/hsadmin/web/DomainPanel.java | 4 ++-- .../java/de/hsadmin/web/EMailTargetEditor.java | 18 +++++++++--------- .../de/hsadmin/web/EntryPointsSelector.java | 2 +- .../java/de/hsadmin/web/GenericFormWindow.java | 5 +---- .../main/java/de/hsadmin/web/HSConfirmBox.java | 2 +- .../java/de/hsadmin/web/HSPasswordField.java | 3 +-- web/src/main/java/de/hsadmin/web/HSSelect.java | 3 +-- web/src/main/java/de/hsadmin/web/HSTab.java | 2 +- .../main/java/de/hsadmin/web/HSTextField.java | 3 +-- .../main/java/de/hsadmin/web/HelpWindow.java | 2 +- web/src/main/java/de/hsadmin/web/I18N.java | 11 +++-------- .../main/java/de/hsadmin/web/LoginWindow.java | 15 +++++++-------- .../main/java/de/hsadmin/web/MainPanel.java | 4 ++-- .../main/java/de/hsadmin/web/MainToolbar.java | 2 +- .../main/java/de/hsadmin/web/PackagePanel.java | 16 ++++++++-------- .../main/java/de/hsadmin/web/PanelToolbar.java | 4 ++-- .../java/de/hsadmin/web/UserProfileWindow.java | 5 +---- 19 files changed, 50 insertions(+), 65 deletions(-) diff --git a/web/src/main/java/de/hsadmin/web/CustomerPanel.java b/web/src/main/java/de/hsadmin/web/CustomerPanel.java index 2a67d6f..bcae029 100644 --- a/web/src/main/java/de/hsadmin/web/CustomerPanel.java +++ b/web/src/main/java/de/hsadmin/web/CustomerPanel.java @@ -33,14 +33,14 @@ public class CustomerPanel extends CustomComponent implements IHSPanel, Selected tabsheet.setSizeFull(); tabsheet.addSelectedTabChangeListener(this); tabsheet.addSelectedTabChangeListener(this); - tabsheet.addTab(new GenericForm("customer", session, itemId, "name"), I18N.getText("customer", getLocale())); + tabsheet.addTab(new GenericForm("customer", session, itemId, "name"), I18N.getText("customer")); final HSTab usersTab = new HSTab("contact", session, "customer", itemId, "email"); usersTab.fillTable(); - tabsheet.addTab(usersTab, I18N.getText("contact", getLocale())); + tabsheet.addTab(usersTab, I18N.getText("contact")); HSTab aliasTab = new HSTab("mandat", session, "customer", itemId, "mandatRef"); - tabsheet.addTab(aliasTab, I18N.getText("mandat", getLocale())); + tabsheet.addTab(aliasTab, I18N.getText("mandat")); HSTab pacTab = new HSTab("pac", session, "customer", itemId, "name"); - tabsheet.addTab(pacTab, I18N.getText("pac", getLocale())); + tabsheet.addTab(pacTab, I18N.getText("pac")); return tabsheet; } diff --git a/web/src/main/java/de/hsadmin/web/DomainOptionsEditor.java b/web/src/main/java/de/hsadmin/web/DomainOptionsEditor.java index c0aa152..7b37388 100644 --- a/web/src/main/java/de/hsadmin/web/DomainOptionsEditor.java +++ b/web/src/main/java/de/hsadmin/web/DomainOptionsEditor.java @@ -27,14 +27,14 @@ public class DomainOptionsEditor extends CustomComponent implements IHSEditor { public DomainOptionsEditor(final PropertyInfo propertyInfo, final HSAdminSession session, final Map whereContext) { this.checkboxes = new HashMap<>(); this.propertyInfo = propertyInfo; - this.setCaption(I18N.getText(propertyInfo.getName(), getLocale())); + this.setCaption(I18N.getText(propertyInfo.getName())); layout = new VerticalLayout(); for (String opt : OPTIONS) { - final CheckBox checkBox = new CheckBox(I18N.getText("domainoption." + opt, getLocale())); + final CheckBox checkBox = new CheckBox(I18N.getText("domainoption." + opt)); checkboxes.put(opt, checkBox); layout.addComponent(checkBox); } - layout.setCaption(I18N.getText(propertyInfo.getName(), getLocale())); + layout.setCaption(I18N.getText(propertyInfo.getName())); setCompositionRoot(layout); } diff --git a/web/src/main/java/de/hsadmin/web/DomainPanel.java b/web/src/main/java/de/hsadmin/web/DomainPanel.java index 8d75666..c352dab 100644 --- a/web/src/main/java/de/hsadmin/web/DomainPanel.java +++ b/web/src/main/java/de/hsadmin/web/DomainPanel.java @@ -30,10 +30,10 @@ public class DomainPanel extends CustomComponent implements IHSPanel, SelectedTa public TabSheet createTabs(Object itemId) throws RpcException { final TabSheet tabsheet = new TabSheet(); - tabsheet.addTab(new GenericForm("domain", session, itemId, "name"), I18N.getText("domain", getLocale())); + tabsheet.addTab(new GenericForm("domain", session, itemId, "name"), I18N.getText("domain")); HSTab emailTab = new HSTab("emailaddress", session, "domain", itemId, "id"); emailTab.fillTable(); - tabsheet.addTab(emailTab, I18N.getText("emailaddress", getLocale())); + tabsheet.addTab(emailTab, I18N.getText("emailaddress")); return tabsheet; } diff --git a/web/src/main/java/de/hsadmin/web/EMailTargetEditor.java b/web/src/main/java/de/hsadmin/web/EMailTargetEditor.java index b91830c..150fad9 100644 --- a/web/src/main/java/de/hsadmin/web/EMailTargetEditor.java +++ b/web/src/main/java/de/hsadmin/web/EMailTargetEditor.java @@ -44,12 +44,12 @@ public class EMailTargetEditor extends CustomComponent implements IHSEditor, Val this.isEditAble = PanelToolbar.ACTION_EDIT.equals(action) || PanelToolbar.ACTION_NEW.equals(action); this.propertyInfo = propertyInfo; this.validators = new ArrayList<>(); - this.setCaption(I18N.getText(propertyInfo.getName(), getLocale())); + this.setCaption(I18N.getText(propertyInfo.getName())); this.aliases = targetsSelect("emailalias", session, whereContext); this.postboxes = targetsSelect("user", session, whereContext); postboxes.removeAll(aliases); layout = new VerticalLayout(); - layout.setCaption(I18N.getText(propertyInfo.getName(), getLocale())); + layout.setCaption(I18N.getText(propertyInfo.getName())); setCompositionRoot(layout); } @@ -175,7 +175,7 @@ public class EMailTargetEditor extends CustomComponent implements IHSEditor, Val targetTypeSelect.setMultiSelect(false); targetTypeSelect.setNullSelectionAllowed(true); targetTypeSelect.setNullSelectionItemId(" "); - targetTypeSelect.addItems(new Object[] { " ", I18N.getText("emailtarget.email", getLocale()), I18N.getText("emailtarget.postbox", getLocale()), I18N.getText("emailtarget.alias", getLocale()) }); + targetTypeSelect.addItems(new Object[] { " ", I18N.getText("emailtarget.email"), I18N.getText("emailtarget.postbox"), I18N.getText("emailtarget.alias") }); targetTypeSelect.setValue(" "); targetTypeSelect.setWidth("6.0em"); addComponent(targetTypeSelect); @@ -184,7 +184,7 @@ public class EMailTargetEditor extends CustomComponent implements IHSEditor, Val AbstractComponent targetField = null; NativeSelect sel = null; if (aliases.contains(target)) { - targetTypeSelect.setValue(I18N.getText("emailtarget.alias", getLocale())); + targetTypeSelect.setValue(I18N.getText("emailtarget.alias")); sel = new NativeSelect(); sel.addItems(aliases); sel.setValue(target); @@ -193,7 +193,7 @@ public class EMailTargetEditor extends CustomComponent implements IHSEditor, Val targetField = sel; } else { if (postboxes.contains(target)) { - targetTypeSelect.setValue(I18N.getText("emailtarget.postbox", getLocale())); + targetTypeSelect.setValue(I18N.getText("emailtarget.postbox")); sel = new NativeSelect(); sel.addItems(postboxes); sel.setValue(target); @@ -201,7 +201,7 @@ public class EMailTargetEditor extends CustomComponent implements IHSEditor, Val sel.setEnabled(isEditAble); targetField = sel; } else { - targetTypeSelect.setValue(I18N.getText("emailtarget.email", getLocale())); + targetTypeSelect.setValue(I18N.getText("emailtarget.email")); targetField = new TextField(); targetField.setEnabled(isEditAble); ((TextField) targetField).setValue(target); @@ -229,16 +229,16 @@ public class EMailTargetEditor extends CustomComponent implements IHSEditor, Val final String newValue = newValueObject.toString(); if (targetRow.getComponentCount() == 1) { AbstractComponent comp = null; - if (I18N.getText("emailtarget.email", getLocale()).equals(newValue)) { + if (I18N.getText("emailtarget.email").equals(newValue)) { final TextField textField = new TextField(); textField.addValueChangeListener(editor); textField.setImmediate(true); textField.setEnabled(isEditAble); comp = textField; } else { - if (I18N.getText("emailtarget.alias", getLocale()).equals(newValue) || I18N.getText("emailtarget.postbox", getLocale()).equals(newValue)) { + if (I18N.getText("emailtarget.alias").equals(newValue) || I18N.getText("emailtarget.postbox").equals(newValue)) { final NativeSelect select = new NativeSelect(); - if (I18N.getText("emailtarget.alias", getLocale()).equals(newValue)) { + if (I18N.getText("emailtarget.alias").equals(newValue)) { select.addItems(aliases); } else { select.addItems(postboxes); diff --git a/web/src/main/java/de/hsadmin/web/EntryPointsSelector.java b/web/src/main/java/de/hsadmin/web/EntryPointsSelector.java index 75237c8..db7918f 100644 --- a/web/src/main/java/de/hsadmin/web/EntryPointsSelector.java +++ b/web/src/main/java/de/hsadmin/web/EntryPointsSelector.java @@ -45,7 +45,7 @@ public class EntryPointsSelector extends CustomComponent implements ItemClickLis final AbstractEntryPointsFactory entryPointsFactory = FactoryProducer.getEntryPointsFactory(mainWindow, "default"); int tabCount = 0; for(String tabName : entryPointsFactory.getEntryPointNames(role)) { - accordion.addTab(new EntryPoint(this, tabName), I18N.getText(tabName, getLocale())); + accordion.addTab(new EntryPoint(this, tabName), I18N.getText(tabName)); tabCount++; } if (tabCount > 0) { diff --git a/web/src/main/java/de/hsadmin/web/GenericFormWindow.java b/web/src/main/java/de/hsadmin/web/GenericFormWindow.java index 9d9f771..bd95b01 100644 --- a/web/src/main/java/de/hsadmin/web/GenericFormWindow.java +++ b/web/src/main/java/de/hsadmin/web/GenericFormWindow.java @@ -2,7 +2,6 @@ package de.hsadmin.web; import java.util.HashMap; import java.util.Iterator; -import java.util.Locale; import java.util.Map; import java.util.Set; @@ -25,9 +24,7 @@ public class GenericFormWindow extends Window implements IHSWindow { public GenericFormWindow(final HSTab parent, final String module, final String action, final HSAdminSession session, final Map whereContext) { - super(); - final Locale locale = getLocale(); - setCaption(I18N.getText(action, locale) + " " + I18N.getText(module, locale)); + super(I18N.getText(action) + " " + I18N.getText(module)); this.parent = parent; center(); setModal(true); diff --git a/web/src/main/java/de/hsadmin/web/HSConfirmBox.java b/web/src/main/java/de/hsadmin/web/HSConfirmBox.java index af6bcdf..813a309 100644 --- a/web/src/main/java/de/hsadmin/web/HSConfirmBox.java +++ b/web/src/main/java/de/hsadmin/web/HSConfirmBox.java @@ -85,7 +85,7 @@ public class HSConfirmBox extends HorizontalLayout { } } }); - cancelButton = new Button(I18N.getText("cancel", getLocale())); + cancelButton = new Button(I18N.getText("cancel")); cancelButton.setClickShortcut(KeyCode.ESCAPE); cancelButton.addClickListener(new ClickListener() { diff --git a/web/src/main/java/de/hsadmin/web/HSPasswordField.java b/web/src/main/java/de/hsadmin/web/HSPasswordField.java index ba3d538..0460c9b 100644 --- a/web/src/main/java/de/hsadmin/web/HSPasswordField.java +++ b/web/src/main/java/de/hsadmin/web/HSPasswordField.java @@ -9,8 +9,7 @@ public class HSPasswordField extends PasswordField implements IHSEditor { private static final long serialVersionUID = 1L; public HSPasswordField(final String name, final boolean passwordRequired) { - super(); - setCaption(I18N.getText(name, getLocale())); + super(I18N.getText(name)); addValidator(new PasswordValidator(passwordRequired)); } diff --git a/web/src/main/java/de/hsadmin/web/HSSelect.java b/web/src/main/java/de/hsadmin/web/HSSelect.java index 7979ac3..3edefb8 100644 --- a/web/src/main/java/de/hsadmin/web/HSSelect.java +++ b/web/src/main/java/de/hsadmin/web/HSSelect.java @@ -16,8 +16,7 @@ public class HSSelect extends NativeSelect implements IHSEditor { } public HSSelect(final String label, final int defaultIndex, final List values) { - super(); - setCaption(I18N.getText(label, getLocale())); + super(I18N.getText(label)); this.propertyName = label; super.addItems(values); if (values != null && values.size() > defaultIndex) { diff --git a/web/src/main/java/de/hsadmin/web/HSTab.java b/web/src/main/java/de/hsadmin/web/HSTab.java index 1d5b47f..0e4bca4 100644 --- a/web/src/main/java/de/hsadmin/web/HSTab.java +++ b/web/src/main/java/de/hsadmin/web/HSTab.java @@ -149,7 +149,7 @@ public class HSTab extends CustomComponent { while (properties.hasNext()) { final PropertyInfo propertyInfo = properties.next(); if (showColumnInTable(propertyInfo)) { - grid.addContainerProperty(I18N.getText(propertyInfo.getModule() + "." + propertyInfo.getName(), getLocale()), String.class, ""); + grid.addContainerProperty(I18N.getText(propertyInfo.getModule() + "." + propertyInfo.getName()), String.class, ""); } } grid.setSelectable(true); diff --git a/web/src/main/java/de/hsadmin/web/HSTextField.java b/web/src/main/java/de/hsadmin/web/HSTextField.java index 1a2bc32..e925c87 100644 --- a/web/src/main/java/de/hsadmin/web/HSTextField.java +++ b/web/src/main/java/de/hsadmin/web/HSTextField.java @@ -11,8 +11,7 @@ public class HSTextField extends TextField implements IHSEditor { private final String propertyName; public HSTextField(final String name) { - super(); - setCaption(I18N.getText(name, getLocale())); + super(I18N.getText(name)); this.propertyName = name; } diff --git a/web/src/main/java/de/hsadmin/web/HelpWindow.java b/web/src/main/java/de/hsadmin/web/HelpWindow.java index 19fc72c..6d0ad64 100644 --- a/web/src/main/java/de/hsadmin/web/HelpWindow.java +++ b/web/src/main/java/de/hsadmin/web/HelpWindow.java @@ -25,7 +25,7 @@ public class HelpWindow extends Window { final VerticalLayout subContent = new VerticalLayout(); subContent.setMargin(true); subContent.setSizeFull(); - final String helpBaseURL = I18N.getText("help.baseurl", getLocale()); + final String helpBaseURL = I18N.getText("help.baseurl"); final Component helpContent = new BrowserFrame("Help Window", new ExternalResource(helpBaseURL + helpTopic)); helpContent.setSizeFull(); subContent.addComponent(helpContent); diff --git a/web/src/main/java/de/hsadmin/web/I18N.java b/web/src/main/java/de/hsadmin/web/I18N.java index 3b139dc..df14604 100644 --- a/web/src/main/java/de/hsadmin/web/I18N.java +++ b/web/src/main/java/de/hsadmin/web/I18N.java @@ -1,21 +1,16 @@ package de.hsadmin.web; -import java.util.Locale; import java.util.MissingResourceException; import java.util.ResourceBundle; public class I18N { - private static final ResourceBundle TEXTS_DE = ResourceBundle.getBundle("de.hsadmin.web.main", Locale.GERMAN); - private static final ResourceBundle TEXTS_EN = ResourceBundle.getBundle("de.hsadmin.web.main", Locale.ENGLISH); + private static final ResourceBundle TEXTS = ResourceBundle.getBundle("de.hsadmin.web.main"); - public static String getText(final String textProperty, final Locale loc) { + public static String getText(final String textProperty) { String textValue; try{ - textValue = I18N.TEXTS_EN.getString(textProperty); - if (loc.getLanguage().equals(Locale.GERMAN.getLanguage())) { - textValue = I18N.TEXTS_DE.getString(textProperty); - } + textValue = I18N.TEXTS.getString(textProperty); }catch(MissingResourceException e){ textValue = "./. " + textProperty; } diff --git a/web/src/main/java/de/hsadmin/web/LoginWindow.java b/web/src/main/java/de/hsadmin/web/LoginWindow.java index 3cd686e..f97ab51 100644 --- a/web/src/main/java/de/hsadmin/web/LoginWindow.java +++ b/web/src/main/java/de/hsadmin/web/LoginWindow.java @@ -27,8 +27,7 @@ public class LoginWindow extends Window { private static final long serialVersionUID = 1L; public LoginWindow(final HSAdminUI parent, final TicketService ticketService) { - super(); - setCaption(I18N.getText("login.title", getLocale())); + super(I18N.getText("login.title")); center(); setModal(true); setWidth("480px"); @@ -36,11 +35,11 @@ public class LoginWindow extends Window { final FormLayout subContent = new FormLayout(); subContent.setMargin(true); - final TextField login = new TextField(I18N.getText("user.name", getLocale())); + final TextField login = new TextField(I18N.getText("user.name")); login.setWidth("100%"); subContent.addComponent(login); login.focus(); - final PasswordField password = new PasswordField(I18N.getText("password", getLocale())); + final PasswordField password = new PasswordField(I18N.getText("password")); password.setWidth("100%"); subContent.addComponent(password); final Label feedback = new Label(""); @@ -49,7 +48,7 @@ public class LoginWindow extends Window { subContent.addComponent(feedback); feedback.setStyleName(ValoTheme.LABEL_FAILURE); - final Button okButton = new Button(I18N.getText("login.button", getLocale())); + final Button okButton = new Button(I18N.getText("login.button")); okButton.setStyleName(ValoTheme.BUTTON_PRIMARY); okButton.setClickShortcut(KeyCode.ENTER); okButton.addClickListener(new ClickListener() @@ -75,9 +74,9 @@ public class LoginWindow extends Window { } } try { - final String user = credentials.get(I18N.getText("user.name", getLocale())); + final String user = credentials.get(I18N.getText("user.name")); final String loginUser = user.length() == 3 ? "hsh00-" + user : user; - final String password = credentials.get(I18N.getText("password", getLocale())); + final String password = credentials.get(I18N.getText("password")); final String grantingTicket = ticketService.getGrantingTicket(loginUser, password); if (grantingTicket != null && !grantingTicket.isEmpty()) { feedback.setValue("successful login"); @@ -100,7 +99,7 @@ public class LoginWindow extends Window { } }); subContent.addComponent(okButton); - final Link linkToOld = new Link(I18N.getText("main.panel.link_to_old", getLocale()), new ExternalResource("https://admin.hostsharing.net/hsarweb")); + final Link linkToOld = new Link(I18N.getText("main.panel.link_to_old"), new ExternalResource("https://admin.hostsharing.net/hsarweb")); subContent.addComponent(linkToOld); setContent(subContent); diff --git a/web/src/main/java/de/hsadmin/web/MainPanel.java b/web/src/main/java/de/hsadmin/web/MainPanel.java index 4c5d605..a7fa611 100644 --- a/web/src/main/java/de/hsadmin/web/MainPanel.java +++ b/web/src/main/java/de/hsadmin/web/MainPanel.java @@ -10,8 +10,8 @@ public class MainPanel extends CustomComponent{ private static final long serialVersionUID = -1085100738394404620L; public MainPanel() { - final String helpBaseURL = I18N.getText("help.baseurl", getLocale()); - final Component helpContent = new BrowserFrame(I18N.getText("main.panel.title", getLocale()), new ExternalResource(helpBaseURL + "hsadmin")); + final String helpBaseURL = I18N.getText("help.baseurl"); + final Component helpContent = new BrowserFrame(I18N.getText("main.panel.title"), new ExternalResource(helpBaseURL + "hsadmin")); helpContent.setSizeFull(); setCompositionRoot(helpContent); setSizeFull(); diff --git a/web/src/main/java/de/hsadmin/web/MainToolbar.java b/web/src/main/java/de/hsadmin/web/MainToolbar.java index ad2ceff..85458f5 100644 --- a/web/src/main/java/de/hsadmin/web/MainToolbar.java +++ b/web/src/main/java/de/hsadmin/web/MainToolbar.java @@ -52,7 +52,7 @@ public class MainToolbar extends CustomComponent implements ClickListener { final Button btn = new Button(); btn.setId(name + "-btn"); btn.setIcon(new ThemeResource("../icons/" + icon + "-icon.png")); - btn.setDescription(I18N.getText(name + ".tooltip", getLocale())); + btn.setDescription(I18N.getText(name + ".tooltip")); btn.setStyleName("borderless"); btn.addClickListener(this); return btn; diff --git a/web/src/main/java/de/hsadmin/web/PackagePanel.java b/web/src/main/java/de/hsadmin/web/PackagePanel.java index de660e4..5f92a76 100644 --- a/web/src/main/java/de/hsadmin/web/PackagePanel.java +++ b/web/src/main/java/de/hsadmin/web/PackagePanel.java @@ -31,23 +31,23 @@ public class PackagePanel extends CustomComponent implements IHSPanel, SelectedT { final TabSheet tabsheet = new TabSheet(); tabsheet.addSelectedTabChangeListener(this); - tabsheet.addTab(new GenericForm("pac", session, itemId, "name"), I18N.getText("pac", getLocale())); + tabsheet.addTab(new GenericForm("pac", session, itemId, "name"), I18N.getText("pac")); final HSTab usersTab = new HSTab("user", session, "pac", itemId, "name"); usersTab.fillTable(); - tabsheet.addTab(usersTab, I18N.getText("user", getLocale())); + tabsheet.addTab(usersTab, I18N.getText("user")); final HSTab aliasTab = new HSTab("emailalias", session, "pac", itemId, "name"); - tabsheet.addTab(aliasTab, I18N.getText("emailalias", getLocale())); + tabsheet.addTab(aliasTab, I18N.getText("emailalias")); final HSTab domainTab = new HSTab("domain", session, "pac", itemId, "name"); - tabsheet.addTab(domainTab, I18N.getText("domain", getLocale())); + tabsheet.addTab(domainTab, I18N.getText("domain")); final HSTab mysqluserTab = new HSTab("mysqluser", session, "pac", itemId, "name"); - tabsheet.addTab(mysqluserTab, I18N.getText("mysqluser", getLocale())); + tabsheet.addTab(mysqluserTab, I18N.getText("mysqluser")); final HSTab mysqldbTab = new HSTab("mysqldb", session, "pac", itemId, "name"); - tabsheet.addTab(mysqldbTab, I18N.getText("mysqldb", getLocale())); + tabsheet.addTab(mysqldbTab, I18N.getText("mysqldb")); final HSTab postgresqluserTab = new HSTab("postgresqluser", session, "pac", itemId, "name"); - tabsheet.addTab(postgresqluserTab, I18N.getText("postgresqluser", getLocale())); + tabsheet.addTab(postgresqluserTab, I18N.getText("postgresqluser")); final HSTab postgresqldbTab = new HSTab("postgresqldb", session, "pac", itemId, "name"); - tabsheet.addTab(postgresqldbTab, I18N.getText("postgresqldb", getLocale())); + tabsheet.addTab(postgresqldbTab, I18N.getText("postgresqldb")); return tabsheet; } diff --git a/web/src/main/java/de/hsadmin/web/PanelToolbar.java b/web/src/main/java/de/hsadmin/web/PanelToolbar.java index 46d7a55..9fb9645 100644 --- a/web/src/main/java/de/hsadmin/web/PanelToolbar.java +++ b/web/src/main/java/de/hsadmin/web/PanelToolbar.java @@ -60,7 +60,7 @@ public class PanelToolbar extends HorizontalLayout implements ClickListener { if (image != null) { btn.setIcon(new ThemeResource("../icons/" + image + "-icon.png")); } - btn.setDescription(I18N.getText(tooltip, getLocale())); + btn.setDescription(I18N.getText(tooltip)); btn.setStyleName("borderless"); btn.addClickListener(this); return btn; @@ -88,7 +88,7 @@ public class PanelToolbar extends HorizontalLayout implements ClickListener { final Object value = parent.getSelection(); if (value == null) { if (ACTION_EDIT.equals(action) || ACTION_DELETE.equals(action)) { - UI.getCurrent().addWindow(new InfoWindow(I18N.getText("emptySelectionMessage", getLocale()) + " " + action)); + UI.getCurrent().addWindow(new InfoWindow(I18N.getText("emptySelectionMessage") + " " + action)); return; } } diff --git a/web/src/main/java/de/hsadmin/web/UserProfileWindow.java b/web/src/main/java/de/hsadmin/web/UserProfileWindow.java index 33c279a..cec28f2 100644 --- a/web/src/main/java/de/hsadmin/web/UserProfileWindow.java +++ b/web/src/main/java/de/hsadmin/web/UserProfileWindow.java @@ -5,7 +5,6 @@ import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.List; -import java.util.Locale; import java.util.Map; import java.util.Set; @@ -29,9 +28,7 @@ public class UserProfileWindow extends Window implements IHSWindow { public UserProfileWindow(final HSAdminSession session, final Map whereContext) { - super(); - final Locale locale = getLocale(); - setCaption(I18N.getText("edit", locale) + " " + I18N.getText("user", locale)); + super(I18N.getText("edit") + " " + I18N.getText("user")); center(); setModal(true); setWidth("640px"); From 203d8960661b53b1be0843c28d185ab287fdd4fd Mon Sep 17 00:00:00 2001 From: Peter Hormanns Date: Mon, 26 Jun 2017 18:12:50 +0200 Subject: [PATCH 17/18] show domain-subdomains only on domain.update --- .../main/java/de/hsadmin/web/GenericEditorFactory.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/web/src/main/java/de/hsadmin/web/GenericEditorFactory.java b/web/src/main/java/de/hsadmin/web/GenericEditorFactory.java index 4d76118..3a73271 100644 --- a/web/src/main/java/de/hsadmin/web/GenericEditorFactory.java +++ b/web/src/main/java/de/hsadmin/web/GenericEditorFactory.java @@ -34,6 +34,9 @@ public class GenericEditorFactory implements IEditorFactory, Serializable { if ("domainoptions".equals(inputName)) { return getDomainOptionsEditor(action, propertyInfo, session, whereContext); } + if ("validsubdomainnames".equals(inputName)) { + return getValidsubdomainnamesEditor(action, propertyInfo, session, whereContext); + } } if ("emailaddress".equals(module) || "emailalias".equals(module)) { if ("target".equals(inputName)) { @@ -54,6 +57,12 @@ public class GenericEditorFactory implements IEditorFactory, Serializable { } + private IHSEditor getValidsubdomainnamesEditor(final String action, final PropertyInfo propertyInfo, final HSAdminSession session, + final Map whereContext) { + return PanelToolbar.ACTION_EDIT.equals(action) ? getEditor(action, propertyInfo) : new NullEditor(); + } + + private IHSEditor getDomainOptionsEditor(final String action, final PropertyInfo propertyInfo, final HSAdminSession session, final Map whereContext) { return PanelToolbar.ACTION_EDIT.equals(action) ? new DomainOptionsEditor(propertyInfo, session, whereContext) : new NullEditor(); } From bb42be700e4ca27fcc6430ad579f0631f3cef54f Mon Sep 17 00:00:00 2001 From: Peter Hormanns Date: Thu, 29 Jun 2017 12:02:02 +0200 Subject: [PATCH 18/18] fix hsscript history --- cli/pom.xml | 6 +++--- .../java/de/hsadmin/jscli/console/ConsoleWrapper.java | 10 +++++++++- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/cli/pom.xml b/cli/pom.xml index 90a38bb..3d0d887 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -8,7 +8,7 @@ 1.0-SNAPSHOT hsadmin-cli - 1.0.3 + 1.0.4 jar HSAdmin-Cli @@ -37,12 +37,12 @@ jline jline - 2.14.2 + 2.14.5 commons-cli commons-cli - 1.3.1 + 1.4 diff --git a/cli/src/main/java/de/hsadmin/jscli/console/ConsoleWrapper.java b/cli/src/main/java/de/hsadmin/jscli/console/ConsoleWrapper.java index 478af11..25dad42 100644 --- a/cli/src/main/java/de/hsadmin/jscli/console/ConsoleWrapper.java +++ b/cli/src/main/java/de/hsadmin/jscli/console/ConsoleWrapper.java @@ -13,6 +13,7 @@ import jline.console.history.FileHistory; public class ConsoleWrapper implements PasswordReader { private ConsoleReader cons; + private FileHistory history; private String prompt; public void open(final String prompt) throws JSCliException { @@ -22,7 +23,8 @@ public class ConsoleWrapper implements PasswordReader { cons.setExpandEvents(false); cons.setPrompt(prompt); final String userHome = System.getProperty("user.home"); - cons.setHistory(new FileHistory(new File(userHome + "/.hsscript_history"))); + history = new FileHistory(new File(userHome + "/.hsscript_history")); + cons.setHistory(history); } catch (IOException e) { throw new JSCliException(e); } @@ -37,6 +39,12 @@ public class ConsoleWrapper implements PasswordReader { return line; } catch (IOException e) { throw new JSCliException(e); + } finally { + try { + history.flush(); + } catch (IOException e) { + // dont care about + } } }