Author: hlship
Date: Mon May 31 17:34:51 2010
New Revision: 949813

URL: http://svn.apache.org/viewvc?rev=949813&view=rev
Log:
Implement a number of methods of AbstractFlow in terms of creating an ArrayFlow 
and delegating to it

Modified:
    
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/func/AbstractFlow.java
    
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/func/ArrayFlow.java

Modified: 
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/func/AbstractFlow.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/func/AbstractFlow.java?rev=949813&r1=949812&r2=949813&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/func/AbstractFlow.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/func/AbstractFlow.java
 Mon May 31 17:34:51 2010
@@ -30,25 +30,25 @@ import org.apache.tapestry5.ioc.internal
  */
 abstract class AbstractFlow<T> implements Flow<T>
 {
-    private <X> X nyi()
-    {
-        throw new RuntimeException("Not yet implemented.");
-    }
-
     /**
      * Method limited to just AbstractFlow and its subclasses. Forces a 
resolve of the entire Flow,
      * and results in a mutable list of the values in the flow.
      */
-    List<T> toMutableList()
+    protected List<T> toMutableList()
     {
-        ArrayList<T> result = new ArrayList<T>();
+        return toMutableList(this);
+    }
 
-        Flow<T> cursor = this;
+    protected static <T> List<T> toMutableList(Flow<T> flow)
+    {
+        List<T> result = new ArrayList<T>();
 
-        while (!cursor.isEmpty())
+        Flow<T> current = flow;
+
+        while (!current.isEmpty())
         {
-            result.add(cursor.first());
-            cursor = cursor.rest();
+            result.add(current.first());
+            current = current.rest();
         }
 
         return result;
@@ -152,17 +152,17 @@ abstract class AbstractFlow<T> implement
 
     public Flow<T> reverse()
     {
-        return nyi();
+        return new ArrayFlow<T>(this).reverse();
     }
 
     public Flow<T> sort()
     {
-        return nyi();
+        return new ArrayFlow<T>(this).sort();
     }
 
     public Flow<T> sort(Comparator<? super T> comparator)
     {
-        return nyi();
+        return new ArrayFlow<T>(this).sort(comparator);
     }
 
     public List<T> toList()

Modified: 
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/func/ArrayFlow.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/func/ArrayFlow.java?rev=949813&r1=949812&r2=949813&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/func/ArrayFlow.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/func/ArrayFlow.java
 Mon May 31 17:34:51 2010
@@ -39,6 +39,12 @@ class ArrayFlow<T> extends AbstractFlow<
     // Guarded by this
     private Flow<T> rest;
 
+    /** Creates an ArrayFlow from the values in the other flow. */
+    ArrayFlow(Flow<T> flow)
+    {
+        this(toMutableList(flow));
+    }
+
     @SuppressWarnings("unchecked")
     ArrayFlow(Collection<T> values)
     {
@@ -55,8 +61,6 @@ class ArrayFlow<T> extends AbstractFlow<
         this.values = values;
         this.start = start;
         this.count = count;
-
-        assert count > 0;
     }
 
     public Flow<T> each(Worker<? super T> worker)
@@ -105,7 +109,7 @@ class ArrayFlow<T> extends AbstractFlow<
         return false;
     }
 
-    List<T> toMutableList()
+    protected List<T> toMutableList()
     {
         List<T> result = new ArrayList<T>(count);
 
@@ -146,8 +150,6 @@ class ArrayFlow<T> extends AbstractFlow<
 
     public Iterator<T> iterator()
     {
-        // Kind of inefficient but it works.
-
         return toList().iterator();
     }
 
@@ -171,5 +173,4 @@ class ArrayFlow<T> extends AbstractFlow<
 
         return new ArrayFlow<T>(values, start + 1, count - 1);
     }
-
 }


Reply via email to