svn commit: r923828 - in /ofbiz/trunk/framework/datafile/src/org/ofbiz/datafile: Record.java RecordIterator.java

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r923828 - in /ofbiz/trunk/framework/datafile/src/org/ofbiz/datafile: Record.java RecordIterator.java

jleroux@apache.org
Author: jleroux
Date: Tue Mar 16 16:00:32 2010
New Revision: 923828

URL: http://svn.apache.org/viewvc?rev=923828&view=rev
Log:
A patch from BJ Freeman "Datafile does not catch lack of delimiter if at end of line." (https://issues.apache.org/jira/browse/OFBIZ-3026) - OFBIZ-3026

There was an issue if the datafile did not have the last delimiter before the CRLF.  This fixes it when there are not data for a field and also fixes the EOL.

Modified:
    ofbiz/trunk/framework/datafile/src/org/ofbiz/datafile/Record.java
    ofbiz/trunk/framework/datafile/src/org/ofbiz/datafile/RecordIterator.java

Modified: ofbiz/trunk/framework/datafile/src/org/ofbiz/datafile/Record.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/datafile/src/org/ofbiz/datafile/Record.java?rev=923828&r1=923827&r2=923828&view=diff
==============================================================================
--- ofbiz/trunk/framework/datafile/src/org/ofbiz/datafile/Record.java (original)
+++ ofbiz/trunk/framework/datafile/src/org/ofbiz/datafile/Record.java Tue Mar 16 16:00:32 2010
@@ -561,18 +561,24 @@ public class Record implements Serializa
                     strVal = (String)modelField.defaultValue;
                 }
             } else {
-                try {
-                    strVal = st.nextToken();
-                    if (strVal.equals("" + delimiter)) {
-                        strVal = null;
-                    } else {
-                        if (st.hasMoreTokens()) {
-                            st.nextToken();
+                //some input lines may be less than the header model.
+                if (st.hasMoreTokens()) {
+                    try {
+                        strVal = st.nextToken();
+                        if (strVal.equals("" + delimiter)) {
+                            strVal = null;
+                        } else {
+                            if (st.hasMoreTokens()) {
+                                st.nextToken();
+                            }
                         }
-                    }
-                } catch (NoSuchElementException nsee) {
-                    throw new DataFileException("Field " + modelField.name + " could not be read from a line (" + lineNum + ") with only " +
-                            line.length() + " chars.", nsee);
+                    } catch (NoSuchElementException nsee) {
+                        throw new DataFileException("Field " + modelField.name + " could not be read from a line (" + lineNum + ") with only " +
+                                line.length() + " chars.", nsee);
+                    }                
+                }
+                else { //if input line is less than the header model then pad with null
+                    strVal = null;
                 }
             }
             try {

Modified: ofbiz/trunk/framework/datafile/src/org/ofbiz/datafile/RecordIterator.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/datafile/src/org/ofbiz/datafile/RecordIterator.java?rev=923828&r1=923827&r2=923828&view=diff
==============================================================================
--- ofbiz/trunk/framework/datafile/src/org/ofbiz/datafile/RecordIterator.java (original)
+++ ofbiz/trunk/framework/datafile/src/org/ofbiz/datafile/RecordIterator.java Tue Mar 16 16:00:32 2010
@@ -26,6 +26,8 @@ import java.io.InputStreamReader;
 import java.net.URL;
 import java.util.Stack;
 
+import org.ofbiz.base.util.Debug;
+
 
 /**
  *  Record Iterator for reading large files
@@ -84,7 +86,6 @@ public class RecordIterator {
         this.nextRecord = null;
 
         boolean isFixedRecord = ModelDataFile.SEP_FIXED_RECORD.equals(modelDataFile.separatorStyle);
-        boolean isFixedLength = ModelDataFile.SEP_FIXED_LENGTH.equals(modelDataFile.separatorStyle);
         boolean isDelimited = ModelDataFile.SEP_DELIMITED.equals(modelDataFile.separatorStyle);
         // if (Debug.infoOn()) Debug.logInfo("[DataFile.readDataFile] separatorStyle is " + modelDataFile.separatorStyle + ", isFixedRecord: " + isFixedRecord, module);
 
@@ -111,12 +112,14 @@ public class RecordIterator {
         } else {
             try {
                 nextLine = br.readLine();
-            } catch (IOException e) {
+                Debug.logInfo("br.readLine()=\"" + nextLine + "\"", module);
+                } catch (IOException e) {
                 throw new DataFileException("Error reading line #" + nextLineNum + " from location: " + locationInfo, e);
             }
         }
 
-        if (nextLine != null && !(eof.equals(nextLine.substring(0,1)) && 1 == nextLine.length())) {
+        //if (nextLine != null && !(eof.equals(nextLine.substring(0,1)) && 1 == nextLine.length())) {
+        if (nextLine != null && !((nextLine.contains(eof) ) )) {
             nextLineNum++;
             ModelRecord modelRecord = findModelForLine(nextLine, nextLineNum, modelDataFile);
             if (isDelimited) {
@@ -136,7 +139,8 @@ public class RecordIterator {
     }
 
     public boolean hasNext() {
-        return nextLine != null && !(eof.equals(nextLine.substring(0,1)) && 1 == nextLine.length());
+        //return nextLine != null && !(eof.equals(nextLine.substring(0,1)) && 1 == nextLine.length());
+        return nextLine != null && !((nextLine.contains(eof) ) );
 
     }