Updated Branches: refs/heads/663-id-to-choice-lookup [created] 2c6264508
WICKET-663 enhance ichoicerenderer with id->choice object lookup Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/2c626450 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/2c626450 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/2c626450 Branch: refs/heads/663-id-to-choice-lookup Commit: 2c6264508805a6a41f053cdd010def32422d6f5a Parents: 6953025 Author: Martin Tzvetanov Grigorov <[email protected]> Authored: Thu Dec 19 12:07:53 2013 +0200 Committer: Martin Tzvetanov Grigorov <[email protected]> Committed: Thu Dec 19 12:07:53 2013 +0200 ---------------------------------------------------------------------- .../html/form/AbstractSingleSelectChoice.java | 12 ++---------- .../wicket/markup/html/form/ChoiceRenderer.java | 19 ++++++++++++++++++- .../markup/html/form/EnumChoiceRenderer.java | 4 ++-- .../wicket/markup/html/form/IChoiceRenderer.java | 15 ++++++++++++++- .../examples/compref/DropDownChoicePage.java | 6 +++--- .../html/form/palette/PaletteTestPage.java | 3 ++- 6 files changed, 41 insertions(+), 18 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/2c626450/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AbstractSingleSelectChoice.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AbstractSingleSelectChoice.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AbstractSingleSelectChoice.java index 667037a..b710980 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AbstractSingleSelectChoice.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AbstractSingleSelectChoice.java @@ -271,16 +271,8 @@ public abstract class AbstractSingleSelectChoice<T> extends AbstractChoice<T, T> { final List<? extends T> choices = getChoices(); final IChoiceRenderer<? super T> renderer = getChoiceRenderer(); - for (int index = 0; index < choices.size(); index++) - { - // Get next choice - final T choice = choices.get(index); - if (renderer.getIdValue(choice, index).equals(id)) - { - return choice; - } - } - return null; + T object = (T) renderer.getObject(id, choices); + return object; } /** http://git-wip-us.apache.org/repos/asf/wicket/blob/2c626450/wicket-core/src/main/java/org/apache/wicket/markup/html/form/ChoiceRenderer.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/ChoiceRenderer.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/ChoiceRenderer.java index 68d5793..6cac9ec 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/ChoiceRenderer.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/ChoiceRenderer.java @@ -16,6 +16,8 @@ */ package org.apache.wicket.markup.html.form; +import java.util.List; + import org.apache.wicket.core.util.lang.PropertyResolver; /** @@ -152,4 +154,19 @@ public class ChoiceRenderer<T> implements IChoiceRenderer<T> return returnValue.toString(); } -} \ No newline at end of file + + @Override + public T getObject(String id, List<? extends T> choices) + { + for (int index = 0; index < choices.size(); index++) + { + // Get next choice + final T choice = choices.get(index); + if (getIdValue(choice, index).equals(id)) + { + return choice; + } + } + return null; + } +} http://git-wip-us.apache.org/repos/asf/wicket/blob/2c626450/wicket-core/src/main/java/org/apache/wicket/markup/html/form/EnumChoiceRenderer.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/EnumChoiceRenderer.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/EnumChoiceRenderer.java index ff87c58..839bbb2 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/EnumChoiceRenderer.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/EnumChoiceRenderer.java @@ -36,7 +36,7 @@ import org.apache.wicket.util.lang.Classes; * * @param <T> */ -public class EnumChoiceRenderer<T extends Enum<T>> implements IChoiceRenderer<T> +public class EnumChoiceRenderer<T extends Enum<T>> extends ChoiceRenderer<T> { private static final long serialVersionUID = 1L; @@ -53,7 +53,7 @@ public class EnumChoiceRenderer<T extends Enum<T>> implements IChoiceRenderer<T> */ public EnumChoiceRenderer() { - resourceSource = null; + this(null); } /** http://git-wip-us.apache.org/repos/asf/wicket/blob/2c626450/wicket-core/src/main/java/org/apache/wicket/markup/html/form/IChoiceRenderer.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/IChoiceRenderer.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/IChoiceRenderer.java index 31b44e7..9a8399e 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/IChoiceRenderer.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/IChoiceRenderer.java @@ -16,6 +16,8 @@ */ package org.apache.wicket.markup.html.form; +import java.util.List; + import org.apache.wicket.util.io.IClusterable; /** @@ -53,4 +55,15 @@ public interface IChoiceRenderer<T> extends IClusterable * @return String */ String getIdValue(T object, int index); -} \ No newline at end of file + + /** + * This method is called to get an object back from its id representation. + * + * @param id + * The id representation of the object + * @param choices + * The list of all rendered choices + * @return A choice from the list that has this {@code id} + */ + T getObject(String id, List<? extends T> choices); +} http://git-wip-us.apache.org/repos/asf/wicket/blob/2c626450/wicket-examples/src/main/java/org/apache/wicket/examples/compref/DropDownChoicePage.java ---------------------------------------------------------------------- diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/compref/DropDownChoicePage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/compref/DropDownChoicePage.java index e581ae9..8b2031d 100644 --- a/wicket-examples/src/main/java/org/apache/wicket/examples/compref/DropDownChoicePage.java +++ b/wicket-examples/src/main/java/org/apache/wicket/examples/compref/DropDownChoicePage.java @@ -19,13 +19,13 @@ package org.apache.wicket.examples.compref; import java.util.Arrays; import java.util.List; -import org.apache.wicket.util.io.IClusterable; import org.apache.wicket.examples.WicketExamplePage; +import org.apache.wicket.markup.html.form.ChoiceRenderer; import org.apache.wicket.markup.html.form.DropDownChoice; import org.apache.wicket.markup.html.form.Form; -import org.apache.wicket.markup.html.form.IChoiceRenderer; import org.apache.wicket.markup.html.panel.FeedbackPanel; import org.apache.wicket.model.CompoundPropertyModel; +import org.apache.wicket.util.io.IClusterable; /** @@ -84,7 +84,7 @@ public class DropDownChoicePage extends WicketExamplePage // like the example below. Don't forget to check out the default // implementation of // IChoiceRenderer, ChoiceRenderer. - form.add(new DropDownChoice<Integer>("integer", INTEGERS, new IChoiceRenderer<Integer>() + form.add(new DropDownChoice<Integer>("integer", INTEGERS, new ChoiceRenderer<Integer>() { /** * Gets the display value that is visible to the end user. http://git-wip-us.apache.org/repos/asf/wicket/blob/2c626450/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/form/palette/PaletteTestPage.java ---------------------------------------------------------------------- diff --git a/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/form/palette/PaletteTestPage.java b/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/form/palette/PaletteTestPage.java index ccb62c0..59a0357 100644 --- a/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/form/palette/PaletteTestPage.java +++ b/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/form/palette/PaletteTestPage.java @@ -19,6 +19,7 @@ package org.apache.wicket.extensions.markup.html.form.palette; import java.util.List; import org.apache.wicket.markup.html.WebPage; +import org.apache.wicket.markup.html.form.ChoiceRenderer; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.IChoiceRenderer; import org.apache.wicket.model.CompoundPropertyModel; @@ -44,7 +45,7 @@ public class PaletteTestPage extends WebPage form = new Form<>("form", new CompoundPropertyModel<Object>("WICKET-5086")); add(form); - IChoiceRenderer<String> choiceRenderer = new IChoiceRenderer<String>() + IChoiceRenderer<String> choiceRenderer = new ChoiceRenderer<String>() { @Override public Object getDisplayValue(String s)
