From: Leif Åstrand Date: Tue, 4 Sep 2012 13:48:13 +0000 (+0300) Subject: Extract ApplicationConfiguration from DeploymentConfiguration (#9382) X-Git-Tag: 7.0.0.beta1~184^2~10 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=c71563c8a6e9993cbbdff3ddfdfccfee4aa34f7b;p=vaadin-framework.git Extract ApplicationConfiguration from DeploymentConfiguration (#9382) --- diff --git a/server/src/com/vaadin/Application.java b/server/src/com/vaadin/Application.java index 088934c5f9..745d0ad784 100644 --- a/server/src/com/vaadin/Application.java +++ b/server/src/com/vaadin/Application.java @@ -24,7 +24,6 @@ import java.net.URL; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; -import java.util.Enumeration; import java.util.EventObject; import java.util.HashMap; import java.util.Iterator; @@ -45,6 +44,7 @@ import com.vaadin.data.util.converter.DefaultConverterFactory; import com.vaadin.event.EventRouter; import com.vaadin.server.AbstractErrorMessage; import com.vaadin.server.AbstractUIProvider; +import com.vaadin.server.ApplicationConfiguration; import com.vaadin.server.ApplicationContext; import com.vaadin.server.BootstrapFragmentResponse; import com.vaadin.server.BootstrapListener; @@ -400,7 +400,7 @@ public class Application implements Terminal.ErrorListener, Serializable { public static class ApplicationStartEvent implements Serializable { private final URL applicationUrl; - private final DeploymentConfiguration configuration; + private final ApplicationConfiguration configuration; private final ApplicationContext context; @@ -408,12 +408,12 @@ public class Application implements Terminal.ErrorListener, Serializable { * @param applicationUrl * the URL the application should respond to. * @param configuration - * the deployment configuration for the application. + * the application configuration for the application. * @param context * the context application will be running in. */ public ApplicationStartEvent(URL applicationUrl, - DeploymentConfiguration configuration, + ApplicationConfiguration configuration, ApplicationContext context) { this.applicationUrl = applicationUrl; this.configuration = configuration; @@ -433,11 +433,11 @@ public class Application implements Terminal.ErrorListener, Serializable { } /** - * Returns the deployment configuration used by this application. + * Returns the application configuration used by this application. * * @return the deployment configuration. */ - public DeploymentConfiguration getConfiguration() { + public ApplicationConfiguration getConfiguration() { return configuration; } @@ -462,9 +462,9 @@ public class Application implements Terminal.ErrorListener, Serializable { private ApplicationContext context; /** - * Deployment configuration for the application. + * Configuration for the application. */ - private DeploymentConfiguration configuration; + private ApplicationConfiguration configuration; /** * The application's URL. @@ -604,44 +604,12 @@ public class Application implements Terminal.ErrorListener, Serializable { } /** - * Returns the properties of this application as specified in the deployment - * configuration. + * Gets the configuration for this application * - * @return Application properties + * @return the application configuration */ - protected Properties getProperties() { - return configuration.getInitParameters(); - } - - /** - * Returns an enumeration of all the names in this application. - * - *

- * See {@link #start(URL, Properties, ApplicationContext)} how properties - * are defined. - *

- * - * @return an enumeration of all the keys in this property list, including - * the keys in the default property list. - * - */ - public Enumeration getPropertyNames() { - return getProperties().propertyNames(); - } - - /** - * Searches for the property with the specified name in this application. - * This method returns null if the property is not found. - * - * See {@link #start(URL, Properties, ApplicationContext)} how properties - * are defined. - * - * @param name - * the name of the property. - * @return the value in this property list with the specified key value. - */ - public String getProperty(String name) { - return getProperties().getProperty(name); + public ApplicationConfiguration getConfiguration() { + return configuration; } /** diff --git a/server/src/com/vaadin/DefaultApplicationConfiguration.java b/server/src/com/vaadin/DefaultApplicationConfiguration.java new file mode 100644 index 0000000000..2e2267193e --- /dev/null +++ b/server/src/com/vaadin/DefaultApplicationConfiguration.java @@ -0,0 +1,229 @@ +/* + * Copyright 2011 Vaadin Ltd. + * + * 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 com.vaadin; + +import java.util.Properties; +import java.util.logging.Logger; + +import com.vaadin.server.ApplicationConfiguration; +import com.vaadin.server.Constants; + +public class DefaultApplicationConfiguration implements + ApplicationConfiguration { + private final Properties applicationProperties; + private boolean productionMode; + private boolean xsrfProtectionEnabled; + private int resourceCacheTime; + private int heartbeatInterval; + private boolean idleRootCleanupEnabled; + private final Class systemPropertyBaseClass; + + public DefaultApplicationConfiguration(Class systemPropertyBaseClass, + Properties applicationProperties) { + this.applicationProperties = applicationProperties; + this.systemPropertyBaseClass = systemPropertyBaseClass; + + checkProductionMode(); + checkXsrfProtection(); + checkResourceCacheTime(); + checkHeartbeatInterval(); + checkIdleUICleanup(); + } + + @Override + public String getApplicationOrSystemProperty(String propertyName, + String defaultValue) { + String val = null; + + // Try application properties + val = getApplicationProperty(propertyName); + if (val != null) { + return val; + } + + // Try system properties + val = getSystemProperty(propertyName); + if (val != null) { + return val; + } + + return defaultValue; + } + + /** + * Gets an system property value. + * + * @param parameterName + * the Name or the parameter. + * @return String value or null if not found + */ + protected String getSystemProperty(String parameterName) { + String val = null; + + String pkgName; + final Package pkg = systemPropertyBaseClass.getPackage(); + if (pkg != null) { + pkgName = pkg.getName(); + } else { + final String className = systemPropertyBaseClass.getName(); + pkgName = new String(className.toCharArray(), 0, + className.lastIndexOf('.')); + } + val = System.getProperty(pkgName + "." + parameterName); + if (val != null) { + return val; + } + + // Try lowercased system properties + val = System.getProperty(pkgName + "." + parameterName.toLowerCase()); + return val; + } + + /** + * Gets an application property value. + * + * @param parameterName + * the Name or the parameter. + * @return String value or null if not found + */ + public String getApplicationProperty(String parameterName) { + + String val = applicationProperties.getProperty(parameterName); + if (val != null) { + return val; + } + + // Try lower case application properties for backward compatibility with + // 3.0.2 and earlier + val = applicationProperties.getProperty(parameterName.toLowerCase()); + + return val; + } + + /** + * {@inheritDoc} + * + * The default is false. + */ + @Override + public boolean isProductionMode() { + return productionMode; + } + + /** + * {@inheritDoc} + *

+ * The default is true. + */ + @Override + public boolean isXsrfProtectionEnabled() { + return xsrfProtectionEnabled; + } + + /** + * {@inheritDoc} + *

+ * The default interval is 3600 seconds (1 hour). + */ + @Override + public int getResourceCacheTime() { + return resourceCacheTime; + } + + /** + * {@inheritDoc} + *

+ * The default interval is 300 seconds (5 minutes). + */ + @Override + public int getHeartbeatInterval() { + return heartbeatInterval; + } + + @Override + public boolean isIdleUICleanupEnabled() { + return idleRootCleanupEnabled; + } + + /** + * Log a warning if Vaadin is not running in production mode. + */ + private void checkProductionMode() { + productionMode = getApplicationOrSystemProperty( + Constants.SERVLET_PARAMETER_PRODUCTION_MODE, "false").equals( + "true"); + if (!productionMode) { + getLogger().warning(Constants.NOT_PRODUCTION_MODE_INFO); + } + } + + /** + * Log a warning if cross-site request forgery protection is disabled. + */ + private void checkXsrfProtection() { + xsrfProtectionEnabled = !getApplicationOrSystemProperty( + Constants.SERVLET_PARAMETER_DISABLE_XSRF_PROTECTION, "false") + .equals("true"); + if (!xsrfProtectionEnabled) { + getLogger().warning(Constants.WARNING_XSRF_PROTECTION_DISABLED); + } + } + + /** + * Log a warning if resource cache time is set but is not an integer. + */ + private void checkResourceCacheTime() { + try { + resourceCacheTime = Integer + .parseInt(getApplicationOrSystemProperty( + Constants.SERVLET_PARAMETER_RESOURCE_CACHE_TIME, + "3600")); + } catch (NumberFormatException e) { + getLogger().warning( + Constants.WARNING_RESOURCE_CACHING_TIME_NOT_NUMERIC); + resourceCacheTime = 3600; + } + } + + private void checkHeartbeatInterval() { + try { + heartbeatInterval = Integer + .parseInt(getApplicationOrSystemProperty( + Constants.SERVLET_PARAMETER_HEARTBEAT_RATE, "300")); + } catch (NumberFormatException e) { + getLogger().warning( + Constants.WARNING_HEARTBEAT_INTERVAL_NOT_NUMERIC); + heartbeatInterval = 300; + } + } + + private void checkIdleUICleanup() { + idleRootCleanupEnabled = getApplicationOrSystemProperty( + Constants.SERVLET_PARAMETER_CLOSE_IDLE_UIS, "false").equals( + "true"); + } + + private Logger getLogger() { + return Logger.getLogger(getClass().getName()); + } + + @Override + public Properties getInitParameters() { + return applicationProperties; + } + +} diff --git a/server/src/com/vaadin/server/AbstractCommunicationManager.java b/server/src/com/vaadin/server/AbstractCommunicationManager.java index 253542db48..3d27dd18b9 100644 --- a/server/src/com/vaadin/server/AbstractCommunicationManager.java +++ b/server/src/com/vaadin/server/AbstractCommunicationManager.java @@ -1522,9 +1522,7 @@ public abstract class AbstractCommunicationManager implements Serializable { * @return false if the XSRF is turned off, true otherwise */ public boolean isXSRFEnabled(Application application) { - return !"true" - .equals(application - .getProperty(VaadinServlet.SERVLET_PARAMETER_DISABLE_XSRF_PROTECTION)); + return application.getConfiguration().isXsrfProtectionEnabled(); } /** diff --git a/server/src/com/vaadin/server/AbstractDeploymentConfiguration.java b/server/src/com/vaadin/server/AbstractDeploymentConfiguration.java index d1280d29ce..3d7efa6711 100644 --- a/server/src/com/vaadin/server/AbstractDeploymentConfiguration.java +++ b/server/src/com/vaadin/server/AbstractDeploymentConfiguration.java @@ -18,87 +18,28 @@ package com.vaadin.server; import java.lang.reflect.Constructor; import java.util.Iterator; -import java.util.Properties; import java.util.ServiceLoader; -import java.util.logging.Logger; public abstract class AbstractDeploymentConfiguration implements DeploymentConfiguration { - private final Class systemPropertyBaseClass; - private final Properties applicationProperties; private AddonContext addonContext; - private boolean productionMode; - private boolean xsrfProtectionEnabled; - private int resourceCacheTime; - private int heartbeatInterval; - private boolean idleRootCleanupEnabled; + private final ApplicationConfiguration applicationConfiguration; - public AbstractDeploymentConfiguration(Class systemPropertyBaseClass, - Properties applicationProperties) { - this.systemPropertyBaseClass = systemPropertyBaseClass; - this.applicationProperties = applicationProperties; - - checkProductionMode(); - checkXsrfProtection(); - checkResourceCacheTime(); - checkHeartbeatInterval(); - checkIdleUICleanup(); + public AbstractDeploymentConfiguration( + ApplicationConfiguration applicationConfiguration) { + this.applicationConfiguration = applicationConfiguration; } @Override - public String getApplicationOrSystemProperty(String propertyName, - String defaultValue) { - String val = null; - - // Try application properties - val = getApplicationProperty(propertyName); - if (val != null) { - return val; - } - - // Try system properties - val = getSystemProperty(propertyName); - if (val != null) { - return val; - } - - return defaultValue; - } - - /** - * Gets an system property value. - * - * @param parameterName - * the Name or the parameter. - * @return String value or null if not found - */ - protected String getSystemProperty(String parameterName) { - String val = null; - - String pkgName; - final Package pkg = systemPropertyBaseClass.getPackage(); - if (pkg != null) { - pkgName = pkg.getName(); - } else { - final String className = systemPropertyBaseClass.getName(); - pkgName = new String(className.toCharArray(), 0, - className.lastIndexOf('.')); - } - val = System.getProperty(pkgName + "." + parameterName); - if (val != null) { - return val; - } - - // Try lowercased system properties - val = System.getProperty(pkgName + "." + parameterName.toLowerCase()); - return val; + public ApplicationConfiguration getApplicationConfiguration() { + return applicationConfiguration; } @Override public ClassLoader getClassLoader() { - final String classLoaderName = getApplicationOrSystemProperty( - "ClassLoader", null); + final String classLoaderName = getApplicationConfiguration() + .getApplicationOrSystemProperty("ClassLoader", null); ClassLoader classLoader; if (classLoaderName == null) { classLoader = getClass().getClassLoader(); @@ -119,32 +60,6 @@ public abstract class AbstractDeploymentConfiguration implements return classLoader; } - /** - * Gets an application property value. - * - * @param parameterName - * the Name or the parameter. - * @return String value or null if not found - */ - protected String getApplicationProperty(String parameterName) { - - String val = applicationProperties.getProperty(parameterName); - if (val != null) { - return val; - } - - // Try lower case application properties for backward compatibility with - // 3.0.2 and earlier - val = applicationProperties.getProperty(parameterName.toLowerCase()); - - return val; - } - - @Override - public Properties getInitParameters() { - return applicationProperties; - } - @Override public Iterator getAddonContextListeners() { // Called once for init and then no more, so there's no point in caching @@ -163,111 +78,4 @@ public abstract class AbstractDeploymentConfiguration implements public AddonContext getAddonContext() { return addonContext; } - - /** - * {@inheritDoc} - * - * The default is false. - */ - @Override - public boolean isProductionMode() { - return productionMode; - } - - /** - * {@inheritDoc} - * - * The default is true. - */ - @Override - public boolean isXsrfProtectionEnabled() { - return xsrfProtectionEnabled; - } - - /** - * {@inheritDoc} - * - * The default interval is 3600 seconds (1 hour). - */ - @Override - public int getResourceCacheTime() { - return resourceCacheTime; - } - - /** - * {@inheritDoc} - * - * The default interval is 300 seconds (5 minutes). - */ - @Override - public int getHeartbeatInterval() { - return heartbeatInterval; - } - - @Override - public boolean isIdleUICleanupEnabled() { - return idleRootCleanupEnabled; - } - - /** - * Log a warning if Vaadin is not running in production mode. - */ - private void checkProductionMode() { - productionMode = getApplicationOrSystemProperty( - Constants.SERVLET_PARAMETER_PRODUCTION_MODE, "false").equals( - "true"); - if (!productionMode) { - getLogger().warning(Constants.NOT_PRODUCTION_MODE_INFO); - } - } - - /** - * Log a warning if cross-site request forgery protection is disabled. - */ - private void checkXsrfProtection() { - xsrfProtectionEnabled = !getApplicationOrSystemProperty( - Constants.SERVLET_PARAMETER_DISABLE_XSRF_PROTECTION, "false") - .equals("true"); - if (!xsrfProtectionEnabled) { - getLogger().warning(Constants.WARNING_XSRF_PROTECTION_DISABLED); - } - } - - /** - * Log a warning if resource cache time is set but is not an integer. - */ - private void checkResourceCacheTime() { - try { - resourceCacheTime = Integer - .parseInt(getApplicationOrSystemProperty( - Constants.SERVLET_PARAMETER_RESOURCE_CACHE_TIME, - "3600")); - } catch (NumberFormatException e) { - getLogger().warning( - Constants.WARNING_RESOURCE_CACHING_TIME_NOT_NUMERIC); - resourceCacheTime = 3600; - } - } - - private void checkHeartbeatInterval() { - try { - heartbeatInterval = Integer - .parseInt(getApplicationOrSystemProperty( - Constants.SERVLET_PARAMETER_HEARTBEAT_RATE, "300")); - } catch (NumberFormatException e) { - getLogger().warning( - Constants.WARNING_HEARTBEAT_INTERVAL_NOT_NUMERIC); - heartbeatInterval = 300; - } - } - - private void checkIdleUICleanup() { - idleRootCleanupEnabled = getApplicationOrSystemProperty( - Constants.SERVLET_PARAMETER_CLOSE_IDLE_UIS, "false").equals( - "true"); - } - - private Logger getLogger() { - return Logger.getLogger(getClass().getName()); - } } diff --git a/server/src/com/vaadin/server/ApplicationConfiguration.java b/server/src/com/vaadin/server/ApplicationConfiguration.java new file mode 100644 index 0000000000..edb33e6c39 --- /dev/null +++ b/server/src/com/vaadin/server/ApplicationConfiguration.java @@ -0,0 +1,99 @@ +/* + * Copyright 2011 Vaadin Ltd. + * + * 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 com.vaadin.server; + +import java.util.Properties; + + +/** + * A collection of properties configured for all applications as well as a way + * of accessing third party properties not explicitely supported by this class. + * + * @author Vaadin Ltd + * @version @VERSION@ + * @since 7.0.0 + */ +public interface ApplicationConfiguration { + /** + * Returns whether Vaadin is in production mode. + * + * @return true if in production mode, false otherwise. + */ + public boolean isProductionMode(); + + /** + * Returns whether cross-site request forgery protection is enabled. + * + * @return true if XSRF protection is enabled, false otherwise. + */ + public boolean isXsrfProtectionEnabled(); + + /** + * Returns the time resources can be cached in the browsers, in seconds. + * + * @return The resource cache time. + */ + public int getResourceCacheTime(); + + /** + * Returns the number of seconds between heartbeat requests of a UI, or a + * non-positive number if heartbeat is disabled. + * + * @return The time between heartbeats. + */ + public int getHeartbeatInterval(); + + /** + * Returns whether UIs that have no other activity than heartbeat requests + * should be closed after they have been idle the maximum inactivity time + * enforced by the session. + * + * @see ApplicationContext#getMaxInactiveInterval() + * + * @since 7.0.0 + * + * @return True if UIs receiving only heartbeat requests are eventually + * closed; false if heartbeat requests extend UI lifetime + * indefinitely. + */ + public boolean isIdleUICleanupEnabled(); + + /** + * Gets the properties configured for the deployment, e.g. as init + * parameters to the servlet or portlet. + * + * @return properties for the application. + */ + public Properties getInitParameters(); + + /** + * Gets a configured property. The properties are typically read from e.g. + * web.xml or from system properties of the JVM. + * + * @param propertyName + * The simple of the property, in some contexts, lookup might be + * performed using variations of the provided name. + * @param defaultValue + * the default value that should be used if no value has been + * defined + * @return the property value, or the passed default value if no property + * value is found + */ + public String getApplicationOrSystemProperty(String propertyName, + String defaultValue); + +} diff --git a/server/src/com/vaadin/server/BootstrapHandler.java b/server/src/com/vaadin/server/BootstrapHandler.java index 4d200b5063..a793214942 100644 --- a/server/src/com/vaadin/server/BootstrapHandler.java +++ b/server/src/com/vaadin/server/BootstrapHandler.java @@ -463,8 +463,8 @@ public abstract class BootstrapHandler implements RequestHandler { defaults.put("standalone", true); } - defaults.put("heartbeatInterval", - deploymentConfiguration.getHeartbeatInterval()); + defaults.put("heartbeatInterval", deploymentConfiguration + .getApplicationConfiguration().getHeartbeatInterval()); defaults.put("appUri", getAppUri(context)); diff --git a/server/src/com/vaadin/server/DefaultUIProvider.java b/server/src/com/vaadin/server/DefaultUIProvider.java index 93128aad28..b326e3229e 100644 --- a/server/src/com/vaadin/server/DefaultUIProvider.java +++ b/server/src/com/vaadin/server/DefaultUIProvider.java @@ -24,8 +24,8 @@ public class DefaultUIProvider extends AbstractUIProvider { @Override public Class getUIClass(Application application, WrappedRequest request) { - Object uiClassNameObj = application - .getProperty(Application.UI_PARAMETER); + Object uiClassNameObj = application.getConfiguration() + .getInitParameters().getProperty(Application.UI_PARAMETER); if (uiClassNameObj instanceof String) { String uiClassName = uiClassNameObj.toString(); diff --git a/server/src/com/vaadin/server/DeploymentConfiguration.java b/server/src/com/vaadin/server/DeploymentConfiguration.java index 6150edbafb..1f202eb923 100644 --- a/server/src/com/vaadin/server/DeploymentConfiguration.java +++ b/server/src/com/vaadin/server/DeploymentConfiguration.java @@ -18,7 +18,6 @@ package com.vaadin.server; import java.io.Serializable; import java.util.Iterator; -import java.util.Properties; import javax.portlet.PortletContext; import javax.servlet.ServletContext; @@ -81,22 +80,6 @@ public interface DeploymentConfiguration extends Serializable { */ public boolean isStandalone(WrappedRequest request); - /** - * Gets a configured property. The properties are typically read from e.g. - * web.xml or from system properties of the JVM. - * - * @param propertyName - * The simple of the property, in some contexts, lookup might be - * performed using variations of the provided name. - * @param defaultValue - * the default value that should be used if no value has been - * defined - * @return the property value, or the passed default value if no property - * value is found - */ - public String getApplicationOrSystemProperty(String propertyName, - String defaultValue); - /** * Get the class loader to use for loading classes loaded by name, e.g. * custom UI classes. null indicates that the default class @@ -122,12 +105,11 @@ public interface DeploymentConfiguration extends Serializable { public String getMimeType(String resourceName); /** - * Gets the properties configured for the deployment, e.g. as init - * parameters to the servlet or portlet. + * Gets the application configuration. * - * @return properties for the application. + * @return the application configuration */ - public Properties getInitParameters(); + public ApplicationConfiguration getApplicationConfiguration(); public Iterator getAddonContextListeners(); @@ -135,58 +117,6 @@ public interface DeploymentConfiguration extends Serializable { public void setAddonContext(AddonContext vaadinContext); - /** - * Returns whether Vaadin is in production mode. - * - * @since 7.0.0 - * - * @return true if in production mode, false otherwise. - */ - public boolean isProductionMode(); - - /** - * Returns whether cross-site request forgery protection is enabled. - * - * @since 7.0.0 - * - * @return true if XSRF protection is enabled, false otherwise. - */ - public boolean isXsrfProtectionEnabled(); - - /** - * Returns the time resources can be cached in the browsers, in seconds. - * - * @since 7.0.0 - * - * @return The resource cache time. - */ - public int getResourceCacheTime(); - - /** - * Returns the number of seconds between heartbeat requests of a UI, or a - * non-positive number if heartbeat is disabled. - * - * @since 7.0.0 - * - * @return The time between heartbeats. - */ - public int getHeartbeatInterval(); - - /** - * Returns whether UIs that have no other activity than heartbeat requests - * should be closed after they have been idle the maximum inactivity time - * enforced by the session. - * - * @see ApplicationContext#getMaxInactiveInterval() - * - * @since 7.0.0 - * - * @return True if UIs receiving only heartbeat requests are eventually - * closed; false if heartbeat requests extend UI lifetime - * indefinitely. - */ - public boolean isIdleUICleanupEnabled(); - /** * Gets the system messages object * diff --git a/server/src/com/vaadin/server/PortletCommunicationManager.java b/server/src/com/vaadin/server/PortletCommunicationManager.java index cb3a8eab80..f7214f108c 100644 --- a/server/src/com/vaadin/server/PortletCommunicationManager.java +++ b/server/src/com/vaadin/server/PortletCommunicationManager.java @@ -130,8 +130,9 @@ public class PortletCommunicationManager extends AbstractCommunicationManager { protected String getMainDivStyle(BootstrapContext context) { DeploymentConfiguration deploymentConfiguration = context .getRequest().getDeploymentConfiguration(); - return deploymentConfiguration.getApplicationOrSystemProperty( - VaadinPortlet.PORTLET_PARAMETER_STYLE, null); + return deploymentConfiguration.getApplicationConfiguration() + .getApplicationOrSystemProperty( + VaadinPortlet.PORTLET_PARAMETER_STYLE, null); } @Override diff --git a/server/src/com/vaadin/server/ServletPortletHelper.java b/server/src/com/vaadin/server/ServletPortletHelper.java index f9ca55b50e..26913d8ba8 100644 --- a/server/src/com/vaadin/server/ServletPortletHelper.java +++ b/server/src/com/vaadin/server/ServletPortletHelper.java @@ -1,6 +1,7 @@ package com.vaadin.server; import java.io.Serializable; +import java.util.Properties; import com.vaadin.Application; import com.vaadin.shared.ApplicationConstants; @@ -43,9 +44,10 @@ class ServletPortletHelper implements Serializable { static Class getApplicationClass( DeploymentConfiguration deploymentConfiguration) throws ApplicationClassException { - String applicationParameter = deploymentConfiguration - .getInitParameters().getProperty("application"); - String uiParameter = deploymentConfiguration.getInitParameters() + Properties initParameters = deploymentConfiguration + .getApplicationConfiguration().getInitParameters(); + String applicationParameter = initParameters.getProperty("application"); + String uiParameter = initParameters .getProperty(Application.UI_PARAMETER); ClassLoader classLoader = deploymentConfiguration.getClassLoader(); diff --git a/server/src/com/vaadin/server/VaadinPortlet.java b/server/src/com/vaadin/server/VaadinPortlet.java index 3d99cf603e..923fcd3b71 100644 --- a/server/src/com/vaadin/server/VaadinPortlet.java +++ b/server/src/com/vaadin/server/VaadinPortlet.java @@ -54,6 +54,7 @@ import com.liferay.portal.kernel.util.PortalClassInvoker; import com.liferay.portal.kernel.util.PropsUtil; import com.vaadin.Application; import com.vaadin.Application.ApplicationStartEvent; +import com.vaadin.DefaultApplicationConfiguration; import com.vaadin.server.AbstractCommunicationManager.Callback; import com.vaadin.server.ServletPortletHelper.ApplicationClassException; import com.vaadin.ui.UI; @@ -76,8 +77,8 @@ public class VaadinPortlet extends GenericPortlet implements Constants { private final VaadinPortlet portlet; public PortletDeploymentConfiguration(VaadinPortlet portlet, - Properties applicationProperties) { - super(portlet.getClass(), applicationProperties); + ApplicationConfiguration applicationConfiguration) { + super(applicationConfiguration); this.portlet = portlet; } @@ -88,8 +89,8 @@ public class VaadinPortlet extends GenericPortlet implements Constants { @Override public String getConfiguredWidgetset(WrappedRequest request) { - String widgetset = getApplicationOrSystemProperty( - PARAMETER_WIDGETSET, null); + String widgetset = getApplicationConfiguration() + .getApplicationOrSystemProperty(PARAMETER_WIDGETSET, null); if (widgetset == null) { // If no widgetset defined for the application, check the @@ -319,15 +320,23 @@ public class VaadinPortlet extends GenericPortlet implements Constants { config.getInitParameter(name)); } - deploymentConfiguration = createDeploymentConfiguration(applicationProperties); + ApplicationConfiguration applicationConfiguration = createApplicationConfiguration(applicationProperties); + deploymentConfiguration = createDeploymentConfiguration(applicationConfiguration); addonContext = new AddonContext(deploymentConfiguration); addonContext.init(); } - protected PortletDeploymentConfiguration createDeploymentConfiguration( + protected ApplicationConfiguration createApplicationConfiguration( Properties applicationProperties) { - return new PortletDeploymentConfiguration(this, applicationProperties); + return new DefaultApplicationConfiguration(getClass(), + applicationProperties); + } + + protected PortletDeploymentConfiguration createDeploymentConfiguration( + ApplicationConfiguration applicationConfiguration) { + return new PortletDeploymentConfiguration(this, + applicationConfiguration); } @Override @@ -384,16 +393,6 @@ public class VaadinPortlet extends GenericPortlet implements Constants { && request.getResourceID().equals("DUMMY"); } - /** - * Returns true if the portlet is running in production mode. Production - * mode disables all debug facilities. - * - * @return true if in production mode, false if in debug mode - */ - public boolean isProductionMode() { - return deploymentConfiguration.isProductionMode(); - } - protected void handleRequest(PortletRequest request, PortletResponse response) throws PortletException, IOException { RequestTimer requestTimer = new RequestTimer(); @@ -769,7 +768,8 @@ public class VaadinPortlet extends GenericPortlet implements Constants { application.setLocale(locale); // No application URL when running inside a portlet application.start(new ApplicationStartEvent(null, - getDeploymentConfiguration(), context)); + getDeploymentConfiguration().getApplicationConfiguration(), + context)); addonContext.fireApplicationStarted(application); } } diff --git a/server/src/com/vaadin/server/VaadinServlet.java b/server/src/com/vaadin/server/VaadinServlet.java index 29e473a16a..3cf2c645a0 100644 --- a/server/src/com/vaadin/server/VaadinServlet.java +++ b/server/src/com/vaadin/server/VaadinServlet.java @@ -46,6 +46,7 @@ import javax.servlet.http.HttpSession; import com.vaadin.Application; import com.vaadin.Application.ApplicationStartEvent; +import com.vaadin.DefaultApplicationConfiguration; import com.vaadin.server.AbstractCommunicationManager.Callback; import com.vaadin.server.ServletPortletHelper.ApplicationClassException; import com.vaadin.shared.ApplicationConstants; @@ -60,8 +61,8 @@ public class VaadinServlet extends HttpServlet implements Constants { private final VaadinServlet servlet; public ServletDeploymentConfiguration(VaadinServlet servlet, - Properties applicationProperties) { - super(servlet.getClass(), applicationProperties); + ApplicationConfiguration applicationProperties) { + super(applicationProperties); this.servlet = servlet; } @@ -75,8 +76,9 @@ public class VaadinServlet extends HttpServlet implements Constants { .cast(request); String staticFileLocation; // if property is defined in configurations, use that - staticFileLocation = getApplicationOrSystemProperty( - PARAMETER_VAADIN_RESOURCES, null); + staticFileLocation = getApplicationConfiguration() + .getApplicationOrSystemProperty(PARAMETER_VAADIN_RESOURCES, + null); if (staticFileLocation != null) { return staticFileLocation; } @@ -112,9 +114,10 @@ public class VaadinServlet extends HttpServlet implements Constants { @Override public String getConfiguredWidgetset(WrappedRequest request) { - return getApplicationOrSystemProperty( - VaadinServlet.PARAMETER_WIDGETSET, - VaadinServlet.DEFAULT_WIDGETSET); + return getApplicationConfiguration() + .getApplicationOrSystemProperty( + VaadinServlet.PARAMETER_WIDGETSET, + VaadinServlet.DEFAULT_WIDGETSET); } @Override @@ -201,15 +204,23 @@ public class VaadinServlet extends HttpServlet implements Constants { servletConfig.getInitParameter(name)); } - deploymentConfiguration = createDeploymentConfiguration(applicationProperties); + ApplicationConfiguration applicationConfiguration = createApplicationConfiguration(applicationProperties); + deploymentConfiguration = createDeploymentConfiguration(applicationConfiguration); addonContext = new AddonContext(deploymentConfiguration); addonContext.init(); } - protected ServletDeploymentConfiguration createDeploymentConfiguration( + protected ApplicationConfiguration createApplicationConfiguration( Properties applicationProperties) { - return new ServletDeploymentConfiguration(this, applicationProperties); + return new DefaultApplicationConfiguration(getClass(), + applicationProperties); + } + + protected ServletDeploymentConfiguration createDeploymentConfiguration( + ApplicationConfiguration applicationConfiguration) { + return new ServletDeploymentConfiguration(this, + applicationConfiguration); } @Override @@ -219,26 +230,6 @@ public class VaadinServlet extends HttpServlet implements Constants { addonContext.destroy(); } - /** - * Returns true if the servlet is running in production mode. Production - * mode disables all debug facilities. - * - * @return true if in production mode, false if in debug mode - */ - public boolean isProductionMode() { - return getDeploymentConfiguration().isProductionMode(); - } - - /** - * Returns the number of seconds the browser should cache a file. Default is - * 1 hour (3600 s). - * - * @return The number of seconds files are cached in the browser - */ - public int getResourceCacheTime() { - return getDeploymentConfiguration().getResourceCacheTime(); - } - /** * Receives standard HTTP requests from the public service method and * dispatches them. @@ -917,7 +908,8 @@ public class VaadinServlet extends HttpServlet implements Constants { Locale locale = request.getLocale(); application.setLocale(locale); application.start(new ApplicationStartEvent(applicationUrl, - getDeploymentConfiguration(), webApplicationContext)); + getDeploymentConfiguration().getApplicationConfiguration(), + webApplicationContext)); addonContext.fireApplicationStarted(application); } } @@ -1062,8 +1054,10 @@ public class VaadinServlet extends HttpServlet implements Constants { * cache timeout can be configured by setting the resourceCacheTime * parameter in web.xml */ + int resourceCacheTime = getDeploymentConfiguration() + .getApplicationConfiguration().getResourceCacheTime(); response.setHeader("Cache-Control", - "max-age= " + String.valueOf(getResourceCacheTime())); + "max-age= " + String.valueOf(resourceCacheTime)); } // Write the resource to the client. diff --git a/server/tests/src/com/vaadin/server/TestAbstractApplicationServletStaticFilesLocation.java b/server/tests/src/com/vaadin/server/TestAbstractApplicationServletStaticFilesLocation.java index b936cae1a5..2aa8d04364 100644 --- a/server/tests/src/com/vaadin/server/TestAbstractApplicationServletStaticFilesLocation.java +++ b/server/tests/src/com/vaadin/server/TestAbstractApplicationServletStaticFilesLocation.java @@ -13,6 +13,7 @@ import javax.servlet.http.HttpServletRequest; import junit.framework.TestCase; +import com.vaadin.DefaultApplicationConfiguration; import com.vaadin.server.VaadinServlet.ServletDeploymentConfiguration; public class TestAbstractApplicationServletStaticFilesLocation extends TestCase { @@ -32,7 +33,8 @@ public class TestAbstractApplicationServletStaticFilesLocation extends TestCase .getDeclaredField("deploymentConfiguration"); f.setAccessible(true); f.set(servlet, new ServletDeploymentConfiguration(servlet, - new Properties())); + new DefaultApplicationConfiguration(servlet.getClass(), + new Properties()))); } diff --git a/server/tests/src/com/vaadin/tests/server/component/root/CustomUIClassLoader.java b/server/tests/src/com/vaadin/tests/server/component/root/CustomUIClassLoader.java index 89da55a31f..aef35084f8 100644 --- a/server/tests/src/com/vaadin/tests/server/component/root/CustomUIClassLoader.java +++ b/server/tests/src/com/vaadin/tests/server/component/root/CustomUIClassLoader.java @@ -10,6 +10,8 @@ import org.easymock.EasyMock; import com.vaadin.Application; import com.vaadin.Application.ApplicationStartEvent; +import com.vaadin.DefaultApplicationConfiguration; +import com.vaadin.server.ApplicationConfiguration; import com.vaadin.server.DefaultUIProvider; import com.vaadin.server.DeploymentConfiguration; import com.vaadin.server.WrappedRequest; @@ -62,15 +64,11 @@ public class CustomUIClassLoader extends TestCase { assertEquals(MyUI.class, uiClass); } - private static DeploymentConfiguration createConfigurationMock() { - DeploymentConfiguration configurationMock = EasyMock - .createMock(DeploymentConfiguration.class); - EasyMock.expect(configurationMock.isProductionMode()).andReturn(false); - EasyMock.expect(configurationMock.getInitParameters()).andReturn( - new Properties()); - - EasyMock.replay(configurationMock); - return configurationMock; + private static ApplicationConfiguration createConfigurationMock() { + Properties properties = new Properties(); + properties.put(Application.UI_PARAMETER, MyUI.class.getName()); + return new DefaultApplicationConfiguration(CustomUIClassLoader.class, + properties); } private static WrappedRequest createRequestMock(ClassLoader classloader) { @@ -117,12 +115,8 @@ public class CustomUIClassLoader extends TestCase { private Application createStubApplication() { return new Application() { @Override - public String getProperty(String name) { - if (name.equals(UI_PARAMETER)) { - return MyUI.class.getName(); - } else { - return super.getProperty(name); - } + public ApplicationConfiguration getConfiguration() { + return createConfigurationMock(); } }; } diff --git a/uitest/src/com/vaadin/launcher/ApplicationRunnerServlet.java b/uitest/src/com/vaadin/launcher/ApplicationRunnerServlet.java index 11685033a9..3d63c7dfb9 100644 --- a/uitest/src/com/vaadin/launcher/ApplicationRunnerServlet.java +++ b/uitest/src/com/vaadin/launcher/ApplicationRunnerServlet.java @@ -21,7 +21,6 @@ import java.net.MalformedURLException; import java.net.URL; import java.util.Collections; import java.util.LinkedHashSet; -import java.util.Properties; import java.util.logging.Level; import java.util.logging.Logger; @@ -32,6 +31,7 @@ import javax.servlet.http.HttpServletResponse; import com.vaadin.Application; import com.vaadin.server.AbstractUIProvider; +import com.vaadin.server.ApplicationConfiguration; import com.vaadin.server.VaadinServlet; import com.vaadin.server.WrappedHttpServletRequest; import com.vaadin.server.WrappedRequest; @@ -259,8 +259,9 @@ public class ApplicationRunnerServlet extends VaadinServlet { @Override protected ServletDeploymentConfiguration createDeploymentConfiguration( - Properties applicationProperties) { - return new ServletDeploymentConfiguration(this, applicationProperties) { + ApplicationConfiguration applicationConfiguration) { + return new ServletDeploymentConfiguration(this, + applicationConfiguration) { @Override public String getStaticFileLocation(WrappedRequest request) { URIS uris = getApplicationRunnerURIs(WrappedHttpServletRequest diff --git a/uitest/src/com/vaadin/tests/util/SampleDirectory.java b/uitest/src/com/vaadin/tests/util/SampleDirectory.java index ef20da788d..e15f0ccfe3 100644 --- a/uitest/src/com/vaadin/tests/util/SampleDirectory.java +++ b/uitest/src/com/vaadin/tests/util/SampleDirectory.java @@ -52,8 +52,10 @@ public class SampleDirectory { // cannot access example directory, possible security issue with // Application Server or Servlet Container // Try to read sample directory from web.xml parameter - if (application.getProperty("sampleDirectory") != null) { - file = new File(application.getProperty("sampleDirectory")); + String sampleDirProperty = application.getConfiguration() + .getInitParameters().getProperty("sampleDirectory"); + if (sampleDirProperty != null) { + file = new File(sampleDirProperty); if ((file != null) && (file.canRead()) && (file.getAbsolutePath() != null)) { // Success using property @@ -61,7 +63,7 @@ public class SampleDirectory { } // Failure using property errorMessage += "Failed also to access sample directory [" - + application.getProperty("sampleDirectory") + + sampleDirProperty + "] defined in sampleDirectory property."; } else { // Failure using application context base dir, no property set