diff options
16 files changed, 674 insertions, 70 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/client/src/com/vaadin/client/ui/menubar/MenuBarConnector.java b/client/src/com/vaadin/client/ui/menubar/MenuBarConnector.java index 29030fbd7d..817e027283 100644 --- a/client/src/com/vaadin/client/ui/menubar/MenuBarConnector.java +++ b/client/src/com/vaadin/client/ui/menubar/MenuBarConnector.java @@ -96,7 +96,7 @@ public class MenuBarConnector extends AbstractComponentConnector implements getWidget().collapsedRootItems = new VMenuBar(true, getWidget()); getWidget().moreItem.setSubMenu(getWidget().collapsedRootItems); - getWidget().moreItem.addStyleName(VMenuBar.CLASSNAME + getWidget().moreItem.addStyleName(getWidget().getStylePrimaryName() + "-more-menuitem"); } diff --git a/client/src/com/vaadin/client/ui/menubar/VMenuBar.java b/client/src/com/vaadin/client/ui/menubar/VMenuBar.java index a4878724a8..e38e6816ad 100644 --- a/client/src/com/vaadin/client/ui/menubar/VMenuBar.java +++ b/client/src/com/vaadin/client/ui/menubar/VMenuBar.java @@ -64,6 +64,7 @@ public class VMenuBar extends SimpleFocusablePanel implements /** Set the CSS class name to allow styling. */ public static final String CLASSNAME = "v-menubar"; + public static final String SUBMENU_CLASSNAME_PREFIX = "-submenu"; /** For server connections **/ protected String uidlId; @@ -128,19 +129,51 @@ public class VMenuBar extends SimpleFocusablePanel implements items = new ArrayList<CustomMenuItem>(); popup = null; visibleChildMenu = null; + this.subMenu = subMenu; containerElement = getElement(); - if (!subMenu) { + sinkEvents(Event.ONCLICK | Event.ONMOUSEOVER | Event.ONMOUSEOUT + | Event.ONLOAD); + + if (parentMenu == null) { + // Root menu setStyleName(CLASSNAME); } else { - setStyleName(CLASSNAME + "-submenu"); - this.parentMenu = parentMenu; + // Child menus inherits style name + setStyleName(parentMenu.getStyleName()); } - this.subMenu = subMenu; + } - sinkEvents(Event.ONCLICK | Event.ONMOUSEOVER | Event.ONMOUSEOUT - | Event.ONLOAD); + @Override + public void setStyleName(String style) { + super.setStyleName(style); + updateStyleNames(); + } + + @Override + public void setStylePrimaryName(String style) { + super.setStylePrimaryName(style); + updateStyleNames(); + } + + protected void updateStyleNames() { + String primaryStyleName = getParentMenu() != null ? getParentMenu() + .getStylePrimaryName() : getStylePrimaryName(); + + // Reset the style name for all the items + for (CustomMenuItem item : items) { + item.setStyleName(primaryStyleName + "-menuitem"); + } + + if (subMenu + && !getStylePrimaryName().endsWith(SUBMENU_CLASSNAME_PREFIX)) { + /* + * Sub-menus should get the sub-menu prefix + */ + super.setStylePrimaryName(primaryStyleName + + SUBMENU_CLASSNAME_PREFIX); + } } @Override @@ -178,11 +211,11 @@ public class VMenuBar extends SimpleFocusablePanel implements // Add submenu indicator if (item.getChildCount() > 0) { String bgStyle = ""; - itemHTML.append("<span class=\"" + CLASSNAME + itemHTML.append("<span class=\"" + getStylePrimaryName() + "-submenu-indicator\"" + bgStyle + ">►</span>"); } - itemHTML.append("<span class=\"" + CLASSNAME + itemHTML.append("<span class=\"" + getStylePrimaryName() + "-menuitem-caption\">"); if (item.hasAttribute("icon")) { itemHTML.append("<img src=\"" @@ -261,7 +294,6 @@ public class VMenuBar extends SimpleFocusablePanel implements CustomMenuItem item = GWT.create(CustomMenuItem.class); item.setHTML(html); item.setCommand(cmd); - addItem(item); return item; } @@ -528,6 +560,18 @@ public class VMenuBar extends SimpleFocusablePanel implements popup = new VOverlay(true, false, true); + /* + * Use parents primary style name if possible and remove the submenu + * prefix if needed + */ + String primaryStyleName = parentMenu != null ? parentMenu + .getStylePrimaryName() : getStylePrimaryName(); + if (subMenu) { + primaryStyleName = primaryStyleName.replace( + SUBMENU_CLASSNAME_PREFIX, ""); + } + popup.setStyleName(primaryStyleName + "-popup"); + // Setting owner and handlers to support tooltips. Needed for tooltip // handling of overlay widgets (will direct queries to parent menu) if (parentMenu == null) { @@ -543,7 +587,6 @@ public class VMenuBar extends SimpleFocusablePanel implements client.getVTooltip().connectHandlersToWidget(popup); } - popup.setStyleName(CLASSNAME + "-popup"); popup.setWidget(item.getSubMenu()); popup.addCloseHandler(this); popup.addAutoHidePartner(item.getElement()); @@ -737,6 +780,7 @@ public class VMenuBar extends SimpleFocusablePanel implements protected boolean isSeparator = false; protected boolean checkable = false; protected boolean checked = false; + protected boolean selected = false; protected String description = null; /** @@ -765,48 +809,31 @@ public class VMenuBar extends SimpleFocusablePanel implements setHTML(html); setCommand(cmd); setSelected(false); - setStyleName(CLASSNAME + "-menuitem"); + } + @Override + public void setStyleName(String style) { + super.setStyleName(style); + updateStyleNames(); + + // Pass stylename down to submenus + if (getSubMenu() != null) { + getSubMenu().setStyleName(style); + } } public void setSelected(boolean selected) { - if (selected && isSelectable()) { - addStyleDependentName("selected"); - // needed for IE6 to have a single style name to match for an - // element - // TODO Can be optimized now that IE6 is not supported any more - if (checkable) { - if (checked) { - removeStyleDependentName("selected-unchecked"); - addStyleDependentName("selected-checked"); - } else { - removeStyleDependentName("selected-checked"); - addStyleDependentName("selected-unchecked"); - } - } - } else { - removeStyleDependentName("selected"); - // needed for IE6 to have a single style name to match for an - // element - removeStyleDependentName("selected-checked"); - removeStyleDependentName("selected-unchecked"); - } + this.selected = selected; + updateStyleNames(); } public void setChecked(boolean checked) { if (checkable && !isSeparator) { this.checked = checked; - - if (checked) { - addStyleDependentName("checked"); - removeStyleDependentName("unchecked"); - } else { - addStyleDependentName("unchecked"); - removeStyleDependentName("checked"); - } } else { this.checked = false; } + updateStyleNames(); } public boolean isChecked() { @@ -840,6 +867,65 @@ public class VMenuBar extends SimpleFocusablePanel implements public void setParentMenu(VMenuBar parentMenu) { this.parentMenu = parentMenu; + updateStyleNames(); + } + + protected void updateStyleNames() { + if (parentMenu == null) { + // Style names depend on the parent menu's primary style name so + // don't do updates until the item has a parent + return; + } + + String primaryStyleName = parentMenu.getStylePrimaryName(); + if (parentMenu.subMenu) { + primaryStyleName = primaryStyleName.replace( + SUBMENU_CLASSNAME_PREFIX, ""); + } + + if (isSeparator) { + super.setStyleName(primaryStyleName + "-separator"); + } else { + super.setStyleName(primaryStyleName + "-menuitem"); + } + + if (enabled) { + removeStyleDependentName("disabled"); + } else { + addStyleDependentName("disabled"); + } + + if (selected && isSelectable()) { + addStyleDependentName("selected"); + // needed for IE6 to have a single style name to match for an + // element + // TODO Can be optimized now that IE6 is not supported any more + if (checkable) { + if (checked) { + removeStyleDependentName("selected-unchecked"); + addStyleDependentName("selected-checked"); + } else { + removeStyleDependentName("selected-checked"); + addStyleDependentName("selected-unchecked"); + } + } + } else { + removeStyleDependentName("selected"); + // needed for IE6 to have a single style name to match for an + // element + removeStyleDependentName("selected-checked"); + removeStyleDependentName("selected-unchecked"); + } + + if (checkable && !isSeparator) { + if (checked) { + addStyleDependentName("checked"); + removeStyleDependentName("unchecked"); + } else { + addStyleDependentName("unchecked"); + removeStyleDependentName("checked"); + } + } } public VMenuBar getParentMenu() { @@ -881,11 +967,7 @@ public class VMenuBar extends SimpleFocusablePanel implements public void setEnabled(boolean enabled) { this.enabled = enabled; - if (enabled) { - removeStyleDependentName("disabled"); - } else { - addStyleDependentName("disabled"); - } + updateStyleNames(); } public boolean isEnabled() { @@ -894,10 +976,8 @@ public class VMenuBar extends SimpleFocusablePanel implements private void setSeparator(boolean separator) { isSeparator = separator; - if (separator) { - setStyleName(CLASSNAME + "-separator"); - } else { - setStyleName(CLASSNAME + "-menuitem"); + updateStyleNames(); + if (!separator) { setEnabled(enabled); } } 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))); + } + } +} diff --git a/uitest/src/com/vaadin/tests/components/menubar/MenuBarPrimaryStylenames.html b/uitest/src/com/vaadin/tests/components/menubar/MenuBarPrimaryStylenames.html new file mode 100644 index 0000000000..1232418978 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/menubar/MenuBarPrimaryStylenames.html @@ -0,0 +1,217 @@ +<?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:8888/" /> +<title>New Test</title> +</head> +<body> +<table cellpadding="1" cellspacing="1" border="1"> +<thead> +<tr><td rowspan="1" colspan="3">New Test</td></tr> +</thead><tbody> +<tr> + <td>open</td> + <td>/run/com.vaadin.tests.components.menubar.MenuBarPrimaryStylenames?restartApplication</td> + <td></td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]</td> + <td>my-menu-bar</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]/domChild[0]</td> + <td>my-menu-bar-menuitem</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]/domChild[1]</td> + <td>my-menu-bar-menuitem</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]/domChild[1]/domChild[0]</td> + <td>my-menu-bar-submenu-indicator</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]/domChild[1]/domChild[1]</td> + <td>my-menu-bar-menuitem-caption</td> +</tr> +<tr> + <td>mouseClick</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]#item0</td> + <td>24,9</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::Root/VOverlay[0]/</td> + <td>my-menu-bar-popup</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::Root/VOverlay[0]/VMenuBar[0]</td> + <td>my-menu-bar-submenu</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::Root/VOverlay[0]/VMenuBar[0]/domChild[0]</td> + <td>my-menu-bar-menuitem</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::Root/VOverlay[0]/VMenuBar[0]/domChild[0]/domChild[0]</td> + <td>my-menu-bar-menuitem-caption</td> +</tr> +<tr> + <td>mouseClick</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]#item0</td> + <td>24,9</td> +</tr> +<tr> + <td>mouseClick</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]#item1</td> + <td>44,6</td> +</tr> +<tr> + <td>pressSpecialKey</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]</td> + <td>down</td> +</tr> +<tr> + <td>pressSpecialKey</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]</td> + <td>right</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::Root/VOverlay[1]</td> + <td>my-menu-bar-popup</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::Root/VOverlay[1]/VMenuBar[0]</td> + <td>my-menu-bar-submenu</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::Root/VOverlay[1]/VMenuBar[0]/domChild[0]</td> + <td>my-menu-bar-menuitem</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::Root/VOverlay[1]/VMenuBar[0]/domChild[0]/domChild[0]</td> + <td>my-menu-bar-menuitem-caption</td> +</tr> +<tr> + <td>pressSpecialKey</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]#item0</td> + <td>[tab]</td> +</tr> +<tr> + <td>mouseClick</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VButton[0]/domChild[0]/domChild[0]</td> + <td></td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]</td> + <td>my-other-menu</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]/domChild[0]</td> + <td>my-other-menu-menuitem</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]/domChild[1]</td> + <td>my-other-menu-menuitem</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]/domChild[1]/domChild[0]</td> + <td>my-other-menu-submenu-indicator</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]/domChild[1]/domChild[1]</td> + <td>my-other-menu-menuitem-caption</td> +</tr> +<tr> + <td>mouseClick</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]#item0</td> + <td>24,9</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::Root/VOverlay[0]/</td> + <td>my-other-menu-popup</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::Root/VOverlay[0]/VMenuBar[0]</td> + <td>my-other-menu-submenu</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::Root/VOverlay[0]/VMenuBar[0]/domChild[0]</td> + <td>my-other-menu-menuitem</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::Root/VOverlay[0]/VMenuBar[0]/domChild[0]/domChild[0]</td> + <td>my-other-menu-menuitem-caption</td> +</tr> +<tr> + <td>mouseClick</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]#item0</td> + <td>24,9</td> +</tr> +<tr> + <td>mouseClick</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]#item1</td> + <td>44,6</td> +</tr> +<tr> + <td>pressSpecialKey</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]</td> + <td>down</td> +</tr> +<tr> + <td>pressSpecialKey</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]</td> + <td>right</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::Root/VOverlay[1]</td> + <td>my-other-menu-popup</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::Root/VOverlay[1]/VMenuBar[0]</td> + <td>my-other-menu-submenu</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::Root/VOverlay[1]/VMenuBar[0]/domChild[0]</td> + <td>my-other-menu-menuitem</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::Root/VOverlay[1]/VMenuBar[0]/domChild[0]/domChild[0]</td> + <td>my-other-menu-menuitem-caption</td> +</tr> +<tr> + <td>pressSpecialKey</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]#item0</td> + <td>[tab]</td> +</tr> + +</tbody></table> +</body> +</html> diff --git a/uitest/src/com/vaadin/tests/components/menubar/MenuBarPrimaryStylenames.java b/uitest/src/com/vaadin/tests/components/menubar/MenuBarPrimaryStylenames.java new file mode 100644 index 0000000000..79bec2e65e --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/menubar/MenuBarPrimaryStylenames.java @@ -0,0 +1,48 @@ +package com.vaadin.tests.components.menubar; + +import com.vaadin.tests.components.TestBase; +import com.vaadin.ui.Button; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.MenuBar; +import com.vaadin.ui.MenuBar.MenuItem; + +public class MenuBarPrimaryStylenames extends TestBase { + + @Override + protected void setup() { + final MenuBar mainMenu = new MenuBar(); + mainMenu.setPrimaryStyleName("my-menu-bar"); + + MenuItem submenu1 = mainMenu.addItem("Submenu1", null); + MenuItem item1 = submenu1.addItem("Item1", null); + item1.setCheckable(true); + item1.setStyleName("my-menu-item"); + submenu1.addItem("Item2", null); + + MenuItem submenu2 = mainMenu.addItem("Submenu2", null); + MenuItem menu1 = submenu2.addItem("Menu1", null); + menu1.addItem("Item11", null); + + addComponent(mainMenu); + + addComponent(new Button("Change primary stylename", + new Button.ClickListener() { + @Override + public void buttonClick(ClickEvent event) { + mainMenu.setPrimaryStyleName("my-other-menu"); + } + })); + + } + + @Override + protected String getDescription() { + return "Menubar should support primary stylenames both initially and dynamically"; + } + + @Override + protected Integer getTicketNumber() { + return 9908; + } + +} diff --git a/uitest/src/com/vaadin/tests/minitutorials/v7a3/RefresherTestUI.java b/uitest/src/com/vaadin/tests/minitutorials/v7a3/RefresherTestUI.java index 430da55fa1..c849cdce36 100644 --- a/uitest/src/com/vaadin/tests/minitutorials/v7a3/RefresherTestUI.java +++ b/uitest/src/com/vaadin/tests/minitutorials/v7a3/RefresherTestUI.java @@ -21,20 +21,29 @@ import com.vaadin.server.VaadinRequest; import com.vaadin.tests.components.AbstractTestUI; import com.vaadin.tests.minitutorials.v7a3.Refresher.RefreshListener; import com.vaadin.tests.widgetset.TestingWidgetSet; +import com.vaadin.ui.Button; +import com.vaadin.ui.Button.ClickEvent; @Widgetset(TestingWidgetSet.NAME) public class RefresherTestUI extends AbstractTestUI { @Override protected void setup(VaadinRequest request) { - Refresher refresher = new Refresher(); + final Refresher refresher = new Refresher(); refresher.extend(this); + refresher.setInterval(1000); refresher.addListener(new RefreshListener() { @Override public void refresh(Refresher source) { System.out.println("Got refresh"); } }); + addComponent(new Button("Remove refresher", new Button.ClickListener() { + @Override + public void buttonClick(ClickEvent event) { + removeExtension(refresher); + } + })); } @Override diff --git a/uitest/src/com/vaadin/tests/minitutorials/v7b5/HandlingLogout.java b/uitest/src/com/vaadin/tests/minitutorials/v7b5/HandlingLogout.java new file mode 100644 index 0000000000..0356b4c5a8 --- /dev/null +++ b/uitest/src/com/vaadin/tests/minitutorials/v7b5/HandlingLogout.java @@ -0,0 +1,64 @@ +/* + * Copyright 2012 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.tests.minitutorials.v7b5; + +import com.vaadin.server.VaadinRequest; +import com.vaadin.server.VaadinServletService; +import com.vaadin.tests.components.AbstractTestUI; +import com.vaadin.ui.Button; +import com.vaadin.ui.Button.ClickEvent; + +public class HandlingLogout extends AbstractTestUI { + + @Override + protected void setup(VaadinRequest request) { + addComponent(new Button("Logout", new Button.ClickListener() { + @Override + public void buttonClick(ClickEvent event) { + logout(); + } + })); + } + + private void logout() { + // Close the VaadinServiceSession + getUI().getSession().close(); + + // Invalidate underlying session instead if login info is stored there + // VaadinService.getCurrentRequest().getWrappedSession().invalidate(); + + // Redirect to avoid keeping the removed UI open in the browser + getUI().getPage().setLocation(getLogoutPageLocation()); + } + + protected String getLogoutPageLocation() { + return VaadinServletService.getCurrentRequest().getContextPath() + + "logout.html"; + } + + @Override + protected String getTestDescription() { + // TODO Auto-generated method stub + return null; + } + + @Override + protected Integer getTicketNumber() { + return Integer.valueOf(9646); + } + +} diff --git a/uitest/src/com/vaadin/tests/minitutorials/v7b5/SettingReadingSessionAttributesUI.java b/uitest/src/com/vaadin/tests/minitutorials/v7b5/SettingReadingSessionAttributesUI.java new file mode 100644 index 0000000000..bc96152880 --- /dev/null +++ b/uitest/src/com/vaadin/tests/minitutorials/v7b5/SettingReadingSessionAttributesUI.java @@ -0,0 +1,84 @@ +/* + * Copyright 2012 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.tests.minitutorials.v7b5; + +import com.vaadin.server.VaadinRequest; +import com.vaadin.server.VaadinService; +import com.vaadin.ui.Button; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.Label; +import com.vaadin.ui.TextField; +import com.vaadin.ui.UI; +import com.vaadin.ui.VerticalLayout; + +//Remove comment to preserve UI value when reloading +//@PreserveOnRefresh +public class SettingReadingSessionAttributesUI extends UI { + + private String value; + + private VerticalLayout statusHolder = new VerticalLayout(); + private TextField textField = new TextField(); + + @Override + protected void init(VaadinRequest request) { + addComponent(statusHolder); + addComponent(textField); + addComponent(new Button("Set new values", new Button.ClickListener() { + @Override + public void buttonClick(ClickEvent event) { + String value = textField.getValue(); + + saveValue(SettingReadingSessionAttributesUI.this, value); + } + })); + addComponent(new Button("Reload page", new Button.ClickListener() { + @Override + public void buttonClick(ClickEvent event) { + getPage().setLocation(getPage().getLocation()); + } + })); + + showValue(this); + } + + private static void saveValue(SettingReadingSessionAttributesUI ui, + String value) { + // Save to UI instance + ui.value = value; + // Save to VaadinServiceSession + ui.getSession().setAttribute("myValue", value); + // Save to HttpSession + VaadinService.getCurrentRequest().getWrappedSession() + .setAttribute("myValue", value); + + // Show new values + showValue(ui); + } + + private static void showValue(SettingReadingSessionAttributesUI ui) { + ui.statusHolder.removeAllComponents(); + ui.statusHolder.addComponent(new Label("Value in UI: " + ui.value)); + ui.statusHolder.addComponent(new Label( + "Value in VaadinServiceSession: " + + ui.getSession().getAttribute("myValue"))); + ui.statusHolder.addComponent(new Label("Value in HttpSession: " + + VaadinService.getCurrentRequest().getWrappedSession() + .getAttribute("myValue"))); + } + +} diff --git a/uitest/src/com/vaadin/tests/widgetset/client/minitutorials/v7a3/RefresherState.java b/uitest/src/com/vaadin/tests/widgetset/client/minitutorials/v7a3/RefresherState.java index 769f6330a9..13e8d8bc1d 100644 --- a/uitest/src/com/vaadin/tests/widgetset/client/minitutorials/v7a3/RefresherState.java +++ b/uitest/src/com/vaadin/tests/widgetset/client/minitutorials/v7a3/RefresherState.java @@ -3,5 +3,5 @@ package com.vaadin.tests.widgetset.client.minitutorials.v7a3; import com.vaadin.shared.communication.SharedState; public class RefresherState extends SharedState { - public int interval = 1000; + public int interval; }
\ No newline at end of file |