Author: markt
Date: Mon Jul 15 13:16:03 2013
New Revision: 1503230

URL: http://svn.apache.org/r1503230
Log:
Support arrays as well as collections as the source for a Stream

Modified:
    tomcat/trunk/java/org/apache/el/stream/StreamELResolverImpl.java
    tomcat/trunk/test/org/apache/el/stream/TestCollectionOperations.java

Modified: tomcat/trunk/java/org/apache/el/stream/StreamELResolverImpl.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/el/stream/StreamELResolverImpl.java?rev=1503230&r1=1503229&r2=1503230&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/el/stream/StreamELResolverImpl.java (original)
+++ tomcat/trunk/java/org/apache/el/stream/StreamELResolverImpl.java Mon Jul 15 
13:16:03 2013
@@ -17,6 +17,7 @@
 package org.apache.el.stream;
 
 import java.beans.FeatureDescriptor;
+import java.lang.reflect.Array;
 import java.util.Collection;
 import java.util.Iterator;
 
@@ -63,7 +64,8 @@ public class StreamELResolverImpl extend
 
         if ("stream".equals(method) && params.length == 0) {
             if (base.getClass().isArray()) {
-                // TODO handle array source
+                context.setPropertyResolved(true);
+                return new Stream(new ArrayIterator(base));
             } else if (base instanceof Collection) {
                 context.setPropertyResolved(true);
                 return new Stream(((Collection<?>) base).iterator());
@@ -73,4 +75,32 @@ public class StreamELResolverImpl extend
         // Not for handling by this resolver
         return null;
     }
+
+
+    private static class ArrayIterator implements Iterator<Object> {
+
+        private final Object base;
+        private final int size;
+        private int index = 0;
+
+        public ArrayIterator(Object base) {
+            this.base = base;
+            size = Array.getLength(base);
+        }
+
+        @Override
+        public boolean hasNext() {
+            return size > index;
+        }
+
+        @Override
+        public Object next() {
+            return Array.get(base, index++);
+        }
+
+        @Override
+        public void remove() {
+            throw new UnsupportedOperationException();
+        }
+    }
 }

Modified: tomcat/trunk/test/org/apache/el/stream/TestCollectionOperations.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/el/stream/TestCollectionOperations.java?rev=1503230&r1=1503229&r2=1503230&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/el/stream/TestCollectionOperations.java 
(original)
+++ tomcat/trunk/test/org/apache/el/stream/TestCollectionOperations.java Mon 
Jul 15 13:16:03 2013
@@ -38,4 +38,21 @@ public class TestCollectionOperations {
 
         Assert.assertEquals(expected, result);
     }
+
+
+    @Test
+    public void testToList02() {
+        ELProcessor processor = new ELProcessor();
+        String[] src = new String[] { "a", "b", "c" };
+        processor.defineBean("src", src);
+        Object result = processor.getValue("src.stream().toList()",
+                List.class);
+        List<String> expected = new ArrayList<>(3);
+        expected.add("a");
+        expected.add("b");
+        expected.add("c");
+
+        Assert.assertEquals(expected, result);
+    }
+
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to