aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--WebContent/WEB-INF/web.xml17
-rw-r--r--client/src/com/vaadin/client/ui/AbstractComponentConnector.java24
-rw-r--r--client/src/com/vaadin/client/ui/menubar/MenuBarConnector.java2
-rw-r--r--client/src/com/vaadin/client/ui/menubar/VMenuBar.java178
-rw-r--r--server/src/com/vaadin/DefaultDeploymentConfiguration.java2
-rw-r--r--server/src/com/vaadin/navigator/Navigator.java10
-rw-r--r--server/src/com/vaadin/server/Constants.java2
-rw-r--r--server/tests/src/com/vaadin/tests/server/navigator/NavigatorTest.java16
-rw-r--r--uitest/src/com/vaadin/tests/application/DeploymentConfigurationTest.html47
-rw-r--r--uitest/src/com/vaadin/tests/application/DeploymentConfigurationTest.java20
-rw-r--r--uitest/src/com/vaadin/tests/components/menubar/MenuBarPrimaryStylenames.html217
-rw-r--r--uitest/src/com/vaadin/tests/components/menubar/MenuBarPrimaryStylenames.java48
-rw-r--r--uitest/src/com/vaadin/tests/minitutorials/v7a3/RefresherTestUI.java11
-rw-r--r--uitest/src/com/vaadin/tests/minitutorials/v7b5/HandlingLogout.java64
-rw-r--r--uitest/src/com/vaadin/tests/minitutorials/v7b5/SettingReadingSessionAttributesUI.java84
-rw-r--r--uitest/src/com/vaadin/tests/widgetset/client/minitutorials/v7a3/RefresherState.java2
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 + ">&#x25BA;</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