Author: davsclaus
Date: Fri Oct 16 05:55:44 2009
New Revision: 825774

URL: http://svn.apache.org/viewvc?rev=825774&view=rev
Log:
CAMEL-2070: Fixed recipient list using custom delimiter.

Added:
    
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithDelimiterTest.java
      - copied, changed from r825755, 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithStringDelimitedHeaderTest.java
Modified:
    
camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java
    
camel/trunk/camel-core/src/main/java/org/apache/camel/model/RecipientListDefinition.java
    
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RecipientList.java

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java?rev=825774&r1=825773&r2=825774&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java
 Fri Oct 16 05:55:44 2009
@@ -962,7 +962,9 @@
 
     /**
      * <a href="http://camel.apache.org/recipient-list.html";>Recipient List 
EIP:</a>
-     * Creates a dynamic recipient list allowing you to route messages to a 
number of dynamically specified recipients
+     * Creates a dynamic recipient list allowing you to route messages to a 
number of dynamically specified recipients.
+     * <p/>
+     * Will use comma as default delimiter.
      *
      * @param recipients expression to decide the destinations
      * @return the builder
@@ -978,6 +980,22 @@
      * <a href="http://camel.apache.org/recipient-list.html";>Recipient List 
EIP:</a>
      * Creates a dynamic recipient list allowing you to route messages to a 
number of dynamically specified recipients
      *
+     * @param recipients expression to decide the destinations
+     * @param delimiter  a custom delimiter to use
+     * @return the builder
+     */
+    @SuppressWarnings("unchecked")
+    public Type recipientList(Expression recipients, String delimiter) {
+        RecipientListDefinition answer = new 
RecipientListDefinition(recipients);
+        answer.setDelimiter(delimiter);
+        addOutput(answer);
+        return (Type) this;
+    }
+
+    /**
+     * <a href="http://camel.apache.org/recipient-list.html";>Recipient List 
EIP:</a>
+     * Creates a dynamic recipient list allowing you to route messages to a 
number of dynamically specified recipients
+     *
      * @return the expression clause to configure the expression to decide the 
destinations
      */
     public ExpressionClause<ProcessorDefinition<Type>> recipientList() {

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/model/RecipientListDefinition.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RecipientListDefinition.java?rev=825774&r1=825773&r2=825774&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/model/RecipientListDefinition.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/model/RecipientListDefinition.java
 Fri Oct 16 05:55:44 2009
@@ -66,24 +66,13 @@
     public Processor createProcessor(RouteContext routeContext) throws 
Exception {
         Expression expression = getExpression().createExpression(routeContext);
 
-        // add a tokenizer if we have a delimiter
         if (delimiter != null) {
-            expression = ExpressionBuilder.tokenizeExpression(expression, 
delimiter);
+            return new RecipientList(expression, delimiter);
+        } else {
+            return new RecipientList(expression);
         }
-
-        return new RecipientList(expression);
     }
     
-    // Fluent API
-    //-------------------------------------------------------------------------
-    /**
-     * Set the expression that RecipientListType will use
-     * @return the builder
-     */
-    public ExpressionClause<RecipientListDefinition> expression() {
-        return ExpressionClause.createAndSetExpression(this);
-    }
-
     // Properties
     //-------------------------------------------------------------------------
 

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RecipientList.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RecipientList.java?rev=825774&r1=825773&r2=825774&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RecipientList.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RecipientList.java
 Fri Oct 16 05:55:44 2009
@@ -43,13 +43,23 @@
 public class RecipientList extends ServiceSupport implements Processor {
     private ProducerCache producerCache;
     private Expression expression;
+    private final String delimiter;
 
     public RecipientList() {
+        // use comma by default as delimiter
+        this.delimiter = ",";
     }
 
     public RecipientList(Expression expression) {
-        notNull(expression, "expression");
+        // use comma by default as delimiter
+        this(expression, ",");
+    }
+
+    public RecipientList(Expression expression, String delimiter) {
+        ObjectHelper.notNull(expression, "expression");
+        ObjectHelper.notEmpty(delimiter, "delimiter");
         this.expression = expression;
+        this.delimiter = delimiter;
     }
 
     @Override
@@ -66,7 +76,7 @@
      * Sends the given exchange to the recipient list
      */
     public void sendToRecipientList(Exchange exchange, Object receipientList) 
throws Exception {
-        Iterator iter = ObjectHelper.createIterator(receipientList);
+        Iterator iter = ObjectHelper.createIterator(receipientList, delimiter);
         List<Processor> processors = new ArrayList<Processor>();
         while (iter.hasNext()) {
             Object recipient = iter.next();

Copied: 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithDelimiterTest.java
 (from r825755, 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithStringDelimitedHeaderTest.java)
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithDelimiterTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithDelimiterTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithStringDelimitedHeaderTest.java&r1=825755&r2=825774&rev=825774&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithStringDelimitedHeaderTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithDelimiterTest.java
 Fri Oct 16 05:55:44 2009
@@ -23,9 +23,22 @@
 /**
  * @version $Revision$
  */
-public class RecipientListWithStringDelimitedHeaderTest extends 
ContextTestSupport {
+public class RecipientListWithDelimiterTest extends ContextTestSupport {
+
+    @Override
+    public boolean isUseRouteBuilder() {
+        return false;
+    }
+
+    public void testRecipientList() throws Exception {
+        context.addRoutes(new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:a").recipientList(header("myHeader"), "#");
+            }
+        });
+        context.start();
 
-    public void testSendingAMessageUsingMulticastReceivesItsOwnExchange() 
throws Exception {
         MockEndpoint x = getMockEndpoint("mock:x");
         MockEndpoint y = getMockEndpoint("mock:y");
         MockEndpoint z = getMockEndpoint("mock:z");
@@ -39,19 +52,30 @@
         assertMockEndpointsSatisfied();
     }
 
-    protected void sendBody() {
-        template.sendBodyAndHeader("direct:a", "answer", "myHeader", "mock:x, 
mock:y, mock:z");
-    }
-
-    protected RouteBuilder createRouteBuilder() {
-        return new RouteBuilder() {
-            public void configure() {
-                // START SNIPPET: example
-                from("direct:a").recipientList(header("myHeader"));
-                // END SNIPPET: example
+    public void testRecipientListWithTokenizer() throws Exception {
+        context.addRoutes(new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                
from("direct:a").recipientList(header("myHeader").tokenize("#"));
             }
-        };
+        });
+        context.start();
+
+        MockEndpoint x = getMockEndpoint("mock:x");
+        MockEndpoint y = getMockEndpoint("mock:y");
+        MockEndpoint z = getMockEndpoint("mock:z");
 
+        x.expectedBodiesReceived("answer");
+        y.expectedBodiesReceived("answer");
+        z.expectedBodiesReceived("answer");
+
+        sendBody();
+
+        assertMockEndpointsSatisfied();
+    }
+
+    protected void sendBody() {
+        template.sendBodyAndHeader("direct:a", "answer", "myHeader", 
"mock:x#mock:y#mock:z");
     }
 
 }
\ No newline at end of file


Reply via email to