Repository: wicket Updated Branches: refs/heads/master fb8db6ce6 -> adcb7a632
WICKET-5350 reintroduce wildcards for repeater over models, otherwise subclasses is hindered Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/adcb7a63 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/adcb7a63 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/adcb7a63 Branch: refs/heads/master Commit: adcb7a632af8225e86e09e398b8fb5430b143b18 Parents: fb8db6c Author: svenmeier <[email protected]> Authored: Wed Sep 24 22:05:04 2014 +0200 Committer: svenmeier <[email protected]> Committed: Wed Sep 24 22:05:04 2014 +0200 ---------------------------------------------------------------------- .../wicket/markup/html/list/ListItemModel.java | 13 ++------ .../wicket/markup/html/list/ListView.java | 20 ++++++------ .../markup/html/list/PageableListView.java | 6 ++-- .../markup/html/list/PropertyListView.java | 6 ++-- .../wicket/markup/html/panel/FeedbackPanel.java | 2 +- .../markup/repeater/AbstractPageableView.java | 4 +-- .../wicket/markup/repeater/RefreshingView.java | 4 +-- .../wicket/markup/html/list/ListViewTest.java | 33 ++++++++++++++++++++ .../markup/html/form/select/SelectOptions.java | 7 +++-- 9 files changed, 60 insertions(+), 35 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/adcb7a63/wicket-core/src/main/java/org/apache/wicket/markup/html/list/ListItemModel.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/list/ListItemModel.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/list/ListItemModel.java index 9bed7bb..0b8192b 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/list/ListItemModel.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/list/ListItemModel.java @@ -16,7 +16,7 @@ */ package org.apache.wicket.markup.html.list; -import org.apache.wicket.model.IModel; +import org.apache.wicket.model.AbstractReadOnlyModel; /** * Model for list items. @@ -26,7 +26,7 @@ import org.apache.wicket.model.IModel; * Model object type * */ -public class ListItemModel<T> implements IModel<T> +public class ListItemModel<T> extends AbstractReadOnlyModel<T> { private static final long serialVersionUID = 1L; @@ -60,15 +60,6 @@ public class ListItemModel<T> implements IModel<T> } /** - * @see org.apache.wicket.model.IModel#setObject(java.lang.Object) - */ - @Override - public void setObject(T object) - { - listView.getModelObject().set(index, object); - } - - /** * @see org.apache.wicket.model.IDetachable#detach() */ @Override http://git-wip-us.apache.org/repos/asf/wicket/blob/adcb7a63/wicket-core/src/main/java/org/apache/wicket/markup/html/list/ListView.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/list/ListView.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/list/ListView.java index 54b3015..57f9d84 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/list/ListView.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/list/ListView.java @@ -100,7 +100,7 @@ import org.apache.wicket.util.collections.ReadOnlyIterator; * @author Eelco Hillenius * * @param <T> - * Model object type + * type of elements contained in the model's list */ public abstract class ListView<T> extends AbstractRepeater { @@ -130,11 +130,11 @@ public abstract class ListView<T> extends AbstractRepeater } /** - * @param id - * @param model + * @param id component id + * @param model model containing a list of * @see org.apache.wicket.Component#Component(String, IModel) */ - public ListView(final String id, final IModel<? extends List<T>> model) + public ListView(final String id, final IModel<? extends List<? extends T>> model) { super(id, model); @@ -156,7 +156,7 @@ public abstract class ListView<T> extends AbstractRepeater * List to cast to Serializable * @see org.apache.wicket.Component#Component(String, IModel) */ - public ListView(final String id, final List<T> list) + public ListView(final String id, final List<? extends T> list) { this(id, Model.ofList(list)); } @@ -169,9 +169,9 @@ public abstract class ListView<T> extends AbstractRepeater * @return The list of items in this list view. */ @SuppressWarnings("unchecked") - public final List<T> getList() + public final List<? extends T> getList() { - final List<T> list = (List<T>)getDefaultModelObject(); + final List<? extends T> list = (List<? extends T>)getDefaultModelObject(); if (list == null) { return Collections.emptyList(); @@ -364,7 +364,7 @@ public abstract class ListView<T> extends AbstractRepeater * The list for the new model. The list must implement {@link Serializable}. * @return This for chaining */ - public ListView<T> setList(List<T> list) + public ListView<T> setList(List<? extends T> list) { setDefaultModel(Model.ofList(list)); return this; @@ -638,9 +638,9 @@ public abstract class ListView<T> extends AbstractRepeater * @return model object */ @SuppressWarnings("unchecked") - public final List<T> getModelObject() + public final List<? extends T> getModelObject() { - return (List<T>)getDefaultModelObject(); + return (List<? extends T>)getDefaultModelObject(); } /** http://git-wip-us.apache.org/repos/asf/wicket/blob/adcb7a63/wicket-core/src/main/java/org/apache/wicket/markup/html/list/PageableListView.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/list/PageableListView.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/list/PageableListView.java index 7c717dd..7690db2 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/list/PageableListView.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/list/PageableListView.java @@ -29,7 +29,7 @@ import org.apache.wicket.model.IModel; * * @author Jonathan Locke * @param <T> - * Model object type + * type of elements contained in the model's list */ public abstract class PageableListView<T> extends ListView<T> implements IPageableItems { @@ -51,7 +51,7 @@ public abstract class PageableListView<T> extends ListView<T> implements IPageab * @param itemsPerPage * Number of rows to show on a page */ - public PageableListView(final String id, final IModel<? extends List<T>> model, + public PageableListView(final String id, final IModel<? extends List<? extends T>> model, int itemsPerPage) { super(id, model); @@ -70,7 +70,7 @@ public abstract class PageableListView<T> extends ListView<T> implements IPageab * Number of rows to show on a page * @see ListView#ListView(String, List) */ - public PageableListView(final String id, final List<T> list, final int itemsPerPage) + public PageableListView(final String id, final List<? extends T> list, final int itemsPerPage) { super(id, list); this.itemsPerPage = itemsPerPage; http://git-wip-us.apache.org/repos/asf/wicket/blob/adcb7a63/wicket-core/src/main/java/org/apache/wicket/markup/html/list/PropertyListView.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/list/PropertyListView.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/list/PropertyListView.java index 464a14e..b458ed0 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/list/PropertyListView.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/list/PropertyListView.java @@ -29,7 +29,7 @@ import org.apache.wicket.model.IModel; * @author Nathan Hamblen * * @param <T> - * Model object type + * type of elements contained in the model's list */ public abstract class PropertyListView<T> extends ListView<T> { @@ -57,7 +57,7 @@ public abstract class PropertyListView<T> extends ListView<T> * @param model * wrapping a List */ - public PropertyListView(final String id, final IModel<? extends List<T>> model) + public PropertyListView(final String id, final IModel<? extends List<? extends T>> model) { super(id, model); } @@ -71,7 +71,7 @@ public abstract class PropertyListView<T> extends ListView<T> * @param list * unmodeled List */ - public PropertyListView(final String id, final List<T> list) + public PropertyListView(final String id, final List<? extends T> list) { super(id, list); } http://git-wip-us.apache.org/repos/asf/wicket/blob/adcb7a63/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/FeedbackPanel.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/FeedbackPanel.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/FeedbackPanel.java index 50fe999..d17ba9f 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/FeedbackPanel.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/FeedbackPanel.java @@ -327,7 +327,7 @@ public class FeedbackPanel extends Panel implements IFeedback */ protected final List<FeedbackMessage> getCurrentMessages() { - final List<FeedbackMessage> messages = messageListView.getModelObject(); + final List<? extends FeedbackMessage> messages = messageListView.getModelObject(); return Collections.unmodifiableList(messages); } http://git-wip-us.apache.org/repos/asf/wicket/blob/adcb7a63/wicket-core/src/main/java/org/apache/wicket/markup/repeater/AbstractPageableView.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/repeater/AbstractPageableView.java b/wicket-core/src/main/java/org/apache/wicket/markup/repeater/AbstractPageableView.java index 297ee8c..8b98077 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/repeater/AbstractPageableView.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/repeater/AbstractPageableView.java @@ -41,7 +41,7 @@ import org.apache.wicket.model.IModel; * @author Igor Vaynberg (ivaynberg) * * @param <T> - * Model object type + * type of elements contained in the model's list */ public abstract class AbstractPageableView<T> extends RefreshingView<T> implements IPageableItems { @@ -73,7 +73,7 @@ public abstract class AbstractPageableView<T> extends RefreshingView<T> implemen * @param model * @see org.apache.wicket.Component#Component(String, IModel) */ - public AbstractPageableView(String id, IModel<? extends Collection<T>> model) + public AbstractPageableView(String id, IModel<? extends Collection<? extends T>> model) { super(id, model); clearCachedItemCount(); http://git-wip-us.apache.org/repos/asf/wicket/blob/adcb7a63/wicket-core/src/main/java/org/apache/wicket/markup/repeater/RefreshingView.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/repeater/RefreshingView.java b/wicket-core/src/main/java/org/apache/wicket/markup/repeater/RefreshingView.java index 3e18d88..e9a11fc 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/repeater/RefreshingView.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/repeater/RefreshingView.java @@ -46,7 +46,7 @@ import org.apache.wicket.util.lang.Generics; * @author Igor Vaynberg (ivaynberg) * * @param <T> - * Model object type + * type of elements contained in the model's list */ public abstract class RefreshingView<T> extends RepeatingView { @@ -79,7 +79,7 @@ public abstract class RefreshingView<T> extends RepeatingView * @param model * model */ - public RefreshingView(String id, IModel<? extends Collection<T>> model) + public RefreshingView(String id, IModel<? extends Collection<? extends T>> model) { super(id, model); } http://git-wip-us.apache.org/repos/asf/wicket/blob/adcb7a63/wicket-core/src/test/java/org/apache/wicket/markup/html/list/ListViewTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/list/ListViewTest.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/list/ListViewTest.java index c4caead..8ebf50f 100644 --- a/wicket-core/src/test/java/org/apache/wicket/markup/html/list/ListViewTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/list/ListViewTest.java @@ -17,8 +17,11 @@ package org.apache.wicket.markup.html.list; import java.util.ArrayList; +import java.util.List; import org.apache.wicket.WicketTestCase; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.model.IModel; import org.apache.wicket.model.util.ListModel; import org.junit.Test; @@ -57,6 +60,36 @@ public class ListViewTest extends WicketTestCase } /** + */ + @Test + public void generics() { + // a listView for numbers + class NumberListView extends ListView<Number> { + + private static final long serialVersionUID = 1L; + + // since the given list is not changed actually, we can safely + // accept lists accepting subtypes of numbers only + public NumberListView(String id, IModel<? extends List<? extends Number>> model) + { + super(id, model); + } + + @Override + protected void populateItem(ListItem<Number> item) + { + // non-fancy display of the number + add(new Label("label", item.getModel())); + } + }; + + IModel<List<Integer>> integers = new ListModel<>(new ArrayList<Integer>()); + + // pass list of integers to the number listView + new NumberListView("integers", integers); + } + + /** * */ @Test http://git-wip-us.apache.org/repos/asf/wicket/blob/adcb7a63/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/select/SelectOptions.java ---------------------------------------------------------------------- diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/select/SelectOptions.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/select/SelectOptions.java index c02f058..12cfed3 100644 --- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/select/SelectOptions.java +++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/select/SelectOptions.java @@ -39,6 +39,7 @@ import org.apache.wicket.model.util.CollectionModel; * </pre> * * @param <T> + * type of elements contained in the model's collection * @author Igor Vaynberg (ivaynberg) */ public class SelectOptions<T> extends RepeatingView @@ -56,7 +57,7 @@ public class SelectOptions<T> extends RepeatingView * @param model * @param renderer */ - public SelectOptions(final String id, final IModel<? extends Collection<T>> model, + public SelectOptions(final String id, final IModel<? extends Collection<? extends T>> model, final IOptionRenderer<T> renderer) { super(id, model); @@ -71,7 +72,7 @@ public class SelectOptions<T> extends RepeatingView * @param elements * @param renderer */ - public SelectOptions(final String id, final Collection<T> elements, + public SelectOptions(final String id, final Collection<? extends T> elements, final IOptionRenderer<T> renderer) { this(id, new CollectionModel<>(elements), renderer); @@ -107,7 +108,7 @@ public class SelectOptions<T> extends RepeatingView // populate this repeating view with SelectOption components removeAll(); - Collection<T> modelObject = (Collection<T>)getDefaultModelObject(); + Collection<? extends T> modelObject = (Collection<? extends T>)getDefaultModelObject(); if (modelObject != null) {
