You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by cm...@apache.org on 2009/07/01 15:27:04 UTC

svn commit: r790157 [1/3] - in /camel/trunk/components/camel-bindy/src: main/java/org/apache/camel/dataformat/bindy/ test/data/ test/data/big/ test/data2/ test/java/org/apache/camel/dataformat/bindy/csv/ test/java/org/apache/camel/dataformat/bindy/mode...

Author: cmoulliard
Date: Wed Jul  1 13:27:04 2009
New Revision: 790157

URL: http://svn.apache.org/viewvc?rev=790157&view=rev
Log:
Change type of the field annotedLinkFields from Map<String, Object> into a Map<String, List<Field>>, adapt test cases and made some clean-up in list, map names.

Modified:
    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/BindyKeyValuePairFactory.java
    camel/trunk/components/camel-bindy/src/test/data/big/csv.txt
    camel/trunk/components/camel-bindy/src/test/data/csv.txt
    camel/trunk/components/camel-bindy/src/test/data2/csv.txt
    camel/trunk/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindyComplexCsvMarshallTest.java
    camel/trunk/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindySimpleCsvMarshallTest.java
    camel/trunk/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/model/complex/twoclassesandonelink/Client.java
    camel/trunk/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/model/complex/twoclassesandonelink/Order.java
    camel/trunk/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/model/simple/oneclass/Order.java
    camel/trunk/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/model/simple/oneclassandskipfirstline/Order.java
    camel/trunk/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/util/AnnotationModuleLoaderTest.java

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=790157&r1=790156&r2=790157&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 Wed Jul  1 13:27:04 2009
@@ -18,6 +18,7 @@
 
 import java.lang.reflect.Field;
 import java.text.NumberFormat;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
@@ -37,7 +38,8 @@
 public abstract class BindyAbstractFactory implements BindyFactory {
     private static final transient Log LOG = LogFactory.getLog(BindyAbstractFactory.class);
     protected Set<Class> models;
-    protected Map<String, Field> mapAnnotatedLinkField = new LinkedHashMap<String, Field>();
+    protected Map<String, List<Field>> annotedLinkFields = new LinkedHashMap<String, List<Field>>();
+    protected List<Field> linkFields = new ArrayList<Field>();
     protected String crlf;
 
     private AnnotationModelLoader modelsLoader;
@@ -83,19 +85,28 @@
     public abstract String unbind(Map<String, Object> model) throws Exception;
 
     /**
-     * Link objects together (Only 1to1 relation is allowed)
+     * Link objects together
      */
     public void link(Map<String, Object> model) throws Exception {
-        for (String link : mapAnnotatedLinkField.keySet()) {
-            Field field = mapAnnotatedLinkField.get(link);
-            field.setAccessible(true);
-
-            // Retrieve linked object
-            String toClassName = field.getType().getName();
-            Object to = model.get(toClassName);
-
-            ObjectHelper.notNull(to, "No @link annotation has been defined for the oject to link");
-            field.set(model.get(field.getDeclaringClass().getName()), to);
+    	
+    	// Iterate class by class
+    	for (String link : annotedLinkFields.keySet()) {
+            List<Field> linkFields = annotedLinkFields.get(link);
+            
+            // Iterate through Link fields list
+            for (Field field : linkFields) {
+            	
+            	// Change protection for private field
+                field.setAccessible(true);
+
+                // Retrieve linked object
+                String toClassName = field.getType().getName();
+                Object to = model.get(toClassName);
+
+                ObjectHelper.notNull(to, "No @link annotation has been defined for the oject to link");
+                field.set(model.get(field.getDeclaringClass().getName()), to);
+            	
+            }
         }
     }
 

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=790157&r1=790156&r2=790157&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 Wed Jul  1 13:27:04 2009
@@ -17,6 +17,7 @@
 package org.apache.camel.dataformat.bindy;
 
 import java.lang.reflect.Field;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
@@ -44,8 +45,8 @@
 
     private static final transient Log LOG = LogFactory.getLog(BindyCsvFactory.class);
 
-    private Map<Integer, DataField> mapDataField = new LinkedHashMap<Integer, DataField>();
-    private Map<Integer, Field> mapAnnotedField = new LinkedHashMap<Integer, Field>();
+    private Map<Integer, DataField> dataFields = new LinkedHashMap<Integer, DataField>();
+    private Map<Integer, Field> annotedFields = new LinkedHashMap<Integer, Field>();
     private Map<String, Integer> sections = new HashMap<String, Integer>();
 
     private String separator;
@@ -80,6 +81,8 @@
     public void initAnnotedFields() {
 
         for (Class<?> cl : models) {
+        	
+        	List<Field> linkFields = new ArrayList<Field>();
 
             if (LOG.isDebugEnabled()) {
                 LOG.debug("Class retrieved : " + cl.getName());
@@ -92,8 +95,8 @@
                         LOG.debug("Position defined in the class : " + cl.getName() + ", position : " + dataField.pos()
                                 + ", Field : " + dataField.toString());
                     }
-                    mapDataField.put(dataField.pos(), dataField);
-                    mapAnnotedField.put(dataField.pos(), field);
+                    dataFields.put(dataField.pos(), dataField);
+                    annotedFields.put(dataField.pos(), field);
                 }
 
                 Link linkField = field.getAnnotation(Link.class);
@@ -102,8 +105,14 @@
                     if (LOG.isDebugEnabled()) {
                         LOG.debug("Class linked  : " + cl.getName() + ", Field" + field.toString());
                     }
-                    mapAnnotatedLinkField.put(cl.getName(), field);
+                    linkFields.add( field );
                 }
+
+            }
+            
+            
+            if (! linkFields.isEmpty() ) {
+            	annotedLinkFields.put(cl.getName(), linkFields);
             }
         }
     }
@@ -120,9 +129,9 @@
 
             if (!data.get(pos).equals("")) {
 
-                DataField dataField = mapDataField.get(pos);
+                DataField dataField = dataFields.get(pos);
                 ObjectHelper.notNull(dataField, "No position defined for the field positoned : " + pos);
-                Field field = mapAnnotedField.get(pos);
+                Field field = annotedFields.get(pos);
                 field.setAccessible(true);
 
                 if (LOG.isDebugEnabled()) {
@@ -143,8 +152,8 @@
 
         StringBuilder builder = new StringBuilder();
 
-        Map<Integer, DataField> dataFields = new TreeMap<Integer, DataField>(mapDataField);
-        Iterator<Integer> it = dataFields.keySet().iterator();
+        Map<Integer, DataField> dataFieldsSorted = new TreeMap<Integer, DataField>(dataFields);
+        Iterator<Integer> it = dataFieldsSorted.keySet().iterator();
         
         // Map containing the OUT position of the field
         // The key is double and is created using the position of the field and 
@@ -163,10 +172,10 @@
 
         while (it.hasNext()) {
 
-            DataField dataField = mapDataField.get(it.next());
+            DataField dataField = dataFieldsSorted.get(it.next());
 
             // Retrieve the field
-            Field field = mapAnnotedField.get(dataField.pos());
+            Field field = annotedFields.get(dataField.pos());
             // Change accessibility to allow to read protected/private fields
             field.setAccessible(true);
 

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=790157&r1=790156&r2=790157&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 Wed Jul  1 13:27:04 2009
@@ -17,6 +17,7 @@
 package org.apache.camel.dataformat.bindy;
 
 import java.lang.reflect.Field;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
@@ -45,8 +46,8 @@
 
     private static final transient Log LOG = LogFactory.getLog(BindyKeyValuePairFactory.class);
 
-    private Map<Integer, KeyValuePairField> mapKeyValuePairField = new LinkedHashMap<Integer, KeyValuePairField>();
-    private Map<Integer, Field> mapAnnotedField = new LinkedHashMap<Integer, Field>();
+    private Map<Integer, KeyValuePairField> keyValuePairFields = new LinkedHashMap<Integer, KeyValuePairField>();
+    private Map<Integer, Field> annotedFields = new LinkedHashMap<Integer, Field>();
     private Map<String, Integer> sections = new HashMap<String, Integer>();
 
     private String keyValuePairSeparator;
@@ -82,6 +83,8 @@
     public void initAnnotedFields() {
 
         for (Class<?> cl : models) {
+        	
+        	List<Field> linkFields = new ArrayList<Field>();
 
             for (Field field : cl.getDeclaredFields()) {
                 KeyValuePairField keyValuePairField = field.getAnnotation(KeyValuePairField.class);
@@ -90,8 +93,8 @@
                         LOG.debug("Key declared in the class : " + cl.getName() + ", key : " + keyValuePairField.tag()
                                 + ", Field : " + keyValuePairField.toString());
                     }
-                    mapKeyValuePairField.put(keyValuePairField.tag(), keyValuePairField);
-                    mapAnnotedField.put(keyValuePairField.tag(), field);
+                    keyValuePairFields.put(keyValuePairField.tag(), keyValuePairField);
+                    annotedFields.put(keyValuePairField.tag(), field);
                 }
 
                 Link linkField = field.getAnnotation(Link.class);
@@ -100,9 +103,13 @@
                     if (LOG.isDebugEnabled()) {
                         LOG.debug("Class linked  : " + cl.getName() + ", Field" + field.toString());
                     }
-                    mapAnnotatedLinkField.put(cl.getName(), field);
+                    linkFields.add( field );
                 }
             }
+            
+            if (! linkFields.isEmpty() ) {
+            	annotedLinkFields.put(cl.getName(), linkFields);
+            }
 
         }
     }
@@ -132,10 +139,10 @@
                     LOG.debug("Key : " + tag + ", value : " + value);
                 }
 
-                KeyValuePairField keyValuePairField = mapKeyValuePairField.get(tag);
+                KeyValuePairField keyValuePairField = keyValuePairFields.get(tag);
                 ObjectHelper.notNull(keyValuePairField, "No tag defined for the field : " + tag);
 
-                Field field = mapAnnotedField.get(tag);
+                Field field = annotedFields.get(tag);
                 field.setAccessible(true);
 
                 if (LOG.isDebugEnabled()) {
@@ -159,8 +166,8 @@
 
         StringBuilder builder = new StringBuilder();
 
-        Map<Integer, KeyValuePairField> keyValuePairFields = new TreeMap<Integer, KeyValuePairField>(mapKeyValuePairField);
-        Iterator<Integer> it = keyValuePairFields.keySet().iterator();
+        Map<Integer, KeyValuePairField> keyValuePairFieldsSorted = new TreeMap<Integer, KeyValuePairField>(keyValuePairFields);
+        Iterator<Integer> it = keyValuePairFieldsSorted.keySet().iterator();
         
         // Map containing the OUT position of the field
         // The key is double and is created using the position of the field and 
@@ -180,11 +187,11 @@
 
         while (it.hasNext()) {
 
-            KeyValuePairField keyValuePairField = mapKeyValuePairField.get(it.next());
+            KeyValuePairField keyValuePairField = keyValuePairFieldsSorted.get(it.next());
             ObjectHelper.notNull(keyValuePairField, "KeyValuePair is null !");
 
             // Retrieve the field
-            Field field = mapAnnotedField.get(keyValuePairField.tag());
+            Field field = annotedFields.get(keyValuePairField.tag());
             // Change accessibility to allow to read protected/private fields
             field.setAccessible(true);