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) ) );
}