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)
                        {

Reply via email to