You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pivot.apache.org by gb...@apache.org on 2010/08/28 14:28:07 UTC

svn commit: r990353 - in /pivot/trunk: core/src/org/apache/pivot/json/ core/src/org/apache/pivot/serialization/ core/src/org/apache/pivot/sql/ tests/src/org/apache/pivot/tests/sql/ tutorials-server/src/org/apache/pivot/tutorials/webqueries/server/ tuto...

Author: gbrown
Date: Sat Aug 28 12:28:07 2010
New Revision: 990353

URL: http://svn.apache.org/viewvc?rev=990353&view=rev
Log:
Allow caller to specify CSVSerializer keys using varargs; support parameterized types in CSVSerializer and move type definition to constructor for consistency with JSONSerializer; update ResultList API for consistency with CSVSerializer key specification API.

Modified:
    pivot/trunk/core/src/org/apache/pivot/json/JSONSerializer.java
    pivot/trunk/core/src/org/apache/pivot/serialization/CSVSerializer.java
    pivot/trunk/core/src/org/apache/pivot/sql/ResultList.java
    pivot/trunk/tests/src/org/apache/pivot/tests/sql/ResultListTest.java
    pivot/trunk/tutorials-server/src/org/apache/pivot/tutorials/webqueries/server/ExpenseServlet.java
    pivot/trunk/tutorials/src/org/apache/pivot/tutorials/stocktracker/StockTrackerWindow.java

Modified: pivot/trunk/core/src/org/apache/pivot/json/JSONSerializer.java
URL: http://svn.apache.org/viewvc/pivot/trunk/core/src/org/apache/pivot/json/JSONSerializer.java?rev=990353&r1=990352&r2=990353&view=diff
==============================================================================
--- pivot/trunk/core/src/org/apache/pivot/json/JSONSerializer.java (original)
+++ pivot/trunk/core/src/org/apache/pivot/json/JSONSerializer.java Sat Aug 28 12:28:07 2010
@@ -52,21 +52,24 @@ public class JSONSerializer implements S
     private Charset charset;
     private Type type;
 
-    private int c = -1;
     private boolean alwaysDelimitMapKeys = false;
     private boolean verbose = false;
 
+    private int c = -1;
+
     public static final String DEFAULT_CHARSET_NAME = "UTF-8";
+    public static final Type DEFAULT_TYPE = Object.class;
+
     public static final String JSON_EXTENSION = "json";
     public static final String MIME_TYPE = "application/json";
     public static final int BUFFER_SIZE = 2048;
 
     public JSONSerializer() {
-        this(Charset.forName(DEFAULT_CHARSET_NAME), Object.class);
+        this(Charset.forName(DEFAULT_CHARSET_NAME), DEFAULT_TYPE);
     }
 
     public JSONSerializer(Charset charset) {
-        this(charset, Object.class);
+        this(charset, DEFAULT_TYPE);
     }
 
     public JSONSerializer(Type type) {
@@ -78,6 +81,10 @@ public class JSONSerializer implements S
             throw new IllegalArgumentException("charset is null.");
         }
 
+        if (type == null) {
+            throw new IllegalArgumentException("type is null.");
+        }
+
         this.charset = charset;
         this.type = type;
     }

Modified: pivot/trunk/core/src/org/apache/pivot/serialization/CSVSerializer.java
URL: http://svn.apache.org/viewvc/pivot/trunk/core/src/org/apache/pivot/serialization/CSVSerializer.java?rev=990353&r1=990352&r2=990353&view=diff
==============================================================================
--- pivot/trunk/core/src/org/apache/pivot/serialization/CSVSerializer.java (original)
+++ pivot/trunk/core/src/org/apache/pivot/serialization/CSVSerializer.java Sat Aug 28 12:28:07 2010
@@ -26,10 +26,13 @@ import java.io.OutputStream;
 import java.io.OutputStreamWriter;
 import java.io.Reader;
 import java.io.Writer;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
 import java.nio.charset.Charset;
 import java.util.NoSuchElementException;
 
 import org.apache.pivot.beans.BeanAdapter;
+import org.apache.pivot.collections.ArrayAdapter;
 import org.apache.pivot.collections.ArrayList;
 import org.apache.pivot.collections.Dictionary;
 import org.apache.pivot.collections.HashMap;
@@ -83,61 +86,93 @@ public class CSVSerializer implements Se
     }
 
     private Charset charset;
+    private Type itemType;
 
-    int c = -1;
     private ArrayList<String> keys = new ArrayList<String>();
-    private Class<?> itemClass = HashMap.class;
+
     private boolean writeKeys = false;
     private boolean verbose = false;
 
+    int c = -1;
+
     public static final String DEFAULT_CHARSET_NAME = "ISO-8859-1";
+    public static final Type DEFAULT_ITEM_TYPE = HashMap.class;
+
     public static final String CSV_EXTENSION = "csv";
     public static final String MIME_TYPE = "text/csv";
     public static final int BUFFER_SIZE = 2048;
 
     public CSVSerializer() {
-        this(Charset.forName(DEFAULT_CHARSET_NAME));
+        this(Charset.forName(DEFAULT_CHARSET_NAME), DEFAULT_ITEM_TYPE);
     }
 
     public CSVSerializer(Charset charset) {
+        this(charset, DEFAULT_ITEM_TYPE);
+    }
+
+    public CSVSerializer(Type itemType) {
+        this(Charset.forName(DEFAULT_CHARSET_NAME), itemType);
+    }
+
+    public CSVSerializer(Charset charset, Type itemType) {
         if (charset == null) {
             throw new IllegalArgumentException("charset is null.");
         }
 
+        if (itemType == null) {
+            throw new IllegalArgumentException("itemType is null.");
+        }
+
         this.charset = charset;
+        this.itemType = itemType;
     }
 
+    /**
+     * Returns the character set used to encode/decode the CSV data.
+     */
     public Charset getCharset() {
         return charset;
     }
 
     /**
-     * Returns a sequence representing the fields that will be read or written
-     * by this serializer.
+     * Returns the type of the item that will be instantiated by the serializer
+     * during a read operation.
+     */
+    public Type getItemType() {
+        return itemType;
+    }
+
+    /**
+     * Returns the keys that will be read or written by this serializer.
      */
     public Sequence<String> getKeys() {
         return keys;
     }
 
     /**
-     * Returns the item class that will be instantiated by the serializer during
-     * a read operation.
+     * Sets the keys that will be read or written by this serializer.
+     *
+     * @param keys
      */
-    public Class<?> getItemClass() {
-        return itemClass;
+    public void setKeys(Sequence<String> keys) {
+        if (keys == null) {
+            throw new IllegalArgumentException();
+        }
+
+        this.keys = new ArrayList<String>(keys);
     }
 
     /**
-     * Sets the item class that will be instantiated by the serializer during
-     * a read operation. The class must implement the {@link Dictionary}
-     * interface.
+     * Sets the keys that will be read or written by this serializer.
+     *
+     * @param keys
      */
-    public void setItemClass(Class<?> itemClass) {
-        if (itemClass == null) {
-            throw new IllegalArgumentException("itemClass is null.");
+    public void setKeys(String... keys) {
+        if (keys == null) {
+            throw new IllegalArgumentException();
         }
 
-        this.itemClass = itemClass;
+        setKeys(new ArrayAdapter<String>(keys));
     }
 
     /**
@@ -306,7 +341,14 @@ public class CSVSerializer implements Se
             Dictionary<String, Object> itemDictionary;
 
             try {
-                item = itemClass.newInstance();
+                if (itemType instanceof ParameterizedType) {
+                    ParameterizedType parameterizedItemType = (ParameterizedType)itemType;
+                    Class<?> rawItemType = (Class<?>)parameterizedItemType.getRawType();
+                    item = rawItemType.newInstance();
+                } else {
+                    Class<?> classItemType = (Class<?>)itemType;
+                    item = classItemType.newInstance();
+                }
 
                 if (item instanceof Dictionary<?, ?>) {
                     itemDictionary = (Dictionary<String, Object>)item;

Modified: pivot/trunk/core/src/org/apache/pivot/sql/ResultList.java
URL: http://svn.apache.org/viewvc/pivot/trunk/core/src/org/apache/pivot/sql/ResultList.java?rev=990353&r1=990352&r2=990353&view=diff
==============================================================================
--- pivot/trunk/core/src/org/apache/pivot/sql/ResultList.java (original)
+++ pivot/trunk/core/src/org/apache/pivot/sql/ResultList.java Sat Aug 28 12:28:07 2010
@@ -180,34 +180,41 @@ public class ResultList implements List<
    }
 
    private ResultSet resultSet;
-   private ArrayList<Field> fields;
 
-   private ListListenerList<Map<String, Object>> listListeners = new ListListenerList<Map<String,Object>>();
+   private ArrayList<Field> fields = new ArrayList<Field>();
 
-   public ResultList(ResultSet resultSet, Field... fields) {
-       this(resultSet, new ArrayAdapter<Field>(fields));
-   }
+   private ListListenerList<Map<String, Object>> listListeners = new ListListenerList<Map<String,Object>>();
 
-   public ResultList(ResultSet resultSet, Sequence<Field> fields) {
+   public ResultList(ResultSet resultSet) {
        if (resultSet == null) {
            throw new IllegalArgumentException();
        }
 
+       this.resultSet = resultSet;
+   }
+
+   public ResultSet getResultSet() {
+       return resultSet;
+   }
+
+   public Sequence<Field> getFields() {
+       return fields;
+   }
+
+   public void setFields(Sequence<Field> fields) {
        if (fields == null) {
            throw new IllegalArgumentException();
        }
 
-       this.resultSet = resultSet;
        this.fields = new ArrayList<Field>(fields);
    }
 
+   public void setFields(Field... fields) {
+       if (fields == null) {
+           throw new IllegalArgumentException();
+       }
 
-   public Field getField(int index) {
-       return fields.get(index);
-   }
-
-   public int getFieldCount() {
-       return fields.getLength();
+       setFields(new ArrayAdapter<Field>(fields));
    }
 
    @Override

Modified: pivot/trunk/tests/src/org/apache/pivot/tests/sql/ResultListTest.java
URL: http://svn.apache.org/viewvc/pivot/trunk/tests/src/org/apache/pivot/tests/sql/ResultListTest.java?rev=990353&r1=990352&r2=990353&view=diff
==============================================================================
--- pivot/trunk/tests/src/org/apache/pivot/tests/sql/ResultListTest.java (original)
+++ pivot/trunk/tests/src/org/apache/pivot/tests/sql/ResultListTest.java Sat Aug 28 12:28:07 2010
@@ -42,24 +42,24 @@ public class ResultListTest {
             ResultList resultList;
 
             resultSet = statement.executeQuery("SELECT * FROM result_list_test");
-            resultList = new ResultList(resultSet,
-                new ResultList.Field("i"),
+            resultList = new ResultList(resultSet);
+            resultList.setFields(new ResultList.Field("i"),
                 new ResultList.Field("f"),
                 new ResultList.Field("s"),
                 new ResultList.Field("b"));
             out.println(JSONSerializer.toString(resultList));
 
             resultSet = statement.executeQuery("SELECT * FROM result_list_test");
-            resultList = new ResultList(resultSet,
-                new ResultList.Field("i", "integer"),
+            resultList = new ResultList(resultSet);
+            resultList.setFields(new ResultList.Field("i", "integer"),
                 new ResultList.Field("f", "float"),
                 new ResultList.Field("s", "string"),
                 new ResultList.Field("b", "boolean"));
             out.println(JSONSerializer.toString(resultList));
 
             resultSet = statement.executeQuery("SELECT * FROM result_list_test");
-            resultList = new ResultList(resultSet,
-                new ResultList.Field("i", "integer", Integer.class),
+            resultList = new ResultList(resultSet);
+            resultList.setFields(new ResultList.Field("i", "integer", Integer.class),
                 new ResultList.Field("f", "float", Float.class),
                 new ResultList.Field("s", "string", String.class),
                 new ResultList.Field("b", "boolean", Boolean.class));
@@ -67,8 +67,8 @@ public class ResultListTest {
 
             // Test forward and backward iteration
             resultSet = statement.executeQuery("SELECT * FROM result_list_test");
-            resultList = new ResultList(resultSet,
-                new ResultList.Field("i"),
+            resultList = new ResultList(resultSet);
+            resultList.setFields(new ResultList.Field("i"),
                 new ResultList.Field("f"),
                 new ResultList.Field("s"),
                 new ResultList.Field("b"));

Modified: pivot/trunk/tutorials-server/src/org/apache/pivot/tutorials/webqueries/server/ExpenseServlet.java
URL: http://svn.apache.org/viewvc/pivot/trunk/tutorials-server/src/org/apache/pivot/tutorials/webqueries/server/ExpenseServlet.java?rev=990353&r1=990352&r2=990353&view=diff
==============================================================================
--- pivot/trunk/tutorials-server/src/org/apache/pivot/tutorials/webqueries/server/ExpenseServlet.java (original)
+++ pivot/trunk/tutorials-server/src/org/apache/pivot/tutorials/webqueries/server/ExpenseServlet.java Sat Aug 28 12:28:07 2010
@@ -44,18 +44,14 @@ public class ExpenseServlet extends Quer
     @Override
     @SuppressWarnings("unchecked")
     public void init() throws ServletException {
-        CSVSerializer csvSerializer = new CSVSerializer();
-        csvSerializer.getKeys().add("date");
-        csvSerializer.getKeys().add("type");
-        csvSerializer.getKeys().add("amount");
-        csvSerializer.getKeys().add("description");
-        csvSerializer.setItemClass(Expense.class);
+        CSVSerializer expenseSerializer = new CSVSerializer(Expense.class);
+        expenseSerializer.setKeys("date", "type", "amount", "description");
 
         // Load the initial expense data
         InputStream inputStream = ExpenseServlet.class.getResourceAsStream("expenses.csv");
 
         try {
-            expenses = (List<Expense>)csvSerializer.readObject(inputStream);
+            expenses = (List<Expense>)expenseSerializer.readObject(inputStream);
         } catch (IOException exception) {
             throw new ServletException(exception);
         } catch (SerializationException exception) {

Modified: pivot/trunk/tutorials/src/org/apache/pivot/tutorials/stocktracker/StockTrackerWindow.java
URL: http://svn.apache.org/viewvc/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/stocktracker/StockTrackerWindow.java?rev=990353&r1=990352&r2=990353&view=diff
==============================================================================
--- pivot/trunk/tutorials/src/org/apache/pivot/tutorials/stocktracker/StockTrackerWindow.java (original)
+++ pivot/trunk/tutorials/src/org/apache/pivot/tutorials/stocktracker/StockTrackerWindow.java Sat Aug 28 12:28:07 2010
@@ -307,17 +307,15 @@ public class StockTrackerWindow extends 
             getQuery.getParameters().put("s", symbolsArgument);
             getQuery.getParameters().put("f", "snl1ohgc1v");
 
-            CSVSerializer quoteSerializer = new CSVSerializer();
-            quoteSerializer.setItemClass(StockQuote.class);
-
-            quoteSerializer.getKeys().add("symbol");
-            quoteSerializer.getKeys().add("companyName");
-            quoteSerializer.getKeys().add("value");
-            quoteSerializer.getKeys().add("openingValue");
-            quoteSerializer.getKeys().add("highValue");
-            quoteSerializer.getKeys().add("lowValue");
-            quoteSerializer.getKeys().add("change");
-            quoteSerializer.getKeys().add("volume");
+            CSVSerializer quoteSerializer = new CSVSerializer(StockQuote.class);
+            quoteSerializer.setKeys("symbol",
+                "companyName",
+                "value",
+                "openingValue",
+                "highValue",
+                "lowValue",
+                "change",
+                "volume");
 
             getQuery.setSerializer(quoteSerializer);