Author: bvahdat Date: Sat Mar 17 20:55:23 2012 New Revision: 1302006 URL: http://svn.apache.org/viewvc?rev=1302006&view=rev Log: CAMEL-5105: Add the options configRef and strategyRef to csv data format in XML DSL.
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/model/dataformat/CsvDataFormat.java camel/trunk/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalAutogenColumnsSpringTest.java camel/trunk/components/camel-csv/src/test/resources/org/apache/camel/dataformat/csv/CsvMarshalAutogenColumnsSpringTest-context.xml Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/model/dataformat/CsvDataFormat.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/dataformat/CsvDataFormat.java?rev=1302006&r1=1302005&r2=1302006&view=diff ============================================================================== --- camel/trunk/camel-core/src/main/java/org/apache/camel/model/dataformat/CsvDataFormat.java (original) +++ camel/trunk/camel-core/src/main/java/org/apache/camel/model/dataformat/CsvDataFormat.java Sat Mar 17 20:55:23 2012 @@ -23,6 +23,9 @@ import javax.xml.bind.annotation.XmlRoot import org.apache.camel.model.DataFormatDefinition; import org.apache.camel.spi.DataFormat; +import org.apache.camel.spi.RouteContext; +import org.apache.camel.util.CamelContextHelper; +import org.apache.camel.util.ObjectHelper; /** * Represents a CSV (Comma Separated Values) {@link org.apache.camel.spi.DataFormat} @@ -36,6 +39,10 @@ public class CsvDataFormat extends DataF private Boolean autogenColumns; @XmlAttribute private String delimiter; + @XmlAttribute + private String configRef; + @XmlAttribute + private String strategyRef; public CsvDataFormat() { super("csv"); @@ -62,6 +69,38 @@ public class CsvDataFormat extends DataF this.delimiter = delimiter; } + public String getConfigRef() { + return configRef; + } + + public void setConfigRef(String configRef) { + this.configRef = configRef; + } + + public String getStrategyRef() { + return strategyRef; + } + + public void setStrategyRef(String strategyRef) { + this.strategyRef = strategyRef; + } + + @Override + protected DataFormat createDataFormat(RouteContext routeContext) { + DataFormat csvFormat = super.createDataFormat(routeContext); + + if (ObjectHelper.isNotEmpty(configRef)) { + Object config = CamelContextHelper.mandatoryLookup(routeContext.getCamelContext(), configRef); + setProperty(csvFormat, "config", config); + } + if (ObjectHelper.isNotEmpty(strategyRef)) { + Object strategy = CamelContextHelper.mandatoryLookup(routeContext.getCamelContext(), strategyRef); + setProperty(csvFormat, "strategy", strategy); + } + + return csvFormat; + } + @Override protected void configureDataFormat(DataFormat dataFormat) { if (autogenColumns != null) { Modified: camel/trunk/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalAutogenColumnsSpringTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalAutogenColumnsSpringTest.java?rev=1302006&r1=1302005&r2=1302006&view=diff ============================================================================== --- camel/trunk/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalAutogenColumnsSpringTest.java (original) +++ camel/trunk/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalAutogenColumnsSpringTest.java Sat Mar 17 20:55:23 2012 @@ -30,8 +30,8 @@ import org.junit.Test; import org.springframework.context.support.ClassPathXmlApplicationContext; /** - * Spring based integration test for the <code>CsvDataFormat</code> - * @version + * Spring based integration test for the <code>CsvDataFormat</code> demonstrating the usage of + * the <tt>autogenColumns</tt>, <tt>configRef</tt> and <tt>strategyRef</tt> options. */ public class CsvMarshalAutogenColumnsSpringTest extends CamelSpringTestSupport { @@ -42,23 +42,33 @@ public class CsvMarshalAutogenColumnsSpr private MockEndpoint result2; @Test - public void testWithAutogenColumnsAttributeSet() throws Exception { + public void retrieveColumnsWithAutogenColumnsFalseAndItemColumnsSet() throws Exception { result.expectedMessageCount(1); - result2.expectedMessageCount(1); template.sendBody("direct:start", createBody()); - template.sendBody("direct:start2", createBody()); - assertMockEndpointsSatisfied(); + result.assertIsSatisfied(); String body = result.getReceivedExchanges().get(0).getIn().getBody(String.class); - assertEquals("The flag autogenColumns set to false didn't take effect", "\n\n", body); + String[] lines = body.split("\n"); + assertEquals(2, lines.length); + assertEquals("Camel in Action", lines[0]); + assertEquals("ActiveMQ in Action", lines[1]); + } + + @Test + public void retrieveColumnsWithAutogenColumnsFalseAndOrderIdAmountColumnsSet() throws Exception { + result2.expectedMessageCount(1); + + template.sendBody("direct:start2", createBody()); + + result2.assertIsSatisfied(); - String body2 = result2.getReceivedExchanges().get(0).getIn().getBody(String.class); - String[] lines2 = body2.split("\n"); - assertEquals(2, lines2.length); - assertEquals("123|Camel in Action|1", lines2[0]); - assertEquals("124|ActiveMQ in Action|2", lines2[1]); + String body = result2.getReceivedExchanges().get(0).getIn().getBody(String.class); + String[] lines = body.split("\n"); + assertEquals(2, lines.length); + assertEquals("123|1", lines[0]); + assertEquals("124|2", lines[1]); } private static List<Map<String, Object>> createBody() { Modified: camel/trunk/components/camel-csv/src/test/resources/org/apache/camel/dataformat/csv/CsvMarshalAutogenColumnsSpringTest-context.xml URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-csv/src/test/resources/org/apache/camel/dataformat/csv/CsvMarshalAutogenColumnsSpringTest-context.xml?rev=1302006&r1=1302005&r2=1302006&view=diff ============================================================================== --- camel/trunk/components/camel-csv/src/test/resources/org/apache/camel/dataformat/csv/CsvMarshalAutogenColumnsSpringTest-context.xml (original) +++ camel/trunk/components/camel-csv/src/test/resources/org/apache/camel/dataformat/csv/CsvMarshalAutogenColumnsSpringTest-context.xml Sat Mar 17 20:55:23 2012 @@ -25,8 +25,7 @@ <route> <from uri="direct:start" /> <marshal> - <!-- per default the autogenColumns flag is 'true' --> - <csv autogenColumns="false" delimiter="|" /> + <csv autogenColumns="false" delimiter="|" configRef="csvConfig1" /> </marshal> <convertBodyTo type="java.lang.String" /> <to uri="mock:result" /> @@ -35,11 +34,42 @@ <route> <from uri="direct:start2" /> <marshal> - <csv autogenColumns="true" delimiter="|" /> + <!-- make use of a strategy other than the default one which is 'org.apache.commons.csv.CSVStrategy.DEFAULT_STRATEGY' --> + <csv autogenColumns="false" delimiter="|" configRef="csvConfig2" strategyRef="excelStrategy" /> </marshal> <convertBodyTo type="java.lang.String" /> <to uri="mock:result2" /> </route> </camelContext> + + <bean id="csvConfig1" class="org.apache.commons.csv.writer.CSVConfig"> + <property name="fields"> + <list> + <!-- here we're only interested in 'item' but not in 'orderId' or 'amount' --> + <bean class="org.apache.commons.csv.writer.CSVField"> + <property name="name" value="item" /> + </bean> + </list> + </property> + </bean> + + <bean id="csvConfig2" class="org.apache.commons.csv.writer.CSVConfig"> + <property name="fields"> + <list> + <!-- here we're interested in both 'orderId' and 'amount' but not in 'item' --> + <bean class="org.apache.commons.csv.writer.CSVField"> + <property name="name" value="orderId" /> + </bean> + <bean class="org.apache.commons.csv.writer.CSVField"> + <property name="name" value="amount" /> + </bean> + </list> + </property> + </bean> + + <bean id="excelStrategy" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean"> + <property name="staticField" value="org.apache.commons.csv.CSVStrategy.EXCEL_STRATEGY" /> + </bean> + </beans> \ No newline at end of file