Author: bvahdat Date: Sat Mar 17 20:59:27 2012 New Revision: 1302010 URL: http://svn.apache.org/viewvc?rev=1302010&view=rev Log: Merged revisions 1302006 via svnmerge from https://svn.apache.org/repos/asf/camel/trunk
........ r1302006 | bvahdat | 2012-03-17 21:55:23 +0100 (Sa, 17 Mrz 2012) | 1 line CAMEL-5105: Add the options configRef and strategyRef to csv data format in XML DSL. ........ Modified: camel/branches/camel-2.9.x/ (props changed) camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/model/dataformat/CsvDataFormat.java camel/branches/camel-2.9.x/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalAutogenColumnsSpringTest.java camel/branches/camel-2.9.x/components/camel-csv/src/test/resources/org/apache/camel/dataformat/csv/CsvMarshalAutogenColumnsSpringTest-context.xml Propchange: camel/branches/camel-2.9.x/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Sat Mar 17 20:59:27 2012 @@ -1 +1 @@ -/camel/trunk:1243046,1243057,1243234,1244518,1244644,1244859,1244861,1244864,1244870,1244872,1245021,1291555,1291727,1291848,1291864,1292114,1292384,1292725,1292760,1292767,1293079,1293268,1293288,1293330,1293590,1293828,1293852,1293855,1294130,1294482,1294502,1294533,1294588,1294639,1294709,1294909,1294976,1295073,1295108,1295120,1296653,1296790,1298125,1298155,1298447,1298795,1298821,1298993,1299383,1299399,1300720-1300722,1300805,1300826,1300831,1300959,1301376,1301394,1301571,1301631,1301656,1301678 +/camel/trunk:1243046,1243057,1243234,1244518,1244644,1244859,1244861,1244864,1244870,1244872,1245021,1291555,1291727,1291848,1291864,1292114,1292384,1292725,1292760,1292767,1293079,1293268,1293288,1293330,1293590,1293828,1293852,1293855,1294130,1294482,1294502,1294533,1294588,1294639,1294709,1294909,1294976,1295073,1295108,1295120,1296653,1296790,1298125,1298155,1298447,1298795,1298821,1298993,1299383,1299399,1300720-1300722,1300805,1300826,1300831,1300959,1301376,1301394,1301571,1301631,1301656,1301678,1302006 Propchange: camel/branches/camel-2.9.x/ ------------------------------------------------------------------------------ Binary property 'svnmerge-integrated' - no diff available. Modified: camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/model/dataformat/CsvDataFormat.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/model/dataformat/CsvDataFormat.java?rev=1302010&r1=1302009&r2=1302010&view=diff ============================================================================== --- camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/model/dataformat/CsvDataFormat.java (original) +++ camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/model/dataformat/CsvDataFormat.java Sat Mar 17 20:59:27 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/branches/camel-2.9.x/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalAutogenColumnsSpringTest.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalAutogenColumnsSpringTest.java?rev=1302010&r1=1302009&r2=1302010&view=diff ============================================================================== --- camel/branches/camel-2.9.x/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalAutogenColumnsSpringTest.java (original) +++ camel/branches/camel-2.9.x/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalAutogenColumnsSpringTest.java Sat Mar 17 20:59:27 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/branches/camel-2.9.x/components/camel-csv/src/test/resources/org/apache/camel/dataformat/csv/CsvMarshalAutogenColumnsSpringTest-context.xml URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/components/camel-csv/src/test/resources/org/apache/camel/dataformat/csv/CsvMarshalAutogenColumnsSpringTest-context.xml?rev=1302010&r1=1302009&r2=1302010&view=diff ============================================================================== --- camel/branches/camel-2.9.x/components/camel-csv/src/test/resources/org/apache/camel/dataformat/csv/CsvMarshalAutogenColumnsSpringTest-context.xml (original) +++ camel/branches/camel-2.9.x/components/camel-csv/src/test/resources/org/apache/camel/dataformat/csv/CsvMarshalAutogenColumnsSpringTest-context.xml Sat Mar 17 20:59:27 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