You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by sl...@apache.org on 2009/01/08 00:28:48 UTC

svn commit: r732556 - in /myfaces/core/branches/2_0_0/api/src/main/java/javax/faces/model: ArrayDataModel.java DataModel.java ListDataModel.java ResultDataModel.java ResultSetDataModel.java ScalarDataModel.java

Author: slessard
Date: Wed Jan  7 15:28:46 2009
New Revision: 732556

URL: http://svn.apache.org/viewvc?rev=732556&view=rev
Log:
MYFACES-2096 : Make DataModel types generic

Modified:
    myfaces/core/branches/2_0_0/api/src/main/java/javax/faces/model/ArrayDataModel.java
    myfaces/core/branches/2_0_0/api/src/main/java/javax/faces/model/DataModel.java
    myfaces/core/branches/2_0_0/api/src/main/java/javax/faces/model/ListDataModel.java
    myfaces/core/branches/2_0_0/api/src/main/java/javax/faces/model/ResultDataModel.java
    myfaces/core/branches/2_0_0/api/src/main/java/javax/faces/model/ResultSetDataModel.java
    myfaces/core/branches/2_0_0/api/src/main/java/javax/faces/model/ScalarDataModel.java

Modified: myfaces/core/branches/2_0_0/api/src/main/java/javax/faces/model/ArrayDataModel.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2_0_0/api/src/main/java/javax/faces/model/ArrayDataModel.java?rev=732556&r1=732555&r2=732556&view=diff
==============================================================================
--- myfaces/core/branches/2_0_0/api/src/main/java/javax/faces/model/ArrayDataModel.java (original)
+++ myfaces/core/branches/2_0_0/api/src/main/java/javax/faces/model/ArrayDataModel.java Wed Jan  7 15:28:46 2009
@@ -24,11 +24,11 @@
  * @author Thomas Spiegl (latest modification by $Author$)
  * @version $Revision$ $Date$
  */
-public class ArrayDataModel extends DataModel
+public class ArrayDataModel<E> extends DataModel<E>
 {
     // FIELDS
     private int _rowIndex = -1;
-    private Object[] _data;
+    private E[] _data;
 
     // CONSTRUCTORS
     public ArrayDataModel()
@@ -36,7 +36,7 @@
         super();
     }
 
-    public ArrayDataModel(Object[] array)
+    public ArrayDataModel(E[] array)
     {
         if (array == null)
             throw new NullPointerException("array");
@@ -55,7 +55,7 @@
     }
 
     @Override
-    public Object getRowData()
+    public E getRowData()
     {
         if (_data == null)
         {
@@ -83,11 +83,7 @@
     @Override
     public boolean isRowAvailable()
     {
-        if (_data == null)
-        {
-            return false;
-        }
-        return _rowIndex >= 0 && _rowIndex < _data.length;
+        return _data != null && _rowIndex >= 0 && _rowIndex < _data.length;
     }
 
     @Override
@@ -114,7 +110,8 @@
     @Override
     public void setWrappedData(Object data)
     {
-        _data = (Object[])data;
+        // TODO: Check with EG why data argument is not of type E
+        _data = (E[])data;
         int rowIndex = _data != null ? 0 : -1;
         setRowIndex(rowIndex);
     }

Modified: myfaces/core/branches/2_0_0/api/src/main/java/javax/faces/model/DataModel.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2_0_0/api/src/main/java/javax/faces/model/DataModel.java?rev=732556&r1=732555&r2=732556&view=diff
==============================================================================
--- myfaces/core/branches/2_0_0/api/src/main/java/javax/faces/model/DataModel.java (original)
+++ myfaces/core/branches/2_0_0/api/src/main/java/javax/faces/model/DataModel.java Wed Jan  7 15:28:46 2009
@@ -49,7 +49,7 @@
   * @author Thomas Spiegl (latest modification by $Author$)
   * @version $Revision$ $Date$
 */
-public abstract class DataModel implements Iterable<Object>
+public abstract class DataModel<E> implements Iterable<E>
 {
     // FIELDS
     private List<DataModelListener> _listeners;
@@ -75,12 +75,17 @@
     }
 
     /**
+     * <p>
      * Return the number of rows of data available. 
+     * </p>
      * <p>
      * If the number of rows of data available is not known then -1 is returned.
      * This may happen for DataModels that wrap sources of data such as 
      * java.sql.ResultSet that provide an iterator to access the "next item"
      * rather than a fixed-size collection of data.
+     * </p>
+     *
+     * @return the number of rows available.
      */
     abstract public int getRowCount();
 
@@ -89,14 +94,16 @@
      * <p>
      * Method isRowAvailable may be called before attempting to access
      * this method, to ensure that the data is available.
-     * 
+     *
+     * @return The object associated with the current row index.
      * @throws RuntimeException subclass of some kind if the current row index
      * is not within the range of the current wrappedData property.
      */
-    abstract public Object getRowData();
+    abstract public E getRowData();
 
     /**
      * Get the current row index.
+     * @return The current row index.
      */
     abstract public int getRowIndex();
 
@@ -105,12 +112,15 @@
      * the actual type of the returned object depends upon the concrete
      * subclass of DataModel; the object will represent an "ordered sequence
      * of components", but may be implemented as an array, java.util.List,
-     * java.sql.ResultSet or other similar types. 
+     * java.sql.ResultSet or other similar types.
+     *
+     * @return the wrapped object.
      */
     abstract public Object getWrappedData();
 
     /**
      * Returns true if a call to getRowData will return a valid object.
+     * @return true if a call to getRowData will return a valid object. false otherwise.
      */
     abstract public boolean isRowAvailable();
     
@@ -119,9 +129,9 @@
      * 
      * @since 2.0
      */
-    public Iterator<Object> iterator()
+    public Iterator<E> iterator()
     {
-        return new DataModelIterator();
+        return new DataModelIterator<E>();
     }
 
     public void removeDataModelListener(DataModelListener listener)
@@ -137,8 +147,8 @@
      * Set the current row index. This affects the behaviour of the
      * getRowData method in particular.
      * 
-     * Parameter rowIndex may be -1 to indicate "no row", or may be a value
-     * between 0 and getRowCount()-1. 
+     * @param rowIndex The row index. It may be -1 to indicate "no row",
+     *                 or may be a value between 0 and getRowCount()-1. 
      */
     abstract public void setRowIndex(int rowIndex);
 
@@ -146,10 +156,13 @@
      * Set the entire list of data associated with this component. Note that
      * the actual type of the provided object must match the expectations
      * of the concrete subclass of DataModel. See getWrappedData.
+     *
+     * @param data The object to be wrapped.
      */
+    // TODO: Check with EG why data argument is not of type E
     abstract public void setWrappedData(Object data);
     
-    private class DataModelIterator implements Iterator<Object>
+    private class DataModelIterator<E> implements Iterator<E>
     {
         private int nextRowIndex = 0;
         
@@ -158,7 +171,7 @@
             return nextRowIndex < getRowCount();
         }
 
-        public Object next()
+        public E next()
         {
             // TODO: Go to the EG with this, we need a getRowData(int) for thread safety.
             //       Or the spec needs to specify that the iterator alters the selected row explicitely
@@ -169,7 +182,8 @@
                 
                 if (isRowAvailable())
                 {
-                    return getRowData();
+                    // TODO: Double-check if this cast is safe. It should be...
+                    return (E) getRowData();
                 }
                 else
                 {

Modified: myfaces/core/branches/2_0_0/api/src/main/java/javax/faces/model/ListDataModel.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2_0_0/api/src/main/java/javax/faces/model/ListDataModel.java?rev=732556&r1=732555&r2=732556&view=diff
==============================================================================
--- myfaces/core/branches/2_0_0/api/src/main/java/javax/faces/model/ListDataModel.java (original)
+++ myfaces/core/branches/2_0_0/api/src/main/java/javax/faces/model/ListDataModel.java Wed Jan  7 15:28:46 2009
@@ -26,12 +26,12 @@
  * @author Thomas Spiegl (latest modification by $Author$)
  * @version $Revision$ $Date$
  */
-public class ListDataModel extends DataModel
+public class ListDataModel<E> extends DataModel<E>
 {
 
     // FIELDS
     private int _rowIndex = -1;
-    private List<?> _data;
+    private List<E> _data;
 
     // CONSTRUCTORS
     public ListDataModel()
@@ -39,7 +39,7 @@
         super();
     }
 
-    public ListDataModel(List list)
+    public ListDataModel(List<E> list)
     {
         if (list == null)
             throw new NullPointerException("list");
@@ -58,7 +58,7 @@
     }
 
     @Override
-    public Object getRowData()
+    public E getRowData()
     {
         if (_data == null)
         {
@@ -86,11 +86,7 @@
     @Override
     public boolean isRowAvailable()
     {
-        if (_data == null)
-        {
-            return false;
-        }
-        return _rowIndex >= 0 && _rowIndex < _data.size();
+        return _data != null && _rowIndex >= 0 && _rowIndex < _data.size();
     }
 
     @Override
@@ -104,7 +100,7 @@
         _rowIndex = rowIndex;
         if (_data != null && oldRowIndex != _rowIndex)
         {
-            Object data = isRowAvailable() ? getRowData() : null;
+            E data = isRowAvailable() ? getRowData() : null;
             DataModelEvent event = new DataModelEvent(this, _rowIndex, data);
             DataModelListener[] listeners = getDataModelListeners();
             for (int i = 0; i < listeners.length; i++)
@@ -117,7 +113,8 @@
     @Override
     public void setWrappedData(Object data)
     {
-        _data = (List<?>)data;
+        // TODO: Check with EG why data is not of type E
+        _data = (List<E>)data;
         int rowIndex = _data != null ? 0 : -1;
         setRowIndex(rowIndex);
     }

Modified: myfaces/core/branches/2_0_0/api/src/main/java/javax/faces/model/ResultDataModel.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2_0_0/api/src/main/java/javax/faces/model/ResultDataModel.java?rev=732556&r1=732555&r2=732556&view=diff
==============================================================================
--- myfaces/core/branches/2_0_0/api/src/main/java/javax/faces/model/ResultDataModel.java (original)
+++ myfaces/core/branches/2_0_0/api/src/main/java/javax/faces/model/ResultDataModel.java Wed Jan  7 15:28:46 2009
@@ -29,7 +29,7 @@
  * @author Thomas Spiegl (latest modification by $Author$)
  * @version $Revision$ $Date$
  */
-public class ResultDataModel extends DataModel
+public class ResultDataModel extends DataModel<SortedMap<String, Object>>
 {
     // FIELDS
     private int _rowIndex = -1;
@@ -60,7 +60,7 @@
     }
 
     @Override
-    public Object getRowData()
+    public SortedMap<String, Object> getRowData()
     {
         if (getRows() == null)
         {
@@ -80,6 +80,7 @@
     }
 
     @Override
+    // TODO: Check with EG why data argument is not of type Result
     public Object getWrappedData()
     {
         return _data;
@@ -88,11 +89,7 @@
     @Override
     public boolean isRowAvailable()
     {
-        if (getRows() == null)
-        {
-            return false;
-        }
-        return _rowIndex >= 0 && _rowIndex < getRows().length;
+        return getRows() != null && _rowIndex >= 0 && _rowIndex < getRows().length;
     }
 
     @Override
@@ -106,7 +103,7 @@
         _rowIndex = rowIndex;
         if (getRows() != null && oldRowIndex != _rowIndex)
         {
-            Object data = isRowAvailable() ? getRowData() : null;
+            SortedMap<String, Object> data = isRowAvailable() ? getRowData() : null;
             DataModelEvent event = new DataModelEvent(this, _rowIndex, data);
             DataModelListener[] listeners = getDataModelListeners();
             for (int i = 0; i < listeners.length; i++)
@@ -116,7 +113,7 @@
         }
     }
 
-    private SortedMap<?, ?>[] getRows()
+    private SortedMap<String, Object>[] getRows()
     {
         if (_data == null)
             return null;
@@ -124,6 +121,7 @@
         return _data.getRows();
     }
 
+    // TODO: Check with EG why data argument is not of type Result
     @Override
     public void setWrappedData(Object data)
     {

Modified: myfaces/core/branches/2_0_0/api/src/main/java/javax/faces/model/ResultSetDataModel.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2_0_0/api/src/main/java/javax/faces/model/ResultSetDataModel.java?rev=732556&r1=732555&r2=732556&view=diff
==============================================================================
--- myfaces/core/branches/2_0_0/api/src/main/java/javax/faces/model/ResultSetDataModel.java (original)
+++ myfaces/core/branches/2_0_0/api/src/main/java/javax/faces/model/ResultSetDataModel.java Wed Jan  7 15:28:46 2009
@@ -31,7 +31,7 @@
  * @author Martin Marinschek
  * @version $Revision$ $Date$
  */
-public class ResultSetDataModel extends DataModel
+public class ResultSetDataModel extends DataModel<Map<String,Object>>
 {
     // FIELDS
 
@@ -80,7 +80,7 @@
      * returned from here, so check the spec before modifying anything here.
      */
     @Override
-    public Object getRowData()
+    public Map<String,Object> getRowData()
     {
         if (_resultSet == null)
         {
@@ -353,9 +353,9 @@
         }
 
         @Override
-        public void putAll(Map<? extends String, ? extends Object> map)
+        public void putAll(Map<? extends String, ?> map)
         {
-            for (Map.Entry<? extends String, ? extends Object> entry : map.entrySet())
+            for (Map.Entry<? extends String, ?> entry : map.entrySet())
             {
                 put(entry.getKey(), entry.getValue());
             }
@@ -669,7 +669,7 @@
         }
 
         @Override
-        public boolean addAll(Collection<? extends Object> c)
+        public boolean addAll(Collection<?> c)
         {
             throw new UnsupportedOperationException("it is not allowed to add to this collection");
         }

Modified: myfaces/core/branches/2_0_0/api/src/main/java/javax/faces/model/ScalarDataModel.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2_0_0/api/src/main/java/javax/faces/model/ScalarDataModel.java?rev=732556&r1=732555&r2=732556&view=diff
==============================================================================
--- myfaces/core/branches/2_0_0/api/src/main/java/javax/faces/model/ScalarDataModel.java (original)
+++ myfaces/core/branches/2_0_0/api/src/main/java/javax/faces/model/ScalarDataModel.java Wed Jan  7 15:28:46 2009
@@ -24,11 +24,11 @@
  * @author Thomas Spiegl (latest modification by $Author$)
  * @version $Revision$ $Date$
  */
-public class ScalarDataModel extends DataModel
+public class ScalarDataModel<E> extends DataModel<E>
 {
     // FIELDS
     private int _rowIndex = -1;
-    private Object _data;
+    private E _data;
 
     // CONSTRUCTORS
     public ScalarDataModel()
@@ -36,7 +36,7 @@
         super();
     }
 
-    public ScalarDataModel(Object scalar)
+    public ScalarDataModel(E scalar)
     {
         setWrappedData(scalar);
     }
@@ -49,7 +49,7 @@
     }
 
     @Override
-    public Object getRowData()
+    public E getRowData()
     {
         if (_data == null)
         {
@@ -77,11 +77,7 @@
     @Override
     public boolean isRowAvailable()
     {
-        if (_data == null)
-        {
-            return false;
-        }
-        return _rowIndex == 0;
+        return _data != null && _rowIndex == 0;
     }
 
     @Override
@@ -108,7 +104,8 @@
     @Override
     public void setWrappedData(Object data)
     {
-        _data = data;
+        // TODO: Check with EG why data argument is not of type E
+        _data = (E) data;
         int rowIndex = _data != null ? 0 : -1;
         setRowIndex(rowIndex);
     }