You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2011/11/12 16:00:18 UTC

svn commit: r1201276 - in /camel/trunk/components/camel-bindy/src: main/java/org/apache/camel/dataformat/bindy/ main/java/org/apache/camel/dataformat/bindy/annotation/ test/java/org/apache/camel/dataformat/bindy/csv2/

Author: davsclaus
Date: Sat Nov 12 15:00:17 2011
New Revision: 1201276

URL: http://svn.apache.org/viewvc?rev=1201276&view=rev
Log:
CAMEL-4672: Added quote option to CsvRecord in bindy to make it easy to configure using a quote when unmarshalling to CSV.

Added:
    camel/trunk/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv2/BindyMarshalWithQuoteTest.java
      - copied, changed from r1201263, camel/trunk/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv2/BindyUnmarshalCommaIssueTest.java
Modified:
    camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyCsvFactory.java
    camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/annotation/CsvRecord.java
    camel/trunk/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv2/WeatherModel.java

Modified: camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyCsvFactory.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyCsvFactory.java?rev=1201276&r1=1201275&r2=1201276&view=diff
==============================================================================
--- camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyCsvFactory.java (original)
+++ camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyCsvFactory.java Sat Nov 12 15:00:17 2011
@@ -63,6 +63,7 @@ public class BindyCsvFactory extends Bin
     private boolean skipFirstLine;
     private boolean generateHeaderColumnNames;
     private boolean messageOrdered;
+    private String quote;
 
     public BindyCsvFactory(PackageScanClassResolver resolver, String... packageNames) throws Exception {
         super(resolver, packageNames);
@@ -288,7 +289,14 @@ public class BindyCsvFactory extends Bin
                 while (itx.hasNext()) {
                     String res = (String)itx.next();
                     if (res != null) {
+                        // the field may be enclosed in quotes if a quote was configured
+                        if (quote != null) {
+                            buffer.append(quote);
+                        }
                         buffer.append(res);
+                        if (quote != null) {
+                            buffer.append(quote);
+                        }
                     }
 
                     if (itx.hasNext()) {
@@ -534,6 +542,11 @@ public class BindyCsvFactory extends Bin
                     // Get isOrdered parameter
                     messageOrdered = record.isOrdered();
                     LOG.debug("Must CSV record be ordered: {}", messageOrdered);
+
+                    if (ObjectHelper.isNotEmpty(record.quote())) {
+                        quote = record.quote();
+                        LOG.debug("Quoting columns with: {}", quote);
+                    }
                 }
 
                 if (section != null) {

Modified: camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/annotation/CsvRecord.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/annotation/CsvRecord.java?rev=1201276&r1=1201275&r2=1201276&view=diff
==============================================================================
--- camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/annotation/CsvRecord.java (original)
+++ camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/annotation/CsvRecord.java Sat Nov 12 15:00:17 2011
@@ -39,47 +39,40 @@ public @interface CsvRecord {
 
     /**
      * Name describing the record (optional)
-     * 
-     * @return String
      */
     String name() default "";
 
     /**
      * Separator used to split a record in tokens (mandatory)
-     * 
-     * @return String
      */
     String separator();
 
     /**
      * The skipFirstLine parameter will allow to skip or not the first line of a
      * CSV file. This line often contains columns definition
-     * 
-     * @return boolean
      */
     boolean skipFirstLine() default false;
 
     /**
      * Character to be used to add a carriage return after each record
-     * (optional) Three values can be used : WINDOWS, UNIX or MAC
-     * 
-     * @return String
+     * (optional) Three values can be used : WINDOWS, UNIX or MAC.
      */
     String crlf() default "WINDOWS";
 
     /**
      * The generateHeaderColumns parameter allow to add in the CSV generated the
      * header containing names of the columns
-     * 
-     * @return boolean
      */
     boolean generateHeaderColumns() default false;
 
     /**
      * Indicates if the message must be ordered in output
-     * 
-     * @return boolean
      */
     boolean isOrdered() default false;
 
+    /**
+     * Whether to marshal columns with the given quote character (optional)
+     */
+    String quote() default "";
+
 }

Copied: camel/trunk/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv2/BindyMarshalWithQuoteTest.java (from r1201263, camel/trunk/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv2/BindyUnmarshalCommaIssueTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv2/BindyMarshalWithQuoteTest.java?p2=camel/trunk/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv2/BindyMarshalWithQuoteTest.java&p1=camel/trunk/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv2/BindyUnmarshalCommaIssueTest.java&r1=1201263&r2=1201276&rev=1201276&view=diff
==============================================================================
--- camel/trunk/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv2/BindyUnmarshalCommaIssueTest.java (original)
+++ camel/trunk/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv2/BindyMarshalWithQuoteTest.java Sat Nov 12 15:00:17 2011
@@ -16,90 +16,31 @@
  */
 package org.apache.camel.dataformat.bindy.csv2;
 
-import java.util.List;
-import java.util.Map;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.dataformat.bindy.util.Converter;
 import org.apache.camel.model.dataformat.BindyType;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
 /**
- *                                cd wo
+ *
  */
-public class BindyUnmarshalCommaIssueTest extends CamelTestSupport {
+public class BindyMarshalWithQuoteTest extends CamelTestSupport {
 
     @Test
-    public void testBindyUnmarshalNoCommaIssue() throws Exception {
+    public void testBindyMarshalWithQuote() throws Exception {
         MockEndpoint mock = getMockEndpoint("mock:result");
-        mock.expectedMessageCount(1);
-
-        String body = "123,\"Wednesday November 9 2011\",\"Central California\"";
-        template.sendBody("direct:start", body);
-
-        assertMockEndpointsSatisfied();
+        mock.expectedBodiesReceived("\"123\",\"Wednesday, November 9, 2011\",\"Central California\"" + Converter.getStringCarriageReturn("WINDOWS"));
 
-        Map map = (Map) mock.getReceivedExchanges().get(0).getIn().getBody(List.class).get(0);
-        WeatherModel model = (WeatherModel) map.values().iterator().next();
+        WeatherModel model = new WeatherModel();
+        model.setId(123);
+        model.setDate("Wednesday, November 9, 2011");
+        model.setPlace("Central California");
 
-        assertEquals(123, model.getId());
-        assertEquals("Wednesday November 9 2011", model.getDate());
-        assertEquals("Central California", model.getPlace());
-    }
-
-    @Test
-    public void testBindyUnmarshalCommaIssue() throws Exception {
-        MockEndpoint mock = getMockEndpoint("mock:result");
-        mock.expectedMessageCount(1);
-
-        String body = "123,\"Wednesday, November 9, 2011\",\"Central California\"";
-        template.sendBody("direct:start", body);
+        template.sendBody("direct:start", model);
 
         assertMockEndpointsSatisfied();
-
-        Map map = (Map) mock.getReceivedExchanges().get(0).getIn().getBody(List.class).get(0);
-        WeatherModel model = (WeatherModel) map.values().iterator().next();
-
-        assertEquals(123, model.getId());
-        assertEquals("Wednesday, November 9, 2011", model.getDate());
-        assertEquals("Central California", model.getPlace());
-    }
-
-    @Test
-    public void testBindyUnmarshalCommaIssueTwo() throws Exception {
-        MockEndpoint mock = getMockEndpoint("mock:result");
-        mock.expectedMessageCount(1);
-
-        String body = "123,\"Wednesday, November 9, 2011\",\"Central California, United States\"";
-        template.sendBody("direct:start", body);
-
-        assertMockEndpointsSatisfied();
-
-        Map map = (Map) mock.getReceivedExchanges().get(0).getIn().getBody(List.class).get(0);
-        WeatherModel model = (WeatherModel) map.values().iterator().next();
-
-        assertEquals(123, model.getId());
-        assertEquals("Wednesday, November 9, 2011", model.getDate());
-        assertEquals("Central California, United States", model.getPlace());
-    }
-
-    @Test
-    public void testBindyUnmarshalSingleQuoteCommaIssueTwo() throws Exception {
-        MockEndpoint mock = getMockEndpoint("mock:result");
-        mock.expectedMessageCount(1);
-
-        String body = "123,'Wednesday, November 9, 2011','Central California, United States'";
-        template.sendBody("direct:start", body);
-
-        assertMockEndpointsSatisfied();
-
-        Map map = (Map) mock.getReceivedExchanges().get(0).getIn().getBody(List.class).get(0);
-        WeatherModel model = (WeatherModel) map.values().iterator().next();
-
-        assertEquals(123, model.getId());
-        assertEquals("Wednesday, November 9, 2011", model.getDate());
-        assertEquals("Central California, United States", model.getPlace());
     }
 
     @Override
@@ -108,7 +49,7 @@ public class BindyUnmarshalCommaIssueTes
             @Override
             public void configure() throws Exception {
                 from("direct:start")
-                    .unmarshal().bindy(BindyType.Csv, "org.apache.camel.dataformat.bindy.csv2")
+                    .marshal().bindy(BindyType.Csv, "org.apache.camel.dataformat.bindy.csv2")
                     .to("mock:result");
             }
         };

Modified: camel/trunk/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv2/WeatherModel.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv2/WeatherModel.java?rev=1201276&r1=1201275&r2=1201276&view=diff
==============================================================================
--- camel/trunk/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv2/WeatherModel.java (original)
+++ camel/trunk/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv2/WeatherModel.java Sat Nov 12 15:00:17 2011
@@ -22,7 +22,7 @@ import org.apache.camel.dataformat.bindy
 /**
  *
  */
-@CsvRecord(separator = ",")
+@CsvRecord(separator = ",", quote = "\"")
 public class WeatherModel {
 
     @DataField(pos = 1)