You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ge...@apache.org on 2008/09/08 22:56:21 UTC

svn commit: r693267 - in /activemq/camel/trunk/camel-core/src: main/java/org/apache/camel/builder/ main/java/org/apache/camel/converter/ main/java/org/apache/camel/processor/ main/java/org/apache/camel/util/ test/java/org/apache/camel/converter/ test/j...

Author: gertv
Date: Mon Sep  8 13:56:19 2008
New Revision: 693267

URL: http://svn.apache.org/viewvc?rev=693267&view=rev
Log:
CAMEL-876: part 1 -- return a Scanner/Iterator from the Expression instead of the entire List at once

Added:
    activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/CollectionConverterTest.java
Modified:
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/converter/CollectionConverter.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/MulticastProcessor.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
    activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/util/ObjectHelperTest.java

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java?rev=693267&r1=693266&r2=693267&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java Mon Sep  8 13:56:19 2008
@@ -406,18 +406,10 @@
                                                                         final String token) {
         return new Expression<E>() {
             public Object evaluate(E exchange) {
-                List<String> answer = new ArrayList<String>();
-
                 Object value = expression.evaluate(exchange);
-                Scanner scanner = getScanner(expression, exchange, value);
-                if (scanner != null) {
-                    scanner.useDelimiter(token);
-                    while (scanner.hasNext()) {
-                        answer.add(scanner.next());
-                    }
-                }
-
-                return answer;
+                Scanner scanner = getScanner(exchange, value);
+                scanner.useDelimiter(token);
+                return scanner;
             }
 
             @Override
@@ -436,18 +428,10 @@
         final Pattern pattern = Pattern.compile(regexTokenizer);
         return new Expression<E>() {
             public Object evaluate(E exchange) {
-                List<String> answer = new ArrayList<String>();
-
                 Object value = expression.evaluate(exchange);
-                Scanner scanner = getScanner(expression, exchange, value);
-                if (scanner != null) {
-                    scanner.useDelimiter(regexTokenizer);
-                    while (scanner.hasNext()) {
-                        answer.add(scanner.next());
-                    }
-                }
-
-                return answer;
+                Scanner scanner = getScanner(exchange, value);
+                scanner.useDelimiter(regexTokenizer);
+                return scanner;
             }
 
             @Override
@@ -457,7 +441,7 @@
         };
     }
 
-    private static Scanner getScanner(Expression expression, Exchange exchange, Object value) {
+    private static Scanner getScanner(Exchange exchange, Object value) {
         String charset = exchange.getProperty(Exchange.CHARSET_NAME, String.class);
 
         Scanner scanner = null;
@@ -486,6 +470,10 @@
                 scanner = new Scanner(text);
             }
         }
+        
+        if (scanner == null) {
+            scanner = new Scanner("");
+        }
         return scanner;
     }
 

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/converter/CollectionConverter.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/converter/CollectionConverter.java?rev=693267&r1=693266&r2=693267&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/converter/CollectionConverter.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/converter/CollectionConverter.java Mon Sep  8 13:56:19 2008
@@ -22,6 +22,7 @@
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Hashtable;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
@@ -70,6 +71,18 @@
     public static List toList(Collection collection) {
         return new ArrayList(collection);
     }
+    
+    /**
+     * Converts an {@link Iterator} to a {@link ArrayList}
+     */
+    @Converter
+    public static ArrayList toArrayList(Iterator it) {
+        ArrayList list = new ArrayList();
+        while (it.hasNext()) {
+            list.add(it.next());
+        }
+        return list;
+    }
 
     @Converter
     public static Set toSet(Object[] array) {

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/MulticastProcessor.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/MulticastProcessor.java?rev=693267&r1=693266&r2=693267&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/MulticastProcessor.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/MulticastProcessor.java Mon Sep  8 13:56:19 2008
@@ -139,7 +139,7 @@
         Exchange result = null;
 
         List<ProcessorExchangePair> pairs = createProcessorExchangePairs(exchange);
-
+        
         // Parallel Processing the producer
         if (isParallelProcessing) {
             Exchange[] exchanges = new Exchange[pairs.size()];

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java?rev=693267&r1=693266&r2=693267&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java Mon Sep  8 13:56:19 2008
@@ -239,6 +239,8 @@
     public static Iterator createIterator(Object value) {
         if (value == null) {
             return Collections.EMPTY_LIST.iterator();
+        } else if (value instanceof Iterator) {
+            return (Iterator) value;
         } else if (value instanceof Collection) {
             Collection collection = (Collection)value;
             return collection.iterator();

Added: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/CollectionConverterTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/CollectionConverterTest.java?rev=693267&view=auto
==============================================================================
--- activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/CollectionConverterTest.java (added)
+++ activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/CollectionConverterTest.java Mon Sep  8 13:56:19 2008
@@ -0,0 +1,43 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.converter;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+/**
+ * Test cases for {@link CollectionConverter}
+ */
+@SuppressWarnings("unchecked")
+public class CollectionConverterTest extends TestCase {
+    
+    private static final List<String> SMURFS = Arrays.asList("Papa smurf", "Smurfette", "Hefty smurf", "Jokey smurf");
+
+    public void testIteratorToList() throws Exception {
+        assertSmurfs(CollectionConverter.toArrayList(SMURFS.iterator()));
+    }
+
+    private void assertSmurfs(Collection<String> result) {
+        assertEquals(SMURFS.size(), result.size());
+        for (String key : result) {
+            assertTrue(SMURFS.contains(key));
+        }
+    }
+}

Modified: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/util/ObjectHelperTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/util/ObjectHelperTest.java?rev=693267&r1=693266&r2=693267&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/util/ObjectHelperTest.java (original)
+++ activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/util/ObjectHelperTest.java Mon Sep  8 13:56:19 2008
@@ -17,8 +17,11 @@
 package org.apache.camel.util;
 
 import java.lang.reflect.Method;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
 
 import junit.framework.TestCase;
 
@@ -124,4 +127,9 @@
         assertTrue(ObjectHelper.equalByteArray(a, b));
     }
 
+    public void testCreateIterator() {
+        List<String> list = new ArrayList<String>();
+        Iterator<String> iterator = list.iterator();
+        assertSame("Should return the same iterator", iterator, ObjectHelper.createIterator(iterator));
+    }
 }