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 2012/04/30 14:28:07 UTC
svn commit: r1332173 - in /camel/trunk:
camel-core/src/main/java/org/apache/camel/builder/
camel-core/src/main/java/org/apache/camel/model/dataformat/
components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/
components/camel-bindy/src/ma...
Author: davsclaus
Date: Mon Apr 30 12:28:07 2012
New Revision: 1332173
URL: http://svn.apache.org/viewvc?rev=1332173&view=rev
Log:
CAMEL-3496: Made camel-bindy easier to use by specifying class type. As well unmarshal a single row returns the pojo directly.
Added:
camel/trunk/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/classtype/
camel/trunk/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/classtype/BindyCsvClassTypeTest.java
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DataFormatClause.java
camel/trunk/camel-core/src/main/java/org/apache/camel/model/dataformat/BindyDataFormat.java
camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyAbstractDataFormat.java
camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyAbstractFactory.java
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/BindyFixedLengthFactory.java
camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyKeyValuePairFactory.java
camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/csv/BindyCsvDataFormat.java
camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/fixed/BindyFixedLengthDataFormat.java
camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/kvp/BindyKeyValuePairDataFormat.java
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DataFormatClause.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DataFormatClause.java?rev=1332173&r1=1332172&r2=1332173&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DataFormatClause.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DataFormatClause.java Mon Apr 30 12:28:07 2012
@@ -106,6 +106,19 @@ public class DataFormatClause<T extends
}
/**
+ * Uses the Bindy data format
+ *
+ * @param type the type of bindy data format to use
+ * @param classType the POJO class type
+ */
+ public T bindy(BindyType type, Class<?> classType) {
+ BindyDataFormat bindy = new BindyDataFormat();
+ bindy.setType(type);
+ bindy.setClassType(classType);
+ return dataFormat(bindy);
+ }
+
+ /**
* Uses the CSV data format
*/
public T csv() {
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/model/dataformat/BindyDataFormat.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/dataformat/BindyDataFormat.java?rev=1332173&r1=1332172&r2=1332173&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/model/dataformat/BindyDataFormat.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/model/dataformat/BindyDataFormat.java Mon Apr 30 12:28:07 2012
@@ -20,10 +20,12 @@ import javax.xml.bind.annotation.XmlAcce
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
import org.apache.camel.model.DataFormatDefinition;
import org.apache.camel.spi.DataFormat;
import org.apache.camel.spi.RouteContext;
+import org.apache.camel.util.ObjectHelper;
/**
* Represents the Bindy {@link org.apache.camel.spi.DataFormat}
@@ -35,10 +37,14 @@ import org.apache.camel.spi.RouteContext
public class BindyDataFormat extends DataFormatDefinition {
@XmlAttribute(required = true)
private BindyType type;
- @XmlAttribute(required = true)
+ @XmlAttribute
private String[] packages;
@XmlAttribute
+ private String classType;
+ @XmlAttribute
private String locale;
+ @XmlTransient
+ private Class<?> clazz;
public BindyDataFormat() {
}
@@ -59,6 +65,18 @@ public class BindyDataFormat extends Dat
this.packages = packages;
}
+ public String getClassType() {
+ return classType;
+ }
+
+ public void setClassType(String classType) {
+ this.classType = classType;
+ }
+
+ public void setClassType(Class<?> classType) {
+ this.clazz = classType;
+ }
+
public String getLocale() {
return locale;
}
@@ -68,6 +86,13 @@ public class BindyDataFormat extends Dat
}
protected DataFormat createDataFormat(RouteContext routeContext) {
+ if (packages == null && (classType == null && clazz == null)) {
+ throw new IllegalArgumentException("Either packages or classType must be specified");
+ }
+ if (packages != null && (classType != null || clazz != null)) {
+ throw new IllegalArgumentException("Only one of packages and classType must be specified");
+ }
+
if (type == BindyType.Csv) {
setDataFormatName("bindy-csv");
} else if (type == BindyType.Fixed) {
@@ -75,6 +100,14 @@ public class BindyDataFormat extends Dat
} else {
setDataFormatName("bindy-kvp");
}
+
+ if (clazz == null && classType != null) {
+ try {
+ clazz = routeContext.getCamelContext().getClassResolver().resolveMandatoryClass(classType);
+ } catch (ClassNotFoundException e) {
+ throw ObjectHelper.wrapRuntimeCamelException(e);
+ }
+ }
return super.createDataFormat(routeContext);
}
@@ -82,6 +115,7 @@ public class BindyDataFormat extends Dat
protected void configureDataFormat(DataFormat dataFormat) {
setProperty(dataFormat, "packages", packages);
setProperty(dataFormat, "locale", locale);
+ setProperty(dataFormat, "classType", clazz);
}
}
\ No newline at end of file
Modified: camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyAbstractDataFormat.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyAbstractDataFormat.java?rev=1332173&r1=1332172&r2=1332173&view=diff
==============================================================================
--- camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyAbstractDataFormat.java (original)
+++ camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyAbstractDataFormat.java Mon Apr 30 12:28:07 2012
@@ -16,6 +16,10 @@
*/
package org.apache.camel.dataformat.bindy;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
import org.apache.camel.spi.DataFormat;
import org.apache.camel.spi.PackageScanClassResolver;
@@ -23,6 +27,7 @@ public abstract class BindyAbstractDataF
private String[] packages;
private String locale;
private BindyAbstractFactory modelFactory;
+ private Class<?> classType;
public BindyAbstractDataFormat() {
}
@@ -31,6 +36,10 @@ public abstract class BindyAbstractDataF
this.packages = packages;
}
+ protected BindyAbstractDataFormat(Class<?> classType) {
+ this.classType = classType;
+ }
+
public String[] getPackages() {
return packages;
}
@@ -39,6 +48,14 @@ public abstract class BindyAbstractDataF
this.packages = packages;
}
+ public Class<?> getClassType() {
+ return classType;
+ }
+
+ public void setClassType(Class<?> classType) {
+ this.classType = classType;
+ }
+
public String getLocale() {
return locale;
}
@@ -60,4 +77,25 @@ public abstract class BindyAbstractDataF
}
protected abstract BindyAbstractFactory createModelFactory(PackageScanClassResolver resolver) throws Exception;
+
+ protected Object extractUnmarshalResult(List<Map<String, Object>> models) {
+ if (getClassType() != null) {
+ // we expect to find this type in the models, and grab only that type
+ List<Object> answer = new ArrayList<Object>();
+ for (Map<String, Object> entry : models) {
+ Object data = entry.get(getClassType().getName());
+ if (data != null) {
+ answer.add(data);
+ }
+ }
+ // if there is only 1 then dont return a list
+ if (answer.size() == 1) {
+ return answer.get(0);
+ } else {
+ return answer;
+ }
+ } else {
+ return models;
+ }
+ }
}
Modified: camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyAbstractFactory.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyAbstractFactory.java?rev=1332173&r1=1332172&r2=1332173&view=diff
==============================================================================
--- camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyAbstractFactory.java (original)
+++ camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyAbstractFactory.java Mon Apr 30 12:28:07 2012
@@ -19,6 +19,7 @@ package org.apache.camel.dataformat.bind
import java.lang.reflect.Field;
import java.text.NumberFormat;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -43,6 +44,7 @@ public abstract class BindyAbstractFacto
private AnnotationModelLoader modelsLoader;
private String[] packageNames;
private String locale;
+ private Class<?> type;
public BindyAbstractFactory(PackageScanClassResolver resolver, String... packageNames) throws Exception {
this.modelsLoader = new AnnotationModelLoader(resolver);
@@ -57,6 +59,13 @@ public abstract class BindyAbstractFacto
initModel();
}
+ public BindyAbstractFactory(PackageScanClassResolver resolver, Class<?> type) throws Exception {
+ this.modelsLoader = new AnnotationModelLoader(resolver);
+ this.type = type;
+
+ initModel();
+ }
+
/**
* method uses to initialize the model representing the classes who will
* bind the data. This process will scan for classes according to the
@@ -66,7 +75,15 @@ public abstract class BindyAbstractFacto
*/
public void initModel() throws Exception {
// Find classes defined as Model
- initModelClasses(this.packageNames);
+ if (packageNames != null) {
+ initModelClasses(this.packageNames);
+ } else if (type != null) {
+ // use the package name from the type as it may refer to types in the same package
+ String pckName = type.getPackage().getName();
+ initModelClasses(pckName);
+ } else {
+ throw new IllegalArgumentException("Either packagenames or type should be configured");
+ }
}
/**
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=1332173&r1=1332172&r2=1332173&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 Mon Apr 30 12:28:07 2012
@@ -72,6 +72,13 @@ public class BindyCsvFactory extends Bin
initCsvModel();
}
+ public BindyCsvFactory(PackageScanClassResolver resolver, Class<?> type) throws Exception {
+ super(resolver, type);
+
+ // initialize specific parameters of the csv model
+ initCsvModel();
+ }
+
/**
* method uses to initialize the model representing the classes who will
* bind the data. This process will scan for classes according to the
Modified: camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyFixedLengthFactory.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyFixedLengthFactory.java?rev=1332173&r1=1332172&r2=1332173&view=diff
==============================================================================
--- camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyFixedLengthFactory.java (original)
+++ camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyFixedLengthFactory.java Mon Apr 30 12:28:07 2012
@@ -68,6 +68,13 @@ public class BindyFixedLengthFactory ext
initFixedLengthModel();
}
+ public BindyFixedLengthFactory(PackageScanClassResolver resolver, Class<?> type) throws Exception {
+ super(resolver, type);
+
+ // initialize specific parameters of the fixed length model
+ initFixedLengthModel();
+ }
+
/**
* method uses to initialize the model representing the classes who will
* bind the data. This process will scan for classes according to the
Modified: camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyKeyValuePairFactory.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyKeyValuePairFactory.java?rev=1332173&r1=1332172&r2=1332173&view=diff
==============================================================================
--- camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyKeyValuePairFactory.java (original)
+++ camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyKeyValuePairFactory.java Mon Apr 30 12:28:07 2012
@@ -56,13 +56,19 @@ public class BindyKeyValuePairFactory ex
private boolean messageOrdered;
public BindyKeyValuePairFactory(PackageScanClassResolver resolver, String... packageNames) throws Exception {
-
super(resolver, packageNames);
// Initialize what is specific to Key Value Pair model
initKeyValuePairModel();
}
+ public BindyKeyValuePairFactory(PackageScanClassResolver resolver, Class<?> type) throws Exception {
+ super(resolver, type);
+
+ // Initialize what is specific to Key Value Pair model
+ initKeyValuePairModel();
+ }
+
/**
* method uses to initialize the model representing the classes who will
* bind the data This process will scan for classes according to the package
Modified: camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/csv/BindyCsvDataFormat.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/csv/BindyCsvDataFormat.java?rev=1332173&r1=1332172&r2=1332173&view=diff
==============================================================================
--- camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/csv/BindyCsvDataFormat.java (original)
+++ camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/csv/BindyCsvDataFormat.java Mon Apr 30 12:28:07 2012
@@ -36,7 +36,6 @@ import org.apache.camel.spi.DataFormat;
import org.apache.camel.spi.PackageScanClassResolver;
import org.apache.camel.util.IOHelper;
import org.apache.camel.util.ObjectHelper;
-
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -54,6 +53,10 @@ public class BindyCsvDataFormat extends
super(packages);
}
+ public BindyCsvDataFormat(Class<?> type) {
+ super(type);
+ }
+
@SuppressWarnings("unchecked")
public void marshal(Exchange exchange, Object body, OutputStream outputStream) throws Exception {
@@ -183,7 +186,7 @@ public class BindyCsvDataFormat extends
if (models.size() == 0) {
throw new java.lang.IllegalArgumentException("No records have been defined in the CSV");
} else {
- return models;
+ return extractUnmarshalResult(models);
}
} finally {
@@ -256,6 +259,10 @@ public class BindyCsvDataFormat extends
}
protected BindyAbstractFactory createModelFactory(PackageScanClassResolver resolver) throws Exception {
- return new BindyCsvFactory(resolver, getPackages());
+ if (getClassType() != null) {
+ return new BindyCsvFactory(resolver, getClassType());
+ } else {
+ return new BindyCsvFactory(resolver, getPackages());
+ }
}
}
Modified: camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/fixed/BindyFixedLengthDataFormat.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/fixed/BindyFixedLengthDataFormat.java?rev=1332173&r1=1332172&r2=1332173&view=diff
==============================================================================
--- camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/fixed/BindyFixedLengthDataFormat.java (original)
+++ camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/fixed/BindyFixedLengthDataFormat.java Mon Apr 30 12:28:07 2012
@@ -27,6 +27,8 @@ import java.util.Map;
import java.util.Scanner;
import org.apache.camel.Exchange;
+import org.apache.camel.dataformat.bindy.BindyAbstractDataFormat;
+import org.apache.camel.dataformat.bindy.BindyAbstractFactory;
import org.apache.camel.dataformat.bindy.BindyFixedLengthFactory;
import org.apache.camel.dataformat.bindy.util.ConverterUtils;
import org.apache.camel.spi.DataFormat;
@@ -40,23 +42,24 @@ import org.slf4j.LoggerFactory;
* A <a href="http://camel.apache.org/data-format.html">data format</a> (
* {@link DataFormat}) using Bindy to marshal to and from Fixed Length
*/
-public class BindyFixedLengthDataFormat implements DataFormat {
+public class BindyFixedLengthDataFormat extends BindyAbstractDataFormat {
private static final transient Logger LOG = LoggerFactory.getLogger(BindyFixedLengthDataFormat.class);
- private String[] packages;
- private BindyFixedLengthFactory modelFactory;
-
public BindyFixedLengthDataFormat() {
}
public BindyFixedLengthDataFormat(String... packages) {
- this.packages = packages;
+ super(packages);
+ }
+
+ public BindyFixedLengthDataFormat(Class<?> type) {
+ super(type);
}
@SuppressWarnings("unchecked")
public void marshal(Exchange exchange, Object body, OutputStream outputStream) throws Exception {
- BindyFixedLengthFactory factory = getFactory(exchange.getContext().getPackageScanClassResolver());
+ BindyFixedLengthFactory factory = (BindyFixedLengthFactory) getFactory(exchange.getContext().getPackageScanClassResolver());
ObjectHelper.notNull(factory, "not instantiated");
// Get CRLF
@@ -93,7 +96,7 @@ public class BindyFixedLengthDataFormat
}
public Object unmarshal(Exchange exchange, InputStream inputStream) throws Exception {
- BindyFixedLengthFactory factory = getFactory(exchange.getContext().getPackageScanClassResolver());
+ BindyFixedLengthFactory factory = (BindyFixedLengthFactory) getFactory(exchange.getContext().getPackageScanClassResolver());
ObjectHelper.notNull(factory, "not instantiated");
// List of Pojos
@@ -152,9 +155,9 @@ public class BindyFixedLengthDataFormat
// Test if models list is empty or not
// If this is the case (correspond to an empty stream, ...)
if (models.size() == 0) {
- throw new java.lang.IllegalArgumentException("No records have been defined in the message");
+ throw new java.lang.IllegalArgumentException("No records have been defined in the CSV");
} else {
- return models;
+ return extractUnmarshalResult(models);
}
} finally {
@@ -164,26 +167,13 @@ public class BindyFixedLengthDataFormat
}
- /**
- * Method used to create the singleton of the BindyCsvFactory
- */
- public BindyFixedLengthFactory getFactory(PackageScanClassResolver resolver) throws Exception {
- if (modelFactory == null) {
- modelFactory = new BindyFixedLengthFactory(resolver, packages);
+ @Override
+ protected BindyAbstractFactory createModelFactory(PackageScanClassResolver resolver) throws Exception {
+ if (getClassType() != null) {
+ return new BindyFixedLengthFactory(resolver, getClassType());
+ } else {
+ return new BindyFixedLengthFactory(resolver, getPackages());
}
- return modelFactory;
- }
-
- public void setModelFactory(BindyFixedLengthFactory modelFactory) {
- this.modelFactory = modelFactory;
- }
-
- public String[] getPackages() {
- return packages;
- }
-
- public void setPackages(String[] packages) {
- this.packages = packages;
}
}
Modified: camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/kvp/BindyKeyValuePairDataFormat.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/kvp/BindyKeyValuePairDataFormat.java?rev=1332173&r1=1332172&r2=1332173&view=diff
==============================================================================
--- camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/kvp/BindyKeyValuePairDataFormat.java (original)
+++ camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/kvp/BindyKeyValuePairDataFormat.java Mon Apr 30 12:28:07 2012
@@ -53,6 +53,10 @@ public class BindyKeyValuePairDataFormat
super(packages);
}
+ public BindyKeyValuePairDataFormat(Class<?> type) {
+ super(type);
+ }
+
@SuppressWarnings("unchecked")
public void marshal(Exchange exchange, Object body, OutputStream outputStream) throws Exception {
BindyAbstractFactory factory = getFactory(exchange.getContext().getPackageScanClassResolver());
@@ -136,9 +140,9 @@ public class BindyKeyValuePairDataFormat
// Test if models list is empty or not
// If this is the case (correspond to an empty stream, ...)
if (models.size() == 0) {
- throw new java.lang.IllegalArgumentException("No records have been defined in the KVP");
+ throw new java.lang.IllegalArgumentException("No records have been defined in the CSV");
} else {
- return models;
+ return extractUnmarshalResult(models);
}
} finally {
@@ -148,6 +152,10 @@ public class BindyKeyValuePairDataFormat
}
protected BindyAbstractFactory createModelFactory(PackageScanClassResolver resolver) throws Exception {
- return new BindyKeyValuePairFactory(resolver, getPackages());
+ if (getClassType() != null) {
+ return new BindyKeyValuePairFactory(resolver, getClassType());
+ } else {
+ return new BindyKeyValuePairFactory(resolver, getPackages());
+ }
}
}
Added: camel/trunk/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/classtype/BindyCsvClassTypeTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/classtype/BindyCsvClassTypeTest.java?rev=1332173&view=auto
==============================================================================
--- camel/trunk/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/classtype/BindyCsvClassTypeTest.java (added)
+++ camel/trunk/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/classtype/BindyCsvClassTypeTest.java Mon Apr 30 12:28:07 2012
@@ -0,0 +1,103 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.dataformat.bindy.classtype;
+
+import java.math.BigDecimal;
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.dataformat.bindy.model.simple.oneclass.Order;
+import org.apache.camel.model.dataformat.BindyType;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+/**
+ *
+ */
+public class BindyCsvClassTypeTest extends CamelTestSupport {
+
+ @Test
+ public void testMarshallMessage() throws Exception {
+ String expected = "1,B2,Keira,Knightley,ISIN,XX23456789,BUY,Share,400.25,EUR,14-01-2009\r\n";
+
+ getMockEndpoint("mock:in").expectedBodiesReceived(expected);
+
+ template.sendBody("direct:in", generateOrder());
+
+ assertMockEndpointsSatisfied();
+ }
+
+ @Test
+ public void testUnmarshallMessage() throws Exception {
+ getMockEndpoint("mock:out").expectedMessageCount(1);
+ getMockEndpoint("mock:out").message(0).body().isInstanceOf(Order.class);
+
+ String data = "1,B2,Keira,Knightley,ISIN,XX23456789,BUY,Share,400.25,EUR,14-01-2009\r\n";
+ template.sendBody("direct:out", data);
+
+ assertMockEndpointsSatisfied();
+
+ Order order = getMockEndpoint("mock:out").getReceivedExchanges().get(0).getIn().getBody(Order.class);
+ assertEquals(1, order.getOrderNr());
+ assertEquals("BUY", order.getOrderType());
+ assertEquals("B2", order.getClientNr());
+ assertEquals("Keira", order.getFirstName());
+ assertEquals("Knightley", order.getLastName());
+ assertEquals(new BigDecimal("400.25"), order.getAmount());
+ assertEquals("ISIN", order.getInstrumentCode());
+ assertEquals("XX23456789", order.getInstrumentNumber());
+ assertEquals("Share", order.getInstrumentType());
+ assertEquals("EUR", order.getCurrency());
+ }
+
+ public Order generateOrder() {
+ Order order = new Order();
+ order.setOrderNr(1);
+ order.setOrderType("BUY");
+ order.setClientNr("B2");
+ order.setFirstName("Keira");
+ order.setLastName("Knightley");
+ order.setAmount(new BigDecimal("400.25"));
+ order.setInstrumentCode("ISIN");
+ order.setInstrumentNumber("XX23456789");
+ order.setInstrumentType("Share");
+ order.setCurrency("EUR");
+
+ Calendar calendar = new GregorianCalendar();
+ calendar.set(2009, 0, 14);
+ order.setOrderDate(calendar.getTime());
+
+ return order;
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("direct:in")
+ .marshal().bindy(BindyType.Csv, Order.class)
+ .to("mock:in");
+
+ from("direct:out")
+ .unmarshal().bindy(BindyType.Csv, Order.class)
+ .to("mock:out");
+ }
+ };
+ }
+}