Author: davsclaus
Date: Tue Jan 13 22:39:58 2009
New Revision: 734348

URL: http://svn.apache.org/viewvc?rev=734348&view=rev
Log:
CAMEL-1251: Dynamic recipient list not handles a single String with endpoints 
seperated with comma. Exposes a seperator attribute in Spring DSL to set it. 
Polished zip dataformat.

Added:
    
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithStringDelimitedHeaderTest.java
   (contents, props changed)
      - copied, changed from r734141, 
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithArrayHeaderTest.java
    
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListWithStringDelimitedHeaderTest.java
   (contents, props changed)
      - copied, changed from r734141, 
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListWithArrayHeaderTest.java
    
activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/recipientListWithStringDelimitedHeader.xml
   (contents, props changed)
      - copied, changed from r734141, 
activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/recipientListWithArrayHeader.xml
Modified:
    
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ZipDataFormat.java
    
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RecipientListType.java
    
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/dataformat/ZipDataFormat.java
    
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RecipientList.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/impl/ZipDataFormatTest.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/impl/ZipDataFormat.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ZipDataFormat.java?rev=734348&r1=734347&r2=734348&view=diff
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ZipDataFormat.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ZipDataFormat.java
 Tue Jan 13 22:39:58 2009
@@ -26,10 +26,10 @@
 import org.apache.camel.Exchange;
 import org.apache.camel.converter.IOConverter;
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.util.ExchangeHelper;
 
 public class ZipDataFormat implements DataFormat {
 
-    private static final int INITIALBYTEARRAYSIZE = 1048576;
     private int compressionLevel;
 
     public ZipDataFormat() {
@@ -40,43 +40,31 @@
         this.compressionLevel = compressionLevel;
     }
 
-    public void marshal(Exchange exchange, Object body, OutputStream stream)
+    public void marshal(Exchange exchange, Object graph, OutputStream stream)
         throws Exception {
-        InputStream is;
-        if (body instanceof InputStream) {
-            is = (InputStream)body;
-        }
-        is = exchange.getIn().getBody(InputStream.class);
+
+        InputStream is = 
exchange.getContext().getTypeConverter().convertTo(InputStream.class, graph);
         if (is == null) {
-            throw new IllegalArgumentException("Can't get the inputstream for 
ZipDataFormat mashalling");
+            throw new IllegalArgumentException("Cannot get the inputstream for 
ZipDataFormat mashalling");
         }
-       
-        DeflaterOutputStream zipOutput = new DeflaterOutputStream(stream, new 
Deflater(compressionLevel));
-        
-        // Compress the data
-        IOConverter.copy(is, zipOutput);
-        zipOutput.close();
 
+        DeflaterOutputStream zipOutput = new DeflaterOutputStream(stream, new 
Deflater(compressionLevel));
+        try {
+            IOConverter.copy(is, zipOutput);
+        } finally {
+            zipOutput.close();
+        }
     }
 
     public Object unmarshal(Exchange exchange, InputStream stream)
         throws Exception {
-        
-        InputStream is = stream;
-        if (is == null) {           
-            exchange.getIn().getBody(InputStream.class);
-        }
-        if (is == null) {
-            throw new IllegalArgumentException("Can't get the inputStream for 
ZipDataFormat unmashalling");
-        }
-        
+
+        InputStream is = ExchangeHelper.getMandatoryInBody(exchange, 
InputStream.class);
         InflaterInputStream unzipInput = new InflaterInputStream(is);
         
         // Create an expandable byte array to hold the inflated data
         ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        
-        IOConverter.copy(unzipInput, bos);        
-
+        IOConverter.copy(unzipInput, bos);
         return bos.toByteArray();
     }
 

Modified: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RecipientListType.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RecipientListType.java?rev=734348&r1=734347&r2=734348&view=diff
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RecipientListType.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RecipientListType.java
 Tue Jan 13 22:39:58 2009
@@ -18,10 +18,12 @@
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
 
 import org.apache.camel.Expression;
 import org.apache.camel.Processor;
+import org.apache.camel.builder.ExpressionBuilder;
 import org.apache.camel.builder.ExpressionClause;
 import org.apache.camel.model.language.ExpressionType;
 import org.apache.camel.processor.RecipientList;
@@ -36,6 +38,9 @@
 @XmlAccessorType(XmlAccessType.FIELD)
 public class RecipientListType extends ExpressionNode {
 
+    @XmlAttribute(required = false)
+    private String delimiter;
+
     public RecipientListType() {
     }
 
@@ -59,7 +64,14 @@
 
     @Override
     public Processor createProcessor(RouteContext routeContext) throws 
Exception {
-        return new 
RecipientList(getExpression().createExpression(routeContext));
+        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);
     }
     
     // Fluent API
@@ -71,4 +83,15 @@
     public ExpressionClause<RecipientListType> expression() {
         return ExpressionClause.createAndSetExpression(this);
     }
+
+    // Properties
+    //-------------------------------------------------------------------------
+
+    public String getDelimiter() {
+        return delimiter;
+    }
+
+    public void setDelimiter(String delimiter) {
+        this.delimiter = delimiter;
+    }
 }

Modified: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/dataformat/ZipDataFormat.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/dataformat/ZipDataFormat.java?rev=734348&r1=734347&r2=734348&view=diff
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/dataformat/ZipDataFormat.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/dataformat/ZipDataFormat.java
 Tue Jan 13 22:39:58 2009
@@ -36,7 +36,6 @@
     private int compressionLevel = Deflater.BEST_SPEED;
     
     public ZipDataFormat() {
-        
     }
 
     public ZipDataFormat(int compressionLevel) {

Modified: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RecipientList.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RecipientList.java?rev=734348&r1=734347&r2=734348&view=diff
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RecipientList.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RecipientList.java
 Tue Jan 13 22:39:58 2009
@@ -76,6 +76,10 @@
     }
 
     protected Endpoint resolveEndpoint(Exchange exchange, Object recipient) {
+        // trim strings as end users might have added spaces between separators
+        if (recipient instanceof String) {
+            recipient = ((String)recipient).trim();
+        }
         return ExchangeHelper.resolveEndpoint(exchange, recipient);
     }
 

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=734348&r1=734347&r2=734348&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
 Tue Jan 13 22:39:58 2009
@@ -30,6 +30,7 @@
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Scanner;
 
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
@@ -349,6 +350,11 @@
                     throw new UnsupportedOperationException();
                 }
             };
+        } else if (value instanceof String) {
+            Scanner scanner = new Scanner((String)value);
+            // use comma as delimiter for String values
+            scanner.useDelimiter(",");
+            return scanner;
         } else {
             return Collections.singletonList(value).iterator();
         }

Modified: 
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/ZipDataFormatTest.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/ZipDataFormatTest.java?rev=734348&r1=734347&r2=734348&view=diff
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/ZipDataFormatTest.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/ZipDataFormatTest.java
 Tue Jan 13 22:39:58 2009
@@ -19,21 +19,18 @@
 import java.io.ByteArrayOutputStream;
 import java.util.zip.Deflater;
 import java.util.zip.Inflater;
-import org.apache.camel.CamelContext;
+
+import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.Processor;
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.TestSupport;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 
-
-
 /**
  * Unit test of the zip data format.
  */
-public class ZipDataFormatTest extends TestSupport {
+public class ZipDataFormatTest extends ContextTestSupport {
     private static final String TEXT = "The Cow in Apple Time \n" 
         + "by: Robert Frost \n\n" 
         + "Something inspires the only cow of late\n" 
@@ -48,24 +45,12 @@
         + "She bellows on a knoll against the sky.\n" 
         + "Her udder shrivels and the milk goes dry.";
 
-    private CamelContext context;
-    private ProducerTemplate template;
-
-    
-    
-    protected void setUp() throws Exception {
-        context = new DefaultCamelContext();
-        template = context.createProducerTemplate();
-        template.start();
+    @Override
+    public boolean isUseRouteBuilder() {
+        return false;
     }
 
-    protected void tearDown() throws Exception {
-        template.stop();
-        context.stop();
-    }
-    
     private void sendText() throws Exception {
-        
         template.send("direct:start", new Processor() {
             public void process(Exchange exchange) throws Exception {
                 // Set the property of the charset encoding
@@ -78,7 +63,6 @@
     }
 
     public void testMarshalTextToZipBestCompression() throws Exception {
-       
         context.addRoutes(new RouteBuilder() {
             public void configure() {
                 
from("direct:start").marshal().zip(Deflater.BEST_COMPRESSION).process(new 
ZippedMessageProcessor());
@@ -90,7 +74,6 @@
     }
     
     public void testMarshalTextToZipBestSpeed() throws Exception {
-
         context.addRoutes(new RouteBuilder() {
             public void configure() {
                 
from("direct:start").marshal().zip(Deflater.BEST_SPEED).process(new 
ZippedMessageProcessor());
@@ -103,7 +86,6 @@
     }
 
     public void testMarshalTextToZipDefaultCompression() throws Exception {
-
         context.addRoutes(new RouteBuilder() {
             public void configure() {
                 
from("direct:start").marshal().zip(Deflater.DEFAULT_COMPRESSION).process(new 
ZippedMessageProcessor());
@@ -115,13 +97,13 @@
     }
     
     public void testUnMarshalTextToZip() throws Exception {
-
         context.addRoutes(new RouteBuilder() {
             public void configure() {
                 
from("direct:start").marshal().zip().unmarshal().zip().to("mock:result");
             }
         });
         context.start();
+
         MockEndpoint result = (MockEndpoint)context.getEndpoint("mock:result");
         result.expectedBodiesReceived(TEXT);
         sendText();

Copied: 
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithStringDelimitedHeaderTest.java
 (from r734141, 
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithArrayHeaderTest.java)
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithStringDelimitedHeaderTest.java?p2=activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithStringDelimitedHeaderTest.java&p1=activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithArrayHeaderTest.java&r1=734141&r2=734348&rev=734348&view=diff
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithArrayHeaderTest.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithStringDelimitedHeaderTest.java
 Tue Jan 13 22:39:58 2009
@@ -23,7 +23,7 @@
 /**
  * @version $Revision$
  */
-public class RecipientListWithArrayHeaderTest extends ContextTestSupport {
+public class RecipientListWithStringDelimitedHeaderTest extends 
ContextTestSupport {
 
     public void testSendingAMessageUsingMulticastReceivesItsOwnExchange() 
throws Exception {
         MockEndpoint x = getMockEndpoint("mock:x");
@@ -40,19 +40,18 @@
     }
 
     protected void sendBody() {
-        template.sendBodyAndHeader("direct:a", "answer", "recipientListHeader",
-                new String[] {"mock:x", "mock:y", "mock:z"});
+        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("recipientListHeader"));
+                from("direct:a").recipientList(header("myHeader"));
                 // END SNIPPET: example
             }
         };
 
     }
 
-}
+}
\ No newline at end of file

Propchange: 
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithStringDelimitedHeaderTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithStringDelimitedHeaderTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: 
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithStringDelimitedHeaderTest.java
------------------------------------------------------------------------------
    svn:mergeinfo = 

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=734348&r1=734347&r2=734348&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
 Tue Jan 13 22:39:58 2009
@@ -132,4 +132,13 @@
         Iterator<String> iterator = list.iterator();
         assertSame("Should return the same iterator", iterator, 
ObjectHelper.createIterator(iterator));
     }
+
+    public void testCreateIteratorWithStringAndCommaSeparator() {
+        String s = "a,b,c";
+        Iterator it = ObjectHelper.createIterator(s);
+        assertEquals("a", it.next());
+        assertEquals("b", it.next());
+        assertEquals("c", it.next());
+    }
+
 }

Copied: 
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListWithStringDelimitedHeaderTest.java
 (from r734141, 
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListWithArrayHeaderTest.java)
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListWithStringDelimitedHeaderTest.java?p2=activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListWithStringDelimitedHeaderTest.java&p1=activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListWithArrayHeaderTest.java&r1=734141&r2=734348&rev=734348&view=diff
==============================================================================
--- 
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListWithArrayHeaderTest.java
 (original)
+++ 
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListWithStringDelimitedHeaderTest.java
 Tue Jan 13 22:39:58 2009
@@ -17,12 +17,12 @@
 package org.apache.camel.spring.processor;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.processor.RecipientListWithArrayHeaderTest;
+import org.apache.camel.processor.RecipientListWithStringDelimitedHeaderTest;
 import static 
org.apache.camel.spring.processor.SpringTestHelper.createSpringCamelContext;
 
-public class SpringRecipientListWithArrayHeaderTest extends 
RecipientListWithArrayHeaderTest {
+public class SpringRecipientListWithStringDelimitedHeaderTest extends 
RecipientListWithStringDelimitedHeaderTest {
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this,
-                
"org/apache/camel/spring/processor/recipientListWithArrayHeader.xml");
+                
"org/apache/camel/spring/processor/recipientListWithStringDelimitedHeader.xml");
     }
-}
+}
\ No newline at end of file

Propchange: 
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListWithStringDelimitedHeaderTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListWithStringDelimitedHeaderTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: 
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListWithStringDelimitedHeaderTest.java
------------------------------------------------------------------------------
    svn:mergeinfo = 

Copied: 
activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/recipientListWithStringDelimitedHeader.xml
 (from r734141, 
activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/recipientListWithArrayHeader.xml)
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/recipientListWithStringDelimitedHeader.xml?p2=activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/recipientListWithStringDelimitedHeader.xml&p1=activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/recipientListWithArrayHeader.xml&r1=734141&r2=734348&rev=734348&view=diff
==============================================================================
--- 
activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/recipientListWithArrayHeader.xml
 (original)
+++ 
activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/recipientListWithStringDelimitedHeader.xml
 Tue Jan 13 22:39:58 2009
@@ -23,13 +23,14 @@
     ">
 
   <!--
-     from("direct:a").recipientList(header("recipientListHeader"));
+     
from("direct:a").recipientList(header("recipientListHeader").tokenize(","));
   -->
   <camelContext id="camel" 
xmlns="http://activemq.apache.org/camel/schema/spring";>
     <route>
       <from uri="direct:a"/>
-      <recipientList>
-        <header>recipientListHeader</header>
+      <!-- use comma as a delimiter for String based values -->
+      <recipientList delimiter=",">
+        <header>myHeader</header>
       </recipientList>    
     </route>
   </camelContext>  

Propchange: 
activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/recipientListWithStringDelimitedHeader.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/recipientListWithStringDelimitedHeader.xml
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: 
activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/recipientListWithStringDelimitedHeader.xml
------------------------------------------------------------------------------
    svn:mergeinfo = 

Propchange: 
activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/recipientListWithStringDelimitedHeader.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml


Reply via email to