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 13:06:57 UTC
[1/2] git commit: WICKET-4528 make recorder component of
wicket-extensions palette more efficient for large number of items
Updated Branches:
refs/heads/master 15734a0da -> 6029e6d02
WICKET-4528 make recorder component of wicket-extensions palette more efficient for large number of items
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/6029e6d0
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/6029e6d0
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/6029e6d0
Branch: refs/heads/master
Commit: 6029e6d0243073a39c517fc6075d6b167e0482d6
Parents: 6da066e
Author: Peter Ertl <pe...@apache.org>
Authored: Wed May 2 12:46:46 2012 +0200
Committer: Peter Ertl <pe...@apache.org>
Committed: Wed May 2 12:46:46 2012 +0200
----------------------------------------------------------------------
.../html/form/palette/component/Recorder.java | 112 ++++++++-------
1 files changed, 61 insertions(+), 51 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/6029e6d0/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 beab03c..56bd425 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,10 +18,14 @@ 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.Iterator;
+import java.util.LinkedHashSet;
import java.util.List;
+import java.util.Set;
import org.apache.wicket.WicketRuntimeException;
import org.apache.wicket.extensions.markup.html.form.palette.Palette;
@@ -44,10 +48,8 @@ public class Recorder<T> extends HiddenField<Object>
{
private static final long serialVersionUID = 1L;
- private static final String[] EMPTY_IDS = new String[0];
-
- /** conveniently maintained array of selected ids */
- private String[] ids;
+ /** set of selected ids */
+ private final Set<String> ids;
/** parent palette object */
private final Palette<T> palette;
@@ -63,6 +65,16 @@ public class Recorder<T> extends HiddenField<Object>
}
/**
+ * internal access to ids for subclasses
+ *
+ * @return set of ids
+ */
+ protected Set<String> getIds()
+ {
+ return ids;
+ }
+
+ /**
* @param id
* component id
* @param palette
@@ -72,6 +84,7 @@ public class Recorder<T> extends HiddenField<Object>
{
super(id);
this.palette = palette;
+ this.ids = new LinkedHashSet<String>(); // hash set with insertion order
setDefaultModel(new Model<Serializable>());
setOutputMarkupId(true);
}
@@ -89,10 +102,6 @@ public class Recorder<T> extends HiddenField<Object>
{
initIds();
}
- else if (ids == null)
- {
- ids = EMPTY_IDS;
- }
attached = true;
}
@@ -141,67 +150,71 @@ public class Recorder<T> extends HiddenField<Object>
}
/**
- * @return iterator over selected choices
+ * @return list over selected choices
*/
- @SuppressWarnings("unchecked")
- public Iterator<T> getSelectedChoices()
+ protected List<T> getSelectedList()
{
- IChoiceRenderer<T> renderer = getPalette().getChoiceRenderer();
- if (ids.length == 0)
+ if (getIds().isEmpty())
{
- return Collections.EMPTY_LIST.iterator();
+ return Collections.EMPTY_LIST;
}
- List<T> selected = new ArrayList<T>(ids.length);
- Collection<? extends T> choices = getPalette().getChoices();
- for (String id : ids)
+ final IChoiceRenderer<T> renderer = getPalette().getChoiceRenderer();
+ final List<T> selected = new ArrayList<T>(getIds().size());
+ final Collection<? extends T> choices = getPalette().getChoices();
+
+ for (T choice : choices)
{
- for (T choice : choices)
+ final String idValue = renderer.getIdValue(choice, 0);
+ if (getIds().contains(idValue))
{
- if (renderer.getIdValue(choice, 0).equals(id))
- {
- selected.add(choice);
- break;
- }
+ selected.add(choice);
}
}
- return selected.iterator();
+ return selected;
}
/**
- * @return iterator over unselected choices
+ * @return iterator over selected choices
*/
- public Iterator<T> getUnselectedChoices()
+ public Iterator<T> getSelectedChoices()
{
- IChoiceRenderer<T> renderer = getPalette().getChoiceRenderer();
- Collection<? extends T> choices = getPalette().getChoices();
+ return getSelectedList().iterator();
+ }
+
+ /**
+ * @return list over unselected choices
+ */
+ protected List<T> getUnselectedList()
+ {
+ final Collection<? extends T> choices = getPalette().getChoices();
- if (choices.size() - ids.length == 0)
+ if (choices.size() - getIds().size() == 0)
{
- return Collections.<T> emptyList().iterator();
+ return Collections.<T>emptyList();
}
- List<T> unselected = new ArrayList<T>(Math.max(1, choices.size() - ids.length));
+ final IChoiceRenderer<T> renderer = getPalette().getChoiceRenderer();
+ final List<T> unselected = new ArrayList<T>(Math.max(1, choices.size() - getIds().size()));
+
for (T choice : choices)
{
- final String choiceId = renderer.getIdValue(choice, 0);
- boolean selected = false;
- for (String id : ids)
- {
- if (id.equals(choiceId))
- {
- selected = true;
- break;
- }
- }
- if (!selected)
+ final String idValue = renderer.getIdValue(choice, 0);
+ if (!getIds().contains(idValue))
{
unselected.add(choice);
}
}
- return unselected.iterator();
+ return unselected;
}
+ /**
+ * @return iterator over unselected choices
+ */
+ public Iterator<T> getUnselectedChoices()
+ {
+ return getUnselectedList().iterator();
+ }
@Override
protected void onInvalid()
@@ -218,16 +231,13 @@ public class Recorder<T> extends HiddenField<Object>
updateIds(getValue());
}
- private void updateIds(final String value)
+ protected void updateIds(final String value)
{
- if (Strings.isEmpty(value))
- {
- ids = EMPTY_IDS;
- }
- else
+ getIds().clear();
+
+ for (String id : Strings.split(value, ','))
{
- ids = Strings.split(value, ',');
+ getIds().add(id);
}
}
-
}