diff options
8 files changed, 120 insertions, 18 deletions
diff --git a/WebContent/WEB-INF/web.xml b/WebContent/WEB-INF/web.xml index e8ac6b7797..46ace4520b 100644 --- a/WebContent/WEB-INF/web.xml +++ b/WebContent/WEB-INF/web.xml @@ -49,6 +49,23 @@ </servlet> <servlet> + <!-- Non-default values for testing purposes --> + <init-param> + <param-name>heartbeatInterval</param-name> + <param-value>301</param-value> + </init-param> + <init-param> + <param-name>resourceCacheTime</param-name> + <param-value>3601</param-value> + </init-param> + <init-param> + <param-name>closeIdleUIs</param-name> + <param-value>true</param-value> + </init-param> + <init-param> + <param-name>testParam</param-name> + <param-value>42</param-value> + </init-param> <servlet-name>VaadinApplicationRunner</servlet-name> <servlet-class>com.vaadin.launcher.ApplicationRunnerServlet</servlet-class> </servlet> diff --git a/client/src/com/vaadin/client/ui/AbstractComponentConnector.java b/client/src/com/vaadin/client/ui/AbstractComponentConnector.java index 6ff51b3766..8b6c4fb8aa 100644 --- a/client/src/com/vaadin/client/ui/AbstractComponentConnector.java +++ b/client/src/com/vaadin/client/ui/AbstractComponentConnector.java @@ -273,7 +273,7 @@ public abstract class AbstractComponentConnector extends AbstractConnector if (state.primaryStyleName != null) { /* * We overwrite the widgets primary stylename if state defines a - * primary stylename. Clears all previous stylenames. + * primary stylename. */ getWidget().setStylePrimaryName(state.primaryStyleName); } @@ -293,24 +293,24 @@ public abstract class AbstractComponentConnector extends AbstractConnector // add additional user defined style names as class names, prefixed with // component default class name. remove nonexistent style names. if (ComponentStateUtil.hasStyles(state)) { - // add new style names - List<String> newStyles = new ArrayList<String>(); - newStyles.addAll(state.styles); - newStyles.removeAll(styleNames); - for (String newStyle : newStyles) { - setWidgetStyleName(newStyle, true); - setWidgetStyleNameWithPrefix(primaryStyleName + "-", newStyle, - true); - } - // remove nonexistent style names - styleNames.removeAll(state.styles); + + // Remove all old stylenames for (String oldStyle : styleNames) { setWidgetStyleName(oldStyle, false); setWidgetStyleNameWithPrefix(primaryStyleName + "-", oldStyle, false); } + + // add new style names + for (String newStyle : state.styles) { + setWidgetStyleName(newStyle, true); + setWidgetStyleNameWithPrefix(primaryStyleName + "-", newStyle, + true); + } + styleNames.clear(); styleNames.addAll(state.styles); + } else { // remove all old style names for (String oldStyle : styleNames) { diff --git a/server/src/com/vaadin/DefaultDeploymentConfiguration.java b/server/src/com/vaadin/DefaultDeploymentConfiguration.java index fed558c5b5..a9818f2c8b 100644 --- a/server/src/com/vaadin/DefaultDeploymentConfiguration.java +++ b/server/src/com/vaadin/DefaultDeploymentConfiguration.java @@ -219,7 +219,7 @@ public class DefaultDeploymentConfiguration implements DeploymentConfiguration { try { heartbeatInterval = Integer .parseInt(getApplicationOrSystemProperty( - Constants.SERVLET_PARAMETER_HEARTBEAT_RATE, "300")); + Constants.SERVLET_PARAMETER_HEARTBEAT_INTERVAL, "300")); } catch (NumberFormatException e) { getLogger().warning( Constants.WARNING_HEARTBEAT_INTERVAL_NOT_NUMERIC); diff --git a/server/src/com/vaadin/navigator/Navigator.java b/server/src/com/vaadin/navigator/Navigator.java index 72d6c65fd2..4b2474a0f2 100644 --- a/server/src/com/vaadin/navigator/Navigator.java +++ b/server/src/com/vaadin/navigator/Navigator.java @@ -543,6 +543,16 @@ public class Navigator implements Serializable { } /** + * Returns the current navigation state reported by this Navigator's + * {@link NavigationStateManager}. + * + * @return The navigation state. + */ + public String getState() { + return getStateManager().getState(); + } + + /** * Return the ViewDisplay used by the navigator. Unless another display is * specified, a {@link SimpleViewDisplay} (which is a {@link Component}) is * used by default. diff --git a/server/src/com/vaadin/server/Constants.java b/server/src/com/vaadin/server/Constants.java index 60f7aa03d0..b6bfcc0495 100644 --- a/server/src/com/vaadin/server/Constants.java +++ b/server/src/com/vaadin/server/Constants.java @@ -61,7 +61,7 @@ public interface Constants { static final String SERVLET_PARAMETER_PRODUCTION_MODE = "productionMode"; static final String SERVLET_PARAMETER_DISABLE_XSRF_PROTECTION = "disable-xsrf-protection"; static final String SERVLET_PARAMETER_RESOURCE_CACHE_TIME = "resourceCacheTime"; - static final String SERVLET_PARAMETER_HEARTBEAT_RATE = "heartbeatRate"; + static final String SERVLET_PARAMETER_HEARTBEAT_INTERVAL = "heartbeatInterval"; static final String SERVLET_PARAMETER_CLOSE_IDLE_UIS = "closeIdleUIs"; static final String SERVLET_PARAMETER_UI_PROVIDER = "UIProvider"; diff --git a/server/tests/src/com/vaadin/tests/server/navigator/NavigatorTest.java b/server/tests/src/com/vaadin/tests/server/navigator/NavigatorTest.java index 7e21b751dc..218791e454 100644 --- a/server/tests/src/com/vaadin/tests/server/navigator/NavigatorTest.java +++ b/server/tests/src/com/vaadin/tests/server/navigator/NavigatorTest.java @@ -228,21 +228,24 @@ public class NavigatorTest extends TestCase { view1.enter(eventParametersEqual("")); display.showView(view1); manager.setState("test1"); + EasyMock.expect(manager.getState()).andReturn("test1"); EasyMock.expect(provider.getViewName("test2/")).andReturn("test2"); EasyMock.expect(provider.getView("test2")).andReturn(view2); - EasyMock.expect(manager.getState()).andReturn("view1"); + EasyMock.expect(manager.getState()).andReturn("test1"); view2.enter(eventParametersEqual("")); display.showView(view2); manager.setState("test2"); + EasyMock.expect(manager.getState()).andReturn("test2"); EasyMock.expect(provider.getViewName("test1/params")) .andReturn("test1"); EasyMock.expect(provider.getView("test1")).andReturn(view1); - EasyMock.expect(manager.getState()).andReturn("view2"); + EasyMock.expect(manager.getState()).andReturn("test2"); view1.enter(eventParametersEqual("params")); display.showView(view1); manager.setState("test1/params"); + EasyMock.expect(manager.getState()).andReturn("test1/params"); control.replay(); @@ -251,8 +254,13 @@ public class NavigatorTest extends TestCase { navigator.addProvider(provider); navigator.navigateTo("test1"); + assertEquals("test1", navigator.getState()); + navigator.navigateTo("test2/"); + assertEquals("test2", navigator.getState()); + navigator.navigateTo("test1/params"); + assertEquals("test1/params", navigator.getState()); } public void testMainView() { @@ -284,7 +292,7 @@ public class NavigatorTest extends TestCase { EasyMock.expect(provider.getViewName("test1/params")) .andReturn("test1"); EasyMock.expect(provider.getView("test1")).andReturn(view1); - EasyMock.expect(manager.getState()).andReturn("view2"); + EasyMock.expect(manager.getState()).andReturn("test2"); view1.enter(eventParametersEqual("params")); display.showView(view1); manager.setState("test1/params"); @@ -330,7 +338,7 @@ public class NavigatorTest extends TestCase { ViewChangeEvent event2 = new ViewChangeEvent(navigator, view1, view2, "test2", ""); listener.addExpectedIsViewChangeAllowed(event2, true); - EasyMock.expect(manager.getState()).andReturn("view1"); + EasyMock.expect(manager.getState()).andReturn("test1"); view2.enter(eventParametersEqual("")); display.showView(view2); manager.setState("test2"); diff --git a/uitest/src/com/vaadin/tests/application/DeploymentConfigurationTest.html b/uitest/src/com/vaadin/tests/application/DeploymentConfigurationTest.html new file mode 100644 index 0000000000..f5ad0987aa --- /dev/null +++ b/uitest/src/com/vaadin/tests/application/DeploymentConfigurationTest.html @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head profile="http://selenium-ide.openqa.org/profiles/test-case"> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> +<link rel="selenium.base" href="http://localhost:8070/" /> +<title>DeploymentConfigurationTest</title> +</head> +<body> +<table cellpadding="1" cellspacing="1" border="1"> +<thead> +<tr><td rowspan="1" colspan="3">DeploymentConfigurationTest</td></tr> +</thead><tbody> +<tr> + <td>open</td> + <td>/run/com.vaadin.tests.application.DeploymentConfigurationTest?restartApplication</td> + <td></td> +</tr> +<tr> + <td>assertTextPresent</td> + <td>exact:closeIdleUIs: true</td> + <td></td> +</tr> +<tr> + <td>assertTextPresent</td> + <td>exact:productionMode: false</td> + <td></td> +</tr> +<tr> + <td>assertTextPresent</td> + <td>exact:testParam: 42</td> + <td></td> +</tr> +<tr> + <td>assertTextPresent</td> + <td>exact:heartbeatInterval: 301</td> + <td></td> +</tr> +<tr> + <td>assertTextPresent</td> + <td>exact:resourceCacheTime: 3601</td> + <td></td> +</tr> + +</tbody></table> +</body> +</html> diff --git a/uitest/src/com/vaadin/tests/application/DeploymentConfigurationTest.java b/uitest/src/com/vaadin/tests/application/DeploymentConfigurationTest.java new file mode 100644 index 0000000000..9c89254bd7 --- /dev/null +++ b/uitest/src/com/vaadin/tests/application/DeploymentConfigurationTest.java @@ -0,0 +1,20 @@ +package com.vaadin.tests.application; + +import java.util.Properties; + +import com.vaadin.server.VaadinRequest; +import com.vaadin.ui.Label; +import com.vaadin.ui.UI; + +public class DeploymentConfigurationTest extends UI { + + @Override + protected void init(VaadinRequest request) { + Properties params = getSession().getConfiguration().getInitParameters(); + + for (Object key : params.keySet()) { + addComponent(new Label(key + ": " + + params.getProperty((String) key))); + } + } +} |