aboutsummaryrefslogtreecommitdiffstats
path: root/src/com/vaadin/ui/AbstractSelect.java
diff options
context:
space:
mode:
authorLeif Åstrand <leif@vaadin.com>2012-07-27 14:00:39 +0000
committerLeif Åstrand <leif@vaadin.com>2012-07-27 14:00:39 +0000
commit8374a0aa32dec95d8fb72f6f0d3cf286cc3684f4 (patch)
treedbc09bf464bb598e09896c1ba9a310e0c478fe5f /src/com/vaadin/ui/AbstractSelect.java
parent9148b35e9ea0cc6882ba2f8560d97138d7ca362a (diff)
downloadvaadin-framework-8374a0aa32dec95d8fb72f6f0d3cf286cc3684f4.tar.gz
vaadin-framework-8374a0aa32dec95d8fb72f6f0d3cf286cc3684f4.zip
Preserve selection order for multi select value (#8109, #8787)
svn changeset:24030/svn branch:6.8
Diffstat (limited to 'src/com/vaadin/ui/AbstractSelect.java')
-rw-r--r--src/com/vaadin/ui/AbstractSelect.java13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/com/vaadin/ui/AbstractSelect.java b/src/com/vaadin/ui/AbstractSelect.java
index bb49626741..71624804fa 100644
--- a/src/com/vaadin/ui/AbstractSelect.java
+++ b/src/com/vaadin/ui/AbstractSelect.java
@@ -426,12 +426,15 @@ public abstract class AbstractSelect extends AbstractField implements
// (non-visible items can not be deselected)
final Collection<?> visible = getVisibleItemIds();
if (visible != null) {
+ // Don't remove those that will be added to preserve order
+ visible.removeAll(s);
+
@SuppressWarnings("unchecked")
Set<Object> newsel = (Set<Object>) getValue();
if (newsel == null) {
- newsel = new HashSet<Object>();
+ newsel = new LinkedHashSet<Object>();
} else {
- newsel = new HashSet<Object>(newsel);
+ newsel = new LinkedHashSet<Object>(newsel);
}
newsel.removeAll(visible);
newsel.addAll(s);
@@ -645,10 +648,10 @@ public abstract class AbstractSelect extends AbstractField implements
if (isMultiSelect()) {
if (newValue == null) {
- super.setValue(new HashSet<Object>(), repaintIsNotNeeded);
+ super.setValue(new LinkedHashSet<Object>(), repaintIsNotNeeded);
} else if (Collection.class.isAssignableFrom(newValue.getClass())) {
- super.setValue(new HashSet<Object>((Collection<?>) newValue),
- repaintIsNotNeeded);
+ super.setValue(new LinkedHashSet<Object>(
+ (Collection<?>) newValue), repaintIsNotNeeded);
}
} else if (newValue == null || items.containsId(newValue)) {
super.setValue(newValue, repaintIsNotNeeded);