Added methods to ColumnSortEvent.ListHandler to set the Handler's list and to retrieve sorting comparators that have been registered to Columns.

Review at http://gwt-code-reviews.appspot.com/1519803

Review by: jlabanca@google.com

git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@10520 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/user/cellview/client/ColumnSortEvent.java b/user/src/com/google/gwt/user/cellview/client/ColumnSortEvent.java
index 099767a..d4fa1fb 100644
--- a/user/src/com/google/gwt/user/cellview/client/ColumnSortEvent.java
+++ b/user/src/com/google/gwt/user/cellview/client/ColumnSortEvent.java
@@ -80,12 +80,22 @@
    */
   public static class ListHandler<T> implements Handler {
     private final Map<Column<?, ?>, Comparator<T>> comparators = new HashMap<Column<?, ?>, Comparator<T>>();
-    private final List<T> list;
+    private List<T> list;
 
     public ListHandler(List<T> list) {
       this.list = list;
     }
 
+    /**
+     * Returns the comparator that has been set for the specified column, or 
+     * null if no comparator has been set.
+     * 
+     * @param column the {@link Column}
+     */
+    public Comparator<T> getComparator(Column<T, ?> column) {
+      return comparators.get(column);
+    }
+
     public List<T> getList() {
       return list;
     }
@@ -124,6 +134,11 @@
     public void setComparator(Column<T, ?> column, Comparator<T> comparator) {
       comparators.put(column, comparator);
     }
+
+    public void setList(List<T> list) {
+      assert list != null : "list cannot be null"; 
+      this.list = list;
+    }
   }
 
   /**
diff --git a/user/test/com/google/gwt/user/cellview/client/ColumnSortEventTest.java b/user/test/com/google/gwt/user/cellview/client/ColumnSortEventTest.java
index 0cf4fe8..e0d6b94 100644
--- a/user/test/com/google/gwt/user/cellview/client/ColumnSortEventTest.java
+++ b/user/test/com/google/gwt/user/cellview/client/ColumnSortEventTest.java
@@ -74,11 +74,12 @@
     // Create a handler for the list of values.
     ListHandler<String> handler = new ListHandler<String>(values);
     IdentityColumn<String> col0 = new IdentityColumn<String>(new TextCell());
-    handler.setComparator(col0, new Comparator<String>() {
+    Comparator<String> col0Comparator = new Comparator<String>() {
       public int compare(String o1, String o2) {
         return o1.compareTo(o2);
       }
-    });
+    };
+    handler.setComparator(col0, col0Comparator);
     IdentityColumn<String> col1 = new IdentityColumn<String>(new TextCell());
     handler.setComparator(col1, null);
 
@@ -102,5 +103,34 @@
     assertEquals("c", values.get(0));
     assertEquals("b", values.get(1));
     assertEquals("a", values.get(2));
+    
+    // Retrieve the comparators.
+    assertEquals(col0Comparator, handler.getComparator(col0));
+    assertNull(handler.getComparator(col1));
+    assertNull(handler.getComparator(new IdentityColumn<String>(
+        new TextCell())));
+    
+    // Create some new unsorted values.
+    List<String> newValues = new ArrayList<String>();
+    newValues.add("e");
+    newValues.add("d");
+    newValues.add("f");
+    
+    // Update the handler to be for the new list of values.
+    handler.setList(newValues);
+    
+    // Sort the new list in ascending order.
+    sortList.push(col0);
+    handler.onColumnSort(new ColumnSortEvent(sortList));
+
+    // The new values, sorted in ascending order.
+    assertEquals("d", newValues.get(0));
+    assertEquals("e", newValues.get(1));
+    assertEquals("f", newValues.get(2));
+
+    // The old values, still sorted in descending order.
+    assertEquals("c", values.get(0));
+    assertEquals("b", values.get(1));
+    assertEquals("a", values.get(2));
   }
 }