You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by pe...@apache.org on 2012/05/02 18:59:17 UTC
git commit: WICKET-4528 make recorder component of wicket-extensions
palette more efficient for large number of items and easier to extend
Updated Branches:
refs/heads/master 6029e6d02 -> 37e843913
WICKET-4528 make recorder component of wicket-extensions palette more efficient for large number of items and easier to extend
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/37e84391
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/37e84391
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/37e84391
Branch: refs/heads/master
Commit: 37e843913d22f044449f727ef52403431c4b2dfc
Parents: 6029e6d
Author: Peter Ertl <pe...@apache.org>
Authored: Wed May 2 14:29:27 2012 +0200
Committer: Peter Ertl <pe...@apache.org>
Committed: Wed May 2 18:56:18 2012 +0200
----------------------------------------------------------------------
.../html/form/palette/component/Recorder.java | 56 +++++++++------
1 files changed, 33 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/37e84391/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/component/Recorder.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/component/Recorder.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/component/Recorder.java
index 56bd425..d07400f 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/component/Recorder.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/component/Recorder.java
@@ -18,14 +18,12 @@ package org.apache.wicket.extensions.markup.html.form.palette.component;
import java.io.Serializable;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
-import java.util.HashSet;
+import java.util.HashMap;
import java.util.Iterator;
-import java.util.LinkedHashSet;
import java.util.List;
-import java.util.Set;
+import java.util.Map;
import org.apache.wicket.WicketRuntimeException;
import org.apache.wicket.extensions.markup.html.form.palette.Palette;
@@ -49,7 +47,7 @@ public class Recorder<T> extends HiddenField<Object>
private static final long serialVersionUID = 1L;
/** set of selected ids */
- private final Set<String> ids;
+ private final List<String> selectedIds;
/** parent palette object */
private final Palette<T> palette;
@@ -65,13 +63,13 @@ public class Recorder<T> extends HiddenField<Object>
}
/**
- * internal access to ids for subclasses
+ * selected ids of component
*
* @return set of ids
*/
- protected Set<String> getIds()
+ protected List<String> getSelectedIds()
{
- return ids;
+ return selectedIds;
}
/**
@@ -84,7 +82,7 @@ public class Recorder<T> extends HiddenField<Object>
{
super(id);
this.palette = palette;
- this.ids = new LinkedHashSet<String>(); // hash set with insertion order
+ this.selectedIds = new ArrayList<String>();
setDefaultModel(new Model<Serializable>());
setOutputMarkupId(true);
}
@@ -154,21 +152,32 @@ public class Recorder<T> extends HiddenField<Object>
*/
protected List<T> getSelectedList()
{
- if (getIds().isEmpty())
+ if (getSelectedIds().isEmpty())
{
return Collections.EMPTY_LIST;
}
final IChoiceRenderer<T> renderer = getPalette().getChoiceRenderer();
- final List<T> selected = new ArrayList<T>(getIds().size());
+ final List<T> selected = new ArrayList<T>(getSelectedIds().size());
final Collection<? extends T> choices = getPalette().getChoices();
+ final Map<T, String> idForChoice = new HashMap<T, String>(choices.size());
- for (T choice : choices)
+ // reduce number of method calls by building a lookup table
+ for (final T choice : choices)
{
- final String idValue = renderer.getIdValue(choice, 0);
- if (getIds().contains(idValue))
+ idForChoice.put(choice, renderer.getIdValue(choice, 0));
+ }
+
+ for (final String id : getSelectedIds())
+ {
+ for (final T choice : choices)
{
- selected.add(choice);
+ final String idValue = idForChoice.get(choice);
+ if (id.equals(idValue)) // null-safe compare
+ {
+ selected.add(choice);
+ break;
+ }
}
}
return selected;
@@ -189,18 +198,19 @@ public class Recorder<T> extends HiddenField<Object>
{
final Collection<? extends T> choices = getPalette().getChoices();
- if (choices.size() - getIds().size() == 0)
+ if (choices.size() - getSelectedIds().size() == 0)
{
return Collections.<T>emptyList();
}
final IChoiceRenderer<T> renderer = getPalette().getChoiceRenderer();
- final List<T> unselected = new ArrayList<T>(Math.max(1, choices.size() - getIds().size()));
+ final List<T> unselected = new ArrayList<T>(Math.max(1, choices.size() - getSelectedIds().size()));
- for (T choice : choices)
+ for (final T choice : choices)
{
- final String idValue = renderer.getIdValue(choice, 0);
- if (!getIds().contains(idValue))
+ final String choiceId = renderer.getIdValue(choice, 0);
+
+ if (getSelectedIds().contains(choiceId) == false)
{
unselected.add(choice);
}
@@ -233,11 +243,11 @@ public class Recorder<T> extends HiddenField<Object>
protected void updateIds(final String value)
{
- getIds().clear();
+ getSelectedIds().clear();
- for (String id : Strings.split(value, ','))
+ for (final String id : Strings.split(value, ','))
{
- getIds().add(id);
+ getSelectedIds().add(id);
}
}
}