From 553e4e531d8b9753a958a86c8475b168d650ad38 Mon Sep 17 00:00:00 2001 From: felmer <felmer> Date: Mon, 15 Nov 2010 15:20:36 +0000 Subject: [PATCH] LMS-1870 extending IViewContext and WebClientConfiguration in order to allow technology specific properties for web client SVN: 18699 --- .../AbstractPluginViewContext.java | 27 +++++++-- .../client/application/CommonViewContext.java | 10 ++++ .../web/client/application/IViewContext.java | 4 ++ .../web/server/AbstractClientService.java | 10 ++++ .../WebClientConfigurationProvider.java | 28 +++++++++- .../generic/server/AbstractServer.java | 4 +- .../basic/dto/WebClientConfiguration.java | 13 +++++ .../client/application/DemoViewContext.java | 3 +- .../application/GenericViewContext.java | 3 +- .../client/application/QueryViewContext.java | 3 +- .../WebClientConfigurationProviderTest.java | 56 +++++++++++++++++++ 11 files changed, 147 insertions(+), 14 deletions(-) create mode 100644 openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/WebClientConfigurationProviderTest.java diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/AbstractPluginViewContext.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/AbstractPluginViewContext.java index a951d4fcf51..ea121f11639 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/AbstractPluginViewContext.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/AbstractPluginViewContext.java @@ -28,6 +28,8 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.Vi import ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin.IClientPluginFactoryProvider; import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider; import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.log.IProfilingTable; +import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ApplicationInfo; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.WebClientConfiguration; /** * An <i>abstract</i> {@link IViewContext} implementation which should be extended by each plugin @@ -38,6 +40,21 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.log.I public abstract class AbstractPluginViewContext<T extends IClientServiceAsync> implements IViewContext<T> { + static String getPropertyOrNull(IViewContext<?> viewContext, String key) + { + ApplicationInfo applicationInfo = viewContext.getModel().getApplicationInfo(); + if (applicationInfo == null) + { + return null; + } + WebClientConfiguration webClientConfiguration = applicationInfo.getWebClientConfiguration(); + if (webClientConfiguration == null) + { + return null; + } + return webClientConfiguration.getPropertyOrNull(viewContext.getTechnology(), key); + } + private final IViewContext<ICommonClientServiceAsync> commonViewContext; private final T service; @@ -52,11 +69,6 @@ public abstract class AbstractPluginViewContext<T extends IClientServiceAsync> i initializeLocatorHandlerRegistry(commonViewContext.getLocatorResolverRegistry()); } - /** - * Returns the name of the technology. - */ - protected abstract String getTechnology(); - /** * Creates the service. Implementations will usually invoke {@link GWT#create(Class)} with the * corresponding synchronous service interface. @@ -72,6 +84,11 @@ public abstract class AbstractPluginViewContext<T extends IClientServiceAsync> i return service; } + public String getPropertyOrNull(String key) + { + return getPropertyOrNull(this, key); + } + public final IViewContext<ICommonClientServiceAsync> getCommonViewContext() { return commonViewContext; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/CommonViewContext.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/CommonViewContext.java index 06a35f599be..01cf8943605 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/CommonViewContext.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/CommonViewContext.java @@ -125,6 +125,16 @@ public final class CommonViewContext implements IViewContext<ICommonClientServic return service; } + public String getTechnology() + { + return TECHNOLOGY_NAME; + } + + public String getPropertyOrNull(String key) + { + return AbstractPluginViewContext.getPropertyOrNull(this, key); + } + public final GenericViewModel getModel() { return viewModel; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/IViewContext.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/IViewContext.java index 4eafa948e3b..3feebd8c1d5 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/IViewContext.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/IViewContext.java @@ -33,12 +33,16 @@ public interface IViewContext<T extends IClientServiceAsync> extends IMessagePro IProfilingTable { public void addMessageSource(String messageSource); + + public String getTechnology(); public IViewContext<ICommonClientServiceAsync> getCommonViewContext(); public T getService(); public GenericViewModel getModel(); + + public String getPropertyOrNull(String key); public void initDisplaySettingsManager(); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/AbstractClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/AbstractClientService.java index 761eca32d83..fbfa272b79e 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/AbstractClientService.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/AbstractClientService.java @@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.generic.client.web.server; import java.util.Arrays; import java.util.HashSet; import java.util.List; +import java.util.Properties; import java.util.Set; import javax.annotation.Resource; @@ -30,6 +31,7 @@ import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.common.logging.LogCategory; import ch.systemsx.cisd.common.logging.LogFactory; import ch.systemsx.cisd.common.servlet.IRequestContextProvider; +import ch.systemsx.cisd.common.spring.ExposablePropertyPlaceholderConfigurer; import ch.systemsx.cisd.openbis.BuildAndEnvironmentInfo; import ch.systemsx.cisd.openbis.generic.client.web.client.IClientService; import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientService; @@ -86,6 +88,9 @@ public abstract class AbstractClientService implements IClientService, @Resource(name = "common-service") protected ICommonClientService commonClientService; + @Resource(name = ExposablePropertyPlaceholderConfigurer.PROPERTY_CONFIGURER_BEAN_NAME) + private ExposablePropertyPlaceholderConfigurer configurer; + private String cifexURL; private String cifexRecipient; @@ -115,6 +120,11 @@ public abstract class AbstractClientService implements IClientService, this.requestContextProvider = requestContextProvider; } + protected Properties getServiceProperties() + { + return configurer == null ? new Properties() : configurer.getResolvedProps(); + } + protected void transformXML(IEntityPropertiesHolder propertiesHolder) { new XMLPropertyTransformer().transformXMLProperties(Arrays.asList(propertiesHolder)); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/WebClientConfigurationProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/WebClientConfigurationProvider.java index b808aaae97e..bdf71ab1ee6 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/WebClientConfigurationProvider.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/WebClientConfigurationProvider.java @@ -20,7 +20,9 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Properties; +import java.util.Set; import ch.systemsx.cisd.common.utilities.PropertyParametersUtil; import ch.systemsx.cisd.common.utilities.PropertyParametersUtil.SectionProperties; @@ -52,6 +54,8 @@ public class WebClientConfigurationProvider private static final String HIDE_FILE_VIEW = "hide-file-view"; private static final String DEFAULT_VIEW_MODE = "default-view-mode"; + + static final String TECHNOLOGIES = "technologies"; private WebClientConfiguration webClientConfiguration = new WebClientConfiguration(); @@ -62,9 +66,31 @@ public class WebClientConfigurationProvider return; } Properties properties = PropertyUtils.loadProperties(configurationFile); - webClientConfiguration = new WebClientConfiguration(); + init(properties); + } + + WebClientConfigurationProvider(Properties properties) + { + init(properties); + } + + private void init(Properties properties) + { webClientConfiguration.setDefaultViewMode(extractDefaultViewMode(properties)); webClientConfiguration.setViews(extractHiddenSections(properties)); + SectionProperties[] props = + PropertyParametersUtil.extractSectionProperties(properties, TECHNOLOGIES, false); + for (SectionProperties sectionProperties : props) + { + Properties technologyProperties = sectionProperties.getProperties(); + Set<Entry<Object, Object>> entrySet = technologyProperties.entrySet(); + Map<String, String> map = new HashMap<String, String>(); + for (Entry<Object, Object> entry : entrySet) + { + map.put(entry.getKey().toString(), entry.getValue().toString()); + } + webClientConfiguration.addPropertiesForTechnology(sectionProperties.getKey(), map); + } } private Map<String, DetailViewConfiguration> extractHiddenSections(Properties properties) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java index 221b3612fb5..16a65d16c27 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java @@ -83,7 +83,7 @@ public abstract class AbstractServer<T> extends AbstractServiceWithLogger<T> imp @Resource(name = ComponentNames.REMOTE_HOST_VALIDATOR) private IRemoteHostValidator remoteHostValidator; - + protected AbstractServer() { operationLog.info(String.format("Creating new '%s' implementation: '%s'.", IServer.class @@ -108,7 +108,7 @@ public abstract class AbstractServer<T> extends AbstractServiceWithLogger<T> imp this.sampleTypeSlaveServerPlugin = sampleTypeSlaveServerPlugin; this.dataSetTypeSlaveServerPlugin = dataSetTypeSlaveServerPlugin; } - + public final void setSampleTypeSlaveServerPlugin( ISampleTypeSlaveServerPlugin sampleTypeSlaveServerPlugin) { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/WebClientConfiguration.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/WebClientConfiguration.java index a50f4946483..4247bb28b4c 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/WebClientConfiguration.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/WebClientConfiguration.java @@ -35,8 +35,21 @@ public class WebClientConfiguration implements IsSerializable, Serializable private Map<String, DetailViewConfiguration> views = new HashMap<String, DetailViewConfiguration>(); + + private Map<String, Map<String, String>> technologyProperties = new HashMap<String, Map<String, String>>(); private ViewMode defaultViewMode; + + public String getPropertyOrNull(String technology, String key) + { + Map<String, String> properties = technologyProperties.get(technology); + return properties == null ? null : properties.get(key); + } + + public void addPropertiesForTechnology(String technology, Map<String, String> properties) + { + technologyProperties.put(technology, properties); + } public Map<String, DetailViewConfiguration> getViews() { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/demo/client/web/client/application/DemoViewContext.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/demo/client/web/client/application/DemoViewContext.java index 4fb51b6b3ed..f49923ce3ac 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/demo/client/web/client/application/DemoViewContext.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/demo/client/web/client/application/DemoViewContext.java @@ -22,8 +22,7 @@ public final class DemoViewContext extends AbstractPluginViewContext<IDemoClient super(commonViewContext); } - @Override - protected String getTechnology() + public String getTechnology() { return TECHNOLOGY_NAME; } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/GenericViewContext.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/GenericViewContext.java index c577a7905bd..c9ee5584605 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/GenericViewContext.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/GenericViewContext.java @@ -22,8 +22,7 @@ public final class GenericViewContext extends AbstractPluginViewContext<IGeneric super(commonViewContext); } - @Override - protected String getTechnology() + public String getTechnology() { return TECHNOLOGY_NAME; } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/QueryViewContext.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/QueryViewContext.java index 6dbfa66cce2..098df87a2d7 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/QueryViewContext.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/QueryViewContext.java @@ -38,8 +38,7 @@ public class QueryViewContext extends AbstractPluginViewContext<IQueryClientServ super(commonViewContext); } - @Override - protected String getTechnology() + public String getTechnology() { return TECHNOLOGY_NAME; } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/WebClientConfigurationProviderTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/WebClientConfigurationProviderTest.java new file mode 100644 index 00000000000..938b5c8bdf1 --- /dev/null +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/WebClientConfigurationProviderTest.java @@ -0,0 +1,56 @@ +/* + * Copyright 2010 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.openbis.generic.client.web.server; + +import java.util.Properties; + +import org.testng.AssertJUnit; +import org.testng.annotations.Test; + +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.WebClientConfiguration; + +/** + * + * + * @author Franz-Josef Elmer + */ +public class WebClientConfigurationProviderTest extends AssertJUnit +{ + @Test + public void testNoTechnologyProperties() + { + WebClientConfigurationProvider provider = new WebClientConfigurationProvider(new Properties()); + assertEquals(null, provider.getWebClientConfiguration().getPropertyOrNull("hello", "world")); + } + + @Test + public void testTechnologyProperties() + { + Properties properties = new Properties(); + properties.setProperty(WebClientConfigurationProvider.TECHNOLOGIES, "t1, t2"); + properties.setProperty("t1.a" , "alpha1"); + properties.setProperty("t2.b" , "beta1"); + + WebClientConfigurationProvider provider = new WebClientConfigurationProvider(properties); + WebClientConfiguration webClientConfiguration = provider.getWebClientConfiguration(); + + assertEquals("alpha1", webClientConfiguration.getPropertyOrNull("t1", "a")); + assertEquals(null, provider.getWebClientConfiguration().getPropertyOrNull("t2", "a")); + } + + +} -- GitLab