]> source.dussan.org Git - vaadin-framework.git/commitdiff
Extract ApplicationConfiguration from DeploymentConfiguration (#9382)
authorLeif Åstrand <leif@vaadin.com>
Tue, 4 Sep 2012 13:48:13 +0000 (16:48 +0300)
committerLeif Åstrand <leif@vaadin.com>
Wed, 5 Sep 2012 08:39:35 +0000 (11:39 +0300)
16 files changed:
server/src/com/vaadin/Application.java
server/src/com/vaadin/DefaultApplicationConfiguration.java [new file with mode: 0644]
server/src/com/vaadin/server/AbstractCommunicationManager.java
server/src/com/vaadin/server/AbstractDeploymentConfiguration.java
server/src/com/vaadin/server/ApplicationConfiguration.java [new file with mode: 0644]
server/src/com/vaadin/server/BootstrapHandler.java
server/src/com/vaadin/server/DefaultUIProvider.java
server/src/com/vaadin/server/DeploymentConfiguration.java
server/src/com/vaadin/server/PortletCommunicationManager.java
server/src/com/vaadin/server/ServletPortletHelper.java
server/src/com/vaadin/server/VaadinPortlet.java
server/src/com/vaadin/server/VaadinServlet.java
server/tests/src/com/vaadin/server/TestAbstractApplicationServletStaticFilesLocation.java
server/tests/src/com/vaadin/tests/server/component/root/CustomUIClassLoader.java
uitest/src/com/vaadin/launcher/ApplicationRunnerServlet.java
uitest/src/com/vaadin/tests/util/SampleDirectory.java

index 088934c5f9030219216f541aa4f2b6ba5a2c3d6d..745d0ad784fa287b38eb4744ec46055711322111 100644 (file)
@@ -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.
-     * 
-     * <p>
-     * See {@link #start(URL, Properties, ApplicationContext)} how properties
-     * are defined.
-     * </p>
-     * 
-     * @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 <code>null</code> 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 (file)
index 0000000..2e22671
--- /dev/null
@@ -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}
+     * <p>
+     * The default is true.
+     */
+    @Override
+    public boolean isXsrfProtectionEnabled() {
+        return xsrfProtectionEnabled;
+    }
+
+    /**
+     * {@inheritDoc}
+     * <p>
+     * The default interval is 3600 seconds (1 hour).
+     */
+    @Override
+    public int getResourceCacheTime() {
+        return resourceCacheTime;
+    }
+
+    /**
+     * {@inheritDoc}
+     * <p>
+     * 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;
+    }
+
+}
index 253542db48fdb241fce5c4b88f8418cad9a59eb8..3d27dd18b91d6080a4cbd93388127b9907ea4b1a 100644 (file)
@@ -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();
     }
 
     /**
index d1280d29ce646f7563f1ae53305e770510060086..3d7efa6711f552622fb43ee4b146d72775b1c6db 100644 (file)
@@ -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<AddonContextListener> 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 (file)
index 0000000..edb33e6
--- /dev/null
@@ -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);
+
+}
index 4d200b50634c3fda638550f30c05b1ae117138a8..a793214942d2bed91d841217a13d0575cae1d3b3 100644 (file)
@@ -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));
 
index 93128aad2898089cb5428c12b0981e9f2073dae8..b326e3229e2cfcccb464ddaeee656e5df07da4bb 100644 (file)
@@ -24,8 +24,8 @@ public class DefaultUIProvider extends AbstractUIProvider {
     @Override
     public Class<? extends UI> 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();
index 6150edbafb52588e16d8fd469352cbe246e006ac..1f202eb92372ad6e8468bd078f7c8edefe87e281 100644 (file)
@@ -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. <code>null</code> 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<AddonContextListener> 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
      * 
index cb3a8eab80522ccdd4d6aec1f01afce46104930c..f7214f108cfbd6c8162ee4f09b88dc8818bf665a 100644 (file)
@@ -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
index f9ca55b50e0a1d5a4e6a56c72c44bd5f8c5ba8ae..26913d8ba881542a23ec831e742c070e1c96344a 100644 (file)
@@ -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<? extends Application> 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();
 
index 3d99cf603e6db3cc917f4b55adf82b2ee90da028..923fcd3b71ebf02fe13bf1f9df3a95ad0fc00a70 100644 (file)
@@ -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);
         }
     }
index 29e473a16a97820b369d24e2deb38a155fbcd258..3cf2c645a04800c79ffe30aa0573c956ff783761 100644 (file)
@@ -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.
index b936cae1a5f13efd7e6431880b475d9bd991dca5..2aa8d0436441b8f6d7680beabbeaaa074fa62a30 100644 (file)
@@ -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())));
 
     }
 
index 89da55a31f163d29c01beaca8032ef9f505785d7..aef35084f85b2f9ff2108417c819a292f32fd258 100644 (file)
@@ -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();
             }
         };
     }
index 11685033a950785f3fd73135ca61900b6a6bdf5b..3d63c7dfb97ecf1ab423861768e51f5baada1ca0 100644 (file)
@@ -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
index ef20da788dd2e62cb952a263b784765bdbe87354..e15f0ccfe316a7130d178d01dda0ca517eb714ac 100644 (file)
@@ -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 <b>["
-                        + application.getProperty("sampleDirectory")
+                        + sampleDirProperty
                         + "]</b> defined in <b>sampleDirectory property</b>.";
             } else {
                 // Failure using application context base dir, no property set