summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenri Sara <hesara@vaadin.com>2013-04-29 13:36:32 +0300
committerHenri Sara <hesara@vaadin.com>2013-04-29 13:36:32 +0300
commitd214efa39a011002eb88e683676508e438842fe4 (patch)
tree4bf097cae710f2793eb63ca67e382e025ac51dde
parentedf91cb9ecc9eeb74efa49662bc3bf00a86c3bb2 (diff)
downloadvaadin-framework-d214efa39a011002eb88e683676508e438842fe4.tar.gz
vaadin-framework-d214efa39a011002eb88e683676508e438842fe4.zip
Ensure actions are handled in a deterministic order (#11735) (merged
from #11432 in 6.8 branch) svn changeset:25867/svn branch:6.8 Change-Id: Ie34cc4c4fe6524a23b2e7692b9e73a421443ac4f
-rw-r--r--server/src/com/vaadin/event/ActionManager.java60
1 files changed, 25 insertions, 35 deletions
diff --git a/server/src/com/vaadin/event/ActionManager.java b/server/src/com/vaadin/event/ActionManager.java
index 7a4b39444e..ce3e27d539 100644
--- a/server/src/com/vaadin/event/ActionManager.java
+++ b/server/src/com/vaadin/event/ActionManager.java
@@ -15,7 +15,7 @@
*/
package com.vaadin.event;
-import java.util.HashSet;
+import java.util.LinkedHashSet;
import java.util.Map;
import com.vaadin.event.Action.Container;
@@ -44,10 +44,10 @@ public class ActionManager implements Action.Container, Action.Handler,
private static final long serialVersionUID = 1641868163608066491L;
/** List of action handlers */
- protected HashSet<Action> ownActions = null;
+ protected LinkedHashSet<Action> ownActions = null;
/** List of action handlers */
- protected HashSet<Handler> actionHandlers = null;
+ protected LinkedHashSet<Handler> actionHandlers = null;
/** Action mapper */
protected KeyMapper<Action> actionMapper = null;
@@ -90,7 +90,7 @@ public class ActionManager implements Action.Container, Action.Handler,
@Override
public <T extends Action & Action.Listener> void addAction(T action) {
if (ownActions == null) {
- ownActions = new HashSet<Action>();
+ ownActions = new LinkedHashSet<Action>();
}
if (ownActions.add(action)) {
requestRepaint();
@@ -115,7 +115,7 @@ public class ActionManager implements Action.Container, Action.Handler,
if (actionHandler != null) {
if (actionHandlers == null) {
- actionHandlers = new HashSet<Handler>();
+ actionHandlers = new LinkedHashSet<Handler>();
}
if (actionHandlers.add(actionHandler)) {
@@ -150,20 +150,7 @@ public class ActionManager implements Action.Container, Action.Handler,
actionMapper = null;
- HashSet<Action> actions = new HashSet<Action>();
- if (actionHandlers != null) {
- for (Action.Handler handler : actionHandlers) {
- Action[] as = handler.getActions(actionTarget, viewer);
- if (as != null) {
- for (Action action : as) {
- actions.add(action);
- }
- }
- }
- }
- if (ownActions != null) {
- actions.addAll(ownActions);
- }
+ LinkedHashSet<Action> actions = getActionSet(actionTarget, viewer);
/*
* Must repaint whenever there are actions OR if all actions have been
@@ -225,22 +212,7 @@ public class ActionManager implements Action.Container, Action.Handler,
@Override
public Action[] getActions(Object target, Object sender) {
- HashSet<Action> actions = new HashSet<Action>();
- if (ownActions != null) {
- for (Action a : ownActions) {
- actions.add(a);
- }
- }
- if (actionHandlers != null) {
- for (Action.Handler h : actionHandlers) {
- Action[] as = h.getActions(target, sender);
- if (as != null) {
- for (Action a : as) {
- actions.add(a);
- }
- }
- }
- }
+ LinkedHashSet<Action> actions = getActionSet(target, sender);
return actions.toArray(new Action[actions.size()]);
}
@@ -259,4 +231,22 @@ public class ActionManager implements Action.Container, Action.Handler,
}
}
+ private LinkedHashSet<Action> getActionSet(Object target, Object sender) {
+ LinkedHashSet<Action> actions = new LinkedHashSet<Action>();
+ if (ownActions != null) {
+ actions.addAll(ownActions);
+
+ }
+ if (actionHandlers != null) {
+ for (Action.Handler h : actionHandlers) {
+ Action[] as = h.getActions(target, sender);
+ if (as != null) {
+ for (Action a : as) {
+ actions.add(a);
+ }
+ }
+ }
+ }
+ return actions;
+ }
}