Author: cmoulliard
Date: Fri Sep 11 10:00:06 2009
New Revision: 813750

URL: http://svn.apache.org/viewvc?rev=813750&view=rev
Log:
Return line number where the error occurs in the exception throwed, test if the 
format of the string is >= date pattern to avoid to accept 20090911-10:33:00 
when the pattern is yyyyMMdd

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/BindyFactory.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/format/DatePatternFormat.java
    
camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/kvp/BindyKeyValuePairDataFormat.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=813750&r1=813749&r2=813750&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
 Fri Sep 11 10:00:06 2009
@@ -100,7 +100,7 @@
      */
     public abstract void initAnnotedFields() throws Exception;
 
-    public abstract void bind(List<String> data, Map<String, Object> model) 
throws Exception;
+    public abstract void bind(List<String> data, Map<String, Object> model, 
int line) throws Exception;
 
     public abstract String unbind(Map<String, Object> model) throws Exception;
 

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=813750&r1=813749&r2=813750&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
 Fri Sep 11 10:00:06 2009
@@ -24,12 +24,12 @@
 import java.util.List;
 import java.util.Map;
 import java.util.TreeMap;
-import java.util.jar.JarException;
 
 import org.apache.camel.dataformat.bindy.annotation.CsvRecord;
 import org.apache.camel.dataformat.bindy.annotation.DataField;
 import org.apache.camel.dataformat.bindy.annotation.Link;
 import org.apache.camel.dataformat.bindy.annotation.Section;
+import org.apache.camel.dataformat.bindy.format.FormatException;
 import org.apache.camel.dataformat.bindy.util.Converter;
 import org.apache.camel.spi.PackageScanClassResolver;
 import org.apache.camel.util.ObjectHelper;
@@ -136,7 +136,7 @@
         }
     }
 
-    public void bind(List<String> tokens, Map<String, Object> model) throws 
Exception {
+    public void bind(List<String> tokens, Map<String, Object> model, int line) 
throws Exception {
 
         int pos = 0;
         int counterMandatoryFields = 0;
@@ -145,7 +145,7 @@
         
             // Get DataField from model
             DataField dataField = dataFields.get(pos);
-            ObjectHelper.notNull(dataField, "No position " + pos + " defined 
for the field : " + data);
+            ObjectHelper.notNull(dataField, "No position " + pos + " defined 
for the field : " + data + ", line nber : " + line);
             
             if (dataField.required()) {
                 // Increment counter of mandatory fields
@@ -155,7 +155,7 @@
                 // This is not possible for mandatory fields
                 if (data.equals("")) {
                     throw new IllegalArgumentException("The mandatory field 
defined at the position " + pos
-                                                       + " is empty !");
+                                                       + " is empty for the 
line nber : " + line);
                 }
             }
             
@@ -184,8 +184,10 @@
             if (!data.equals("")) {
                 try {
                     value = format.parse(data);
+                } catch (FormatException ie) {
+                       throw new IllegalArgumentException( ie.getMessage() + 
", position : " + pos + ", line nber : " + line, ie);
                 } catch (Exception e) {
-                    throw new IllegalArgumentException("Parsing error detected 
for field defined at the position : " + pos, e);
+                    throw new IllegalArgumentException("Parsing error detected 
for field defined at the position : " + pos  + ", line nber : " + line, e);
                 }
             } else {
                 value = getDefaultValueforPrimitive(field.getType());
@@ -203,11 +205,11 @@
         
      
         if (pos < totalFields) {
-            throw new IllegalArgumentException("Some fields are missing 
(optional or mandatory) !!");
+            throw new IllegalArgumentException("Some fields are missing 
(optional or mandatory), line nber : " + line);
         }
 
         if (counterMandatoryFields < numberMandatoryFields) {
-            throw new IllegalArgumentException("Some mandatory fields are 
missing !!");
+            throw new IllegalArgumentException("Some mandatory fields are 
missing, line nber : " + line);
         }
         
     }

Modified: 
camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyFactory.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyFactory.java?rev=813750&r1=813749&r2=813750&view=diff
==============================================================================
--- 
camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyFactory.java
 (original)
+++ 
camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyFactory.java
 Fri Sep 11 10:00:06 2009
@@ -41,9 +41,10 @@
      * @param model Map<String, object> is a collection of objects used to bind
      *            data. String is the the key name of the class link to POJO
      *            objects
+     * @param line is the position of the record into the file           
      * @throws Exception can be thrown
      */
-    void bind(List<String> data, Map<String, Object> model) throws Exception;
+    void bind(List<String> data, Map<String, Object> model, int line) throws 
Exception;
 
     /**
      * The unbind is used to transform the content of the classes model objects

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=813750&r1=813749&r2=813750&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
 Fri Sep 11 10:00:06 2009
@@ -114,7 +114,7 @@
         }
     }
 
-    public void bind(List<String> data, Map<String, Object> model) throws 
Exception {
+    public void bind(List<String> data, Map<String, Object> model, int line) 
throws Exception {
 
         int pos = 0;
 
@@ -140,7 +140,7 @@
                 }
 
                 KeyValuePairField keyValuePairField = 
keyValuePairFields.get(tag);
-                ObjectHelper.notNull(keyValuePairField, "No tag defined for 
the field : " + tag);
+                ObjectHelper.notNull(keyValuePairField, "No tag defined for 
the field : " + tag + ", line nber : " + line);
 
                 Field field = annotedFields.get(tag);
                 field.setAccessible(true);
@@ -165,9 +165,8 @@
                 try {
                     value = format.parse(keyValue);
                 } catch (Exception e) {
-                    throw new IllegalArgumentException(
-                                                       "Parsing error detected 
for field defined at the tag : "
-                                                           + tag, e);
+                    throw new IllegalArgumentException("Parsing error detected 
for field defined at the tag : " + tag
+                                                               + ", line nber 
: " + line, e);
                 }
 
                 field.set(modelField, value);
@@ -183,8 +182,7 @@
 
         StringBuilder builder = new StringBuilder();
 
-        Map<Integer, KeyValuePairField> keyValuePairFieldsSorted = new 
TreeMap<Integer, KeyValuePairField>(
-                                                                               
                            keyValuePairFields);
+        Map<Integer, KeyValuePairField> keyValuePairFieldsSorted = new 
TreeMap<Integer, KeyValuePairField>( keyValuePairFields );
         Iterator<Integer> it = keyValuePairFieldsSorted.keySet().iterator();
 
         // Map containing the OUT position of the field

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=813750&r1=813749&r2=813750&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
 Fri Sep 11 10:00:06 2009
@@ -93,6 +93,7 @@
         ObjectHelper.notEmpty(separator, "The separator has not been defined 
in the annotation @CsvRecord or not instantiated during initModel.");
 
         int count = 0;
+        
         try {
 
             // If the first line of the CSV file contains columns name, then 
we skip this line
@@ -109,10 +110,9 @@
                     // skip if line is empty
                     continue;
                 }
-
-                if (LOG.isDebugEnabled()) {
-                    LOG.debug("Counter " + count++ + " : content : " + line);
-                }
+                
+                // Increment counter
+                count++;
                 
                 // Create POJO where CSV data will be stored
                 model = factory.factory();
@@ -133,7 +133,7 @@
                     }
 
                     // Bind data from CSV record with model classes
-                    factory.bind(result, model);
+                    factory.bind(result, model, count);
 
                     // Link objects together
                     factory.link(model);

Modified: 
camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/DatePatternFormat.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/DatePatternFormat.java?rev=813750&r1=813749&r2=813750&view=diff
==============================================================================
--- 
camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/DatePatternFormat.java
 (original)
+++ 
camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/DatePatternFormat.java
 Fri Sep 11 10:00:06 2009
@@ -49,16 +49,25 @@
 
         Date date;
         DateFormat df = this.getDateFormat();
-        LOG.info("Pattern : " + this.pattern);
-
+        
         ObjectHelper.notNull(this.pattern, "pattern");
-
-        // Force the parser to be strict in the syntax of the date to be
-        // converted
-        df.setLenient(false);
-        date = df.parse(string);
-
-        return date;
+        
+        // Check length of the string with date pattern
+        // To avoid to parse a string date : 20090901-10:32:30 when 
+        // the pattern is yyyyMMdd
+       
+        if ( string.length() <= this.pattern.length() ) {
+               
+            // Force the parser to be strict in the syntax of the date to be
+            // converted
+            df.setLenient(false);
+            date = df.parse(string);
+
+            return date;
+               
+        } else {
+               throw new FormatException("Date provided does not fit the 
pattern defined");
+        }
 
     }
 

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=813750&r1=813749&r2=813750&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
 Fri Sep 11 10:00:06 2009
@@ -94,41 +94,53 @@
 
             while (scanner.hasNextLine()) {
 
-                // Read the line
-                String line = scanner.nextLine().trim();
+                               // Read the line
+                               String line = scanner.nextLine().trim();
 
-                if (ObjectHelper.isEmpty(line)) {
-                    // skip if line is empty
-                    continue;
-                }
-
-                if (LOG.isDebugEnabled()) {
-                    LOG.debug("Counter " + count++ + " : content : " + line);
-                }
-                
-                // Create POJO
-                model = factory.factory();
-
-                // Split the message according to the pair separator defined in
-                // annotated class @Message
-                List<String> result = Arrays.asList(line.split(separator));
-                
-                // Bind data from message with model classes
-                factory.bind(result, model);
-
-                // Link objects together
-                factory.link(model);
-
-                // Add objects graph to the list
-                models.add(model);
-
-                if (LOG.isDebugEnabled()) {
-                    LOG.debug("Graph of objects created : " + model);
-                }
+                               if (ObjectHelper.isEmpty(line)) {
+                                       // skip if line is empty
+                                       continue;
+                               }
 
-            }
+                               // Increment counter
+                               count++;
+
+                               // Create POJO
+                               model = factory.factory();
+
+                               // Split the message according to the pair 
separator defined in
+                               // annotated class @Message
+                               List<String> result = 
Arrays.asList(line.split(separator));
+
+                               if (result.size() == 0 || result.isEmpty()) {
+                                       throw new 
java.lang.IllegalArgumentException("No records have been defined in the KVP !");
+                               }
+
+                               if (result.size() > 0) {
+
+                                       // Bind data from message with model 
classes
+                                       factory.bind(result, model, count);
 
-            return models;
+                                       // Link objects together
+                                       factory.link(model);
+
+                                       // Add objects graph to the list
+                                       models.add(model);
+
+                                       if (LOG.isDebugEnabled()) {
+                                               LOG.debug("Graph of objects 
created : " + model);
+                                       }
+                               }
+
+                       }
+
+            // 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 !");
+            } else {
+                return models;
+            }
 
         } finally {
             scanner.close();


Reply via email to