diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/io/file/SimpleFlatFileItemReader.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/io/file/SimpleFlatFileItemReader.java
index 053357fbf..b79912285 100644
--- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/io/file/SimpleFlatFileItemReader.java
+++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/io/file/SimpleFlatFileItemReader.java
@@ -19,8 +19,9 @@ package org.springframework.batch.io.file;
import java.io.IOException;
import org.springframework.batch.io.exception.FlatFileParsingException;
-import org.springframework.batch.io.file.mapping.FieldSet;
+import org.springframework.batch.io.file.mapping.DefaultFieldSet;
import org.springframework.batch.io.file.mapping.FieldSetMapper;
+import org.springframework.batch.io.file.mapping.FieldSet;
import org.springframework.batch.io.file.separator.LineReader;
import org.springframework.batch.io.file.separator.RecordSeparatorPolicy;
import org.springframework.batch.io.file.separator.ResourceLineReader;
@@ -37,7 +38,7 @@ import org.springframework.util.Assert;
/**
* This class represents a basic input source, that reads data from the file and
- * returns it as structured tuples in the form of{@link FieldSet} instances.
+ * returns it as structured tuples in the form of{@link DefaultFieldSet} instances.
* The location of the file is defined by the resource property. To separate the
* structure of the file, {@link LineTokenizer} is used to parse data obtained
* from the file.
diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/io/file/mapping/BeanWrapperFieldSetMapper.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/io/file/mapping/BeanWrapperFieldSetMapper.java
index 72f038144..7791fb3ee 100644
--- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/io/file/mapping/BeanWrapperFieldSetMapper.java
+++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/io/file/mapping/BeanWrapperFieldSetMapper.java
@@ -44,15 +44,15 @@ import org.springframework.validation.ObjectError;
/**
* {@link FieldSetMapper} implementation based on bean property paths. The
- * {@link FieldSet} to be mapped should have field name meta data corresponding
+ * {@link DefaultFieldSet} to be mapped should have field name meta data corresponding
* to bean property paths in a prototype instance of the desired type. The
* prototype instance is initialized either by referring to to object by bean
* name in the enclosing BeanFactory, or by providing a class to instantiate
* reflectively.
*
* Nested property paths, including indexed properties in maps and collections,
- * can be referenced by the {@link FieldSet} names. They will be converted to
- * nested bean properties inside the prototype. The {@link FieldSet} and the
+ * can be referenced by the {@link DefaultFieldSet} names. They will be converted to
+ * nested bean properties inside the prototype. The {@link DefaultFieldSet} and the
* prototype are thus tightly coupled by the fields that are available and those
* that can be initialized. If some of the nested properties are optional (e.g.
* collection members) they need to be removed by a post processor.
@@ -103,7 +103,7 @@ public class BeanWrapperFieldSetMapper implements FieldSetMapper, BeanFactoryAwa
/**
* The bean name (id) for an object that can be populated from the field set
- * that will be passed into {@link #mapLine(FieldSet)}. Typically a
+ * that will be passed into {@link #mapLine(DefaultFieldSet)}. Typically a
* prototype scoped bean so that a new instance is returned for each field
* set mapped.
*
@@ -119,7 +119,7 @@ public class BeanWrapperFieldSetMapper implements FieldSetMapper, BeanFactoryAwa
/**
* Public setter for the type of bean to create instead of using a prototype
* bean. An object of this type will be created from its default constructor
- * for every call to {@link #mapLine(FieldSet)}.
+ * for every call to {@link #mapLine(DefaultFieldSet)}.
*
* Either this property or the prototype bean name must be specified, but
* not both.
@@ -144,17 +144,17 @@ public class BeanWrapperFieldSetMapper implements FieldSetMapper, BeanFactoryAwa
}
/**
- * Map the {@link FieldSet} to an object retrieved from the enclosing Spring
+ * Map the {@link DefaultFieldSet} to an object retrieved from the enclosing Spring
* context, or to a new instance of the required type if no prototype is
* available.
*
- * @throws NotWritablePropertyException if the {@link FieldSet} contains a
+ * @throws NotWritablePropertyException if the {@link DefaultFieldSet} contains a
* field that cannot be mapped to a bean property.
* @throws BindingException if there is a type conversion or other error (if
* the {@link DataBinder} from {@link #createBinder(Object)} has errors
* after binding).
*
- * @see org.springframework.batch.io.file.mapping.FieldSetMapper#mapLine(org.springframework.batch.io.file.mapping.FieldSet)
+ * @see org.springframework.batch.io.file.mapping.FieldSetMapper#mapLine(org.springframework.batch.io.file.mapping.DefaultFieldSet)
*/
public Object mapLine(FieldSet fs) {
Object copy = getBean();
diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/io/file/mapping/DefaultFieldSet.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/io/file/mapping/DefaultFieldSet.java
new file mode 100644
index 000000000..759eb36ad
--- /dev/null
+++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/io/file/mapping/DefaultFieldSet.java
@@ -0,0 +1,487 @@
+/*
+ * Copyright 2006-2007 the original author or authors.
+ *
+ * Licensed 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.springframework.batch.io.file.mapping;
+
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.Properties;
+
+import org.springframework.util.Assert;
+import org.springframework.util.StringUtils;
+
+/**
+ * Default implementation of {@link FieldSet} using Java using Java primitive
+ * and standard types and utilities. Strings are trimmed before parsing by
+ * default, and so are plain String values.
+ *
+ * @author Rob Harrop
+ * @author Dave Syer
+ */
+public class DefaultFieldSet implements FieldSet {
+
+ private final static String DEFAULT_DATE_PATTERN = "yyyy-MM-dd";
+
+ /**
+ * The fields wrapped by this 'FieldSet' instance.
+ */
+ private String[] tokens;
+
+ private List names;
+
+ public DefaultFieldSet(String[] tokens) {
+ this.tokens = tokens == null ? null : (String[]) tokens.clone();
+ }
+
+ public DefaultFieldSet(String[] tokens, String[] names) {
+ Assert.notNull(tokens);
+ Assert.notNull(names);
+ if (tokens.length != names.length) {
+ throw new IllegalArgumentException("Field names must be same length as values: names="
+ + Arrays.asList(names) + ", values=" + Arrays.asList(tokens));
+ }
+ this.tokens = (String[]) tokens.clone();
+ this.names = Arrays.asList(names);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.batch.io.file.mapping.IFieldSet#getNames()
+ */
+ public String[] getNames() {
+ if (names == null) {
+ throw new IllegalStateException("Field names are not known");
+ }
+ return (String[]) names.toArray();
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.batch.io.file.mapping.IFieldSet#getValues()
+ */
+ public String[] getValues() {
+ return tokens;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.batch.io.file.mapping.IFieldSet#readString(int)
+ */
+ public String readString(int index) {
+ return readAndTrim(index);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.batch.io.file.mapping.IFieldSet#readString(java.lang.String)
+ */
+ public String readString(String name) {
+ return readString(indexOf(name));
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.batch.io.file.mapping.IFieldSet#readBoolean(int)
+ */
+ public boolean readBoolean(int index) {
+ return readBoolean(index, "true");
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.batch.io.file.mapping.IFieldSet#readBoolean(java.lang.String)
+ */
+ public boolean readBoolean(String name) {
+ return readBoolean(indexOf(name));
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.batch.io.file.mapping.IFieldSet#readBoolean(int,
+ * java.lang.String)
+ */
+ public boolean readBoolean(int index, String trueValue) {
+ Assert.notNull(trueValue, "'trueValue' cannot be null.");
+
+ String value = readAndTrim(index);
+
+ return trueValue.equals(value) ? true : false;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.batch.io.file.mapping.IFieldSet#readBoolean(java.lang.String,
+ * java.lang.String)
+ */
+ public boolean readBoolean(String name, String trueValue) {
+ return readBoolean(indexOf(name), trueValue);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.batch.io.file.mapping.IFieldSet#readChar(int)
+ */
+ public char readChar(int index) {
+ String value = readAndTrim(index);
+
+ Assert.isTrue(value.length() == 1, "Cannot convert field value '" + value + "' to char.");
+
+ return value.charAt(0);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.batch.io.file.mapping.IFieldSet#readChar(java.lang.String)
+ */
+ public char readChar(String name) {
+ return readChar(indexOf(name));
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.batch.io.file.mapping.IFieldSet#readByte(int)
+ */
+ public byte readByte(int index) {
+ return Byte.parseByte(readAndTrim(index));
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.batch.io.file.mapping.IFieldSet#readByte(java.lang.String)
+ */
+ public byte readByte(String name) {
+ return readByte(indexOf(name));
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.batch.io.file.mapping.IFieldSet#readShort(int)
+ */
+ public short readShort(int index) {
+ return Short.parseShort(readAndTrim(index));
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.batch.io.file.mapping.IFieldSet#readShort(java.lang.String)
+ */
+ public short readShort(String name) {
+ return readShort(indexOf(name));
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.batch.io.file.mapping.IFieldSet#readInt(int)
+ */
+ public int readInt(int index) {
+ return Integer.parseInt(readAndTrim(index));
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.batch.io.file.mapping.IFieldSet#readInt(java.lang.String)
+ */
+ public int readInt(String name) {
+ return readInt(indexOf(name));
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.batch.io.file.mapping.IFieldSet#readInt(int,
+ * int)
+ */
+ public int readInt(int index, int defaultValue) {
+ String value = readAndTrim(index);
+
+ return StringUtils.hasLength(value) ? Integer.parseInt(value) : defaultValue;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.batch.io.file.mapping.IFieldSet#readInt(java.lang.String,
+ * int)
+ */
+ public int readInt(String name, int defaultValue) {
+ return readInt(indexOf(name), defaultValue);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.batch.io.file.mapping.IFieldSet#readLong(int)
+ */
+ public long readLong(int index) {
+ return Long.parseLong(readAndTrim(index));
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.batch.io.file.mapping.IFieldSet#readLong(java.lang.String)
+ */
+ public long readLong(String name) {
+ return readLong(indexOf(name));
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.batch.io.file.mapping.IFieldSet#readLong(int,
+ * long)
+ */
+ public long readLong(int index, long defaultValue) {
+ String value = readAndTrim(index);
+
+ return StringUtils.hasLength(value) ? Long.parseLong(value) : defaultValue;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.batch.io.file.mapping.IFieldSet#readLong(java.lang.String,
+ * long)
+ */
+ public long readLong(String name, long defaultValue) {
+ return readLong(indexOf(name), defaultValue);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.batch.io.file.mapping.IFieldSet#readFloat(int)
+ */
+ public float readFloat(int index) {
+ return Float.parseFloat(readAndTrim(index));
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.batch.io.file.mapping.IFieldSet#readFloat(java.lang.String)
+ */
+ public float readFloat(String name) {
+ return readFloat(indexOf(name));
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.batch.io.file.mapping.IFieldSet#readDouble(int)
+ */
+ public double readDouble(int index) {
+ return Double.parseDouble(readAndTrim(index));
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.batch.io.file.mapping.IFieldSet#readDouble(java.lang.String)
+ */
+ public double readDouble(String name) {
+ return readDouble(indexOf(name));
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.batch.io.file.mapping.IFieldSet#readBigDecimal(int)
+ */
+ public BigDecimal readBigDecimal(int index) {
+ return readBigDecimal(index, null);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.batch.io.file.mapping.IFieldSet#readBigDecimal(java.lang.String)
+ */
+ public BigDecimal readBigDecimal(String name) {
+ return readBigDecimal(name, null);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.batch.io.file.mapping.IFieldSet#readBigDecimal(int,
+ * java.math.BigDecimal)
+ */
+ public BigDecimal readBigDecimal(int index, BigDecimal defaultValue) {
+ String candidate = readAndTrim(index);
+
+ try {
+ return (StringUtils.hasText(candidate)) ? new BigDecimal(candidate) : defaultValue;
+ }
+ catch (NumberFormatException e) {
+ throw new IllegalArgumentException("Unparseable number: " + candidate);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.batch.io.file.mapping.IFieldSet#readBigDecimal(java.lang.String,
+ * java.math.BigDecimal)
+ */
+ public BigDecimal readBigDecimal(String name, BigDecimal defaultValue) {
+ try {
+ return readBigDecimal(indexOf(name), defaultValue);
+ }
+ catch (IllegalArgumentException e) {
+ throw new IllegalArgumentException(e.getMessage() + ", name: [" + name + "]");
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.batch.io.file.mapping.IFieldSet#readDate(int)
+ */
+ public Date readDate(int index) {
+ return readDate(index, DEFAULT_DATE_PATTERN);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.batch.io.file.mapping.IFieldSet#readDate(java.lang.String)
+ */
+ public Date readDate(String name) {
+ return readDate(name, DEFAULT_DATE_PATTERN);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.batch.io.file.mapping.IFieldSet#readDate(int,
+ * java.lang.String)
+ */
+ public Date readDate(int index, String pattern) {
+ SimpleDateFormat sdf = new SimpleDateFormat(pattern);
+ Date date;
+ String value = readAndTrim(index);
+ try {
+ date = sdf.parse(value);
+ }
+ catch (ParseException e) {
+ throw new IllegalArgumentException(e.getMessage() + ", pattern: [" + pattern + "]");
+ }
+ return date;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.batch.io.file.mapping.IFieldSet#readDate(java.lang.String,
+ * java.lang.String)
+ */
+ public Date readDate(String name, String pattern) {
+ try {
+ return readDate(indexOf(name), pattern);
+ }
+ catch (IllegalArgumentException e) {
+ throw new IllegalArgumentException(e.getMessage() + ", name: [" + name + "]");
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.batch.io.file.mapping.IFieldSet#getFieldCount()
+ */
+ public int getFieldCount() {
+ return tokens.length;
+ }
+
+ /**
+ * Read and trim the {@link String} value at 'index'.
+ *
+ * @throws NullPointerException if the field value is null.
+ */
+ protected String readAndTrim(int index) {
+ String value = tokens[index];
+
+ if (value != null) {
+ return value.trim();
+ }
+ else {
+ return null;
+ }
+ }
+
+ /**
+ * Read and trim the {@link String} value from column with given 'name.
+ *
+ * @throws IllegalArgumentException if a column with given name is not
+ * defined.
+ */
+ protected int indexOf(String name) {
+ if (names == null) {
+ throw new IllegalArgumentException("Cannot access columns by name without meta data");
+ }
+ int index = names.indexOf(name);
+ if (index >= 0) {
+ return index;
+ }
+ throw new IllegalArgumentException("Cannot access column [" + name + "] from " + names);
+ }
+
+ public String toString() {
+ if (names != null) {
+ return getProperties().toString();
+ }
+
+ return tokens == null ? "" : Arrays.asList(tokens).toString();
+ }
+
+ /**
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ public boolean equals(Object object) {
+ if (object instanceof DefaultFieldSet) {
+ DefaultFieldSet fs = (DefaultFieldSet) object;
+
+ if (this.tokens == null) {
+ return fs.tokens == null;
+ }
+ else {
+ return Arrays.equals(this.tokens, fs.tokens);
+ }
+ }
+
+ return false;
+ }
+
+ public int hashCode() {
+ // this algorithm was taken from java 1.5 jdk Arrays.hashCode(Object[])
+ if (tokens == null) {
+ return 0;
+ }
+
+ int result = 1;
+
+ for (int i = 0; i < tokens.length; i++) {
+ result = 31 * result + (tokens[i] == null ? 0 : tokens[i].hashCode());
+ }
+
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.batch.io.file.mapping.IFieldSet#getProperties()
+ */
+ public Properties getProperties() {
+ if (names == null) {
+ throw new IllegalStateException("Cannot create properties without meta data");
+ }
+ Properties props = new Properties();
+ for (int i = 0; i < tokens.length; i++) {
+ String value = readAndTrim(i);
+ if (value != null) {
+ props.setProperty((String) names.get(i), value);
+ }
+ }
+ return props;
+ }
+
+}
diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/io/file/mapping/FieldSet.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/io/file/mapping/FieldSet.java
deleted file mode 100644
index a9b403317..000000000
--- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/io/file/mapping/FieldSet.java
+++ /dev/null
@@ -1,652 +0,0 @@
-/*
- * Copyright 2006-2007 the original author or authors.
- *
- * Licensed 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.springframework.batch.io.file.mapping;
-
-import java.math.BigDecimal;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
-import java.util.Properties;
-
-import org.springframework.util.Assert;
-import org.springframework.util.StringUtils;
-
-/**
- * @author Rob Harrop
- * @author Dave Syer
- */
-public class FieldSet {
-
- private final static String DEFAULT_DATE_PATTERN = "yyyy-MM-dd";
-
- /**
- * The fields wrapped by this 'FieldSet' instance.
- */
- private String[] tokens;
-
- private List names;
-
- public FieldSet(String[] tokens) {
- this.tokens = tokens == null ? null : (String[]) tokens.clone();
- }
-
- public FieldSet(String[] tokens, String[] names) {
- Assert.notNull(tokens);
- Assert.notNull(names);
- if (tokens.length != names.length) {
- throw new IllegalArgumentException(
- "Field names must be same length as values: names="
- + Arrays.asList(names) + ", values="
- + Arrays.asList(tokens));
- }
- this.tokens = (String[]) tokens.clone();
- this.names = Arrays.asList(names);
- }
-
- /**
- * Public accessor for the names property.
- *
- * @return the names
- *
- * @throws IllegalStateException if the names are not defined
- */
- public String[] getNames() {
- if (names == null) {
- throw new IllegalStateException(
- "Field names are not known");
- }
- return (String[]) names.toArray();
- }
-
- /**
- * @return fields wrapped by this 'FieldSet' instance as String values.
- */
- public String[] getValues() {
- return tokens;
- }
-
- /**
- * Read the {@link String} value at index 'index'.
- *
- * @param index
- * the field index.
- * @throws IndexOutOfBoundsException
- * if the index is out of bounds.
- */
- public String readString(int index) {
- return readAndTrim(index);
- }
-
- /**
- * Read the {@link String} value from column with given 'name'.
- *
- * @param name
- * the field name.
- */
- public String readString(String name) {
- return readString(indexOf(name));
- }
-
- /**
- * Read the 'boolean' value at index 'index'.
- *
- * @param index
- * the field index.
- * @throws IndexOutOfBoundsException
- * if the index is out of bounds.
- */
- public boolean readBoolean(int index) {
- return readBoolean(index, "true");
- }
-
- /**
- * Read the 'boolean' value from column with given 'name'.
- *
- * @param name
- * the field name.
- * @throws IllegalArgumentException
- * if a column with given name is not defined.
- */
- public boolean readBoolean(String name) {
- return readBoolean(indexOf(name));
- }
-
- /**
- * Read the 'boolean' value at index 'index'.
- *
- * @param index
- * the field index.
- * @param trueValue
- * the value that signifies {@link Boolean#TRUE true};
- * case-sensitive.
- * @throws IndexOutOfBoundsException
- * if the index is out of bounds, or if the supplied
- * trueValue is null.
- */
- public boolean readBoolean(int index, String trueValue) {
- Assert.notNull(trueValue, "'trueValue' cannot be null.");
-
- String value = readAndTrim(index);
-
- return trueValue.equals(value) ? true : false;
- }
-
- /**
- * Read the 'boolean' value from column with given 'name'.
- *
- * @param name
- * the field name.
- * @param trueValue
- * the value that signifies {@link Boolean#TRUE true};
- * case-sensitive.
- * @throws IllegalArgumentException
- * if a column with given name is not defined, or if the
- * supplied trueValue is null.
- */
- public boolean readBoolean(String name, String trueValue) {
- return readBoolean(indexOf(name), trueValue);
- }
-
- /**
- * Read the 'char' value at index 'index'.
- *
- * @param index
- * the field index.
- * @throws IndexOutOfBoundsException
- * if the index is out of bounds.
- */
- public char readChar(int index) {
- String value = readAndTrim(index);
-
- Assert.isTrue(value.length() == 1, "Cannot convert field value '"
- + value + "' to char.");
-
- return value.charAt(0);
- }
-
- /**
- * Read the 'char' value from column with given 'name'.
- *
- * @param name
- * the field name.
- * @throws IllegalArgumentException
- * if a column with given name is not defined.
- */
- public char readChar(String name) {
- return readChar(indexOf(name));
- }
-
- /**
- * Read the 'byte' value at index 'index'.
- *
- * @param index
- * the field index.
- * @throws IndexOutOfBoundsException
- * if the index is out of bounds.
- */
- public byte readByte(int index) {
- return Byte.parseByte(readAndTrim(index));
- }
-
- /**
- * Read the 'byte' value from column with given 'name'.
- *
- * @param name
- * the field name.
- */
- public byte readByte(String name) {
- return readByte(indexOf(name));
- }
-
- /**
- * Read the 'short' value at index 'index'.
- *
- * @param index
- * the field index.
- * @throws IndexOutOfBoundsException
- * if the index is out of bounds.
- */
- public short readShort(int index) {
- return Short.parseShort(readAndTrim(index));
- }
-
- /**
- * Read the 'short' value from column with given 'name'.
- *
- * @param name
- * the field name.
- * @throws IllegalArgumentException
- * if a column with given name is not defined.
- */
- public short readShort(String name) {
- return readShort(indexOf(name));
- }
-
- /**
- * Read the 'int' value at index 'index'.
- *
- * @param index
- * the field index.
- * @throws IndexOutOfBoundsException
- * if the index is out of bounds.
- */
- public int readInt(int index) {
- return Integer.parseInt(readAndTrim(index));
- }
-
- /**
- * Read the 'int' value from column with given 'name'.
- *
- * @param name
- * the field name.
- * @throws IllegalArgumentException
- * if a column with given name is not defined.
- */
- public int readInt(String name) {
- return readInt(indexOf(name));
- }
-
- /**
- * Read the 'int' value at index 'index',
- * using the supplied defaultValue if the field value is
- * blank.
- *
- * @param index
- * the field index..
- * @throws IndexOutOfBoundsException
- * if the index is out of bounds.
- */
- public int readInt(int index, int defaultValue) {
- String value = readAndTrim(index);
-
- return StringUtils.hasLength(value) ? Integer.parseInt(value)
- : defaultValue;
- }
-
- /**
- * Read the 'int' value from column with given 'name',
- * using the supplied defaultValue if the field value is
- * blank.
- *
- * @param name
- * the field name.
- * @throws IllegalArgumentException
- * if a column with given name is not defined.
- */
- public int readInt(String name, int defaultValue) {
- return readInt(indexOf(name), defaultValue);
- }
-
- /**
- * Read the 'long' value at index 'index'.
- *
- * @param index
- * the field index.
- * @throws IndexOutOfBoundsException
- * if the index is out of bounds.
- */
- public long readLong(int index) {
- return Long.parseLong(readAndTrim(index));
- }
-
- /**
- * Read the 'long' value from column with given 'name'.
- *
- * @param name
- * the field name.
- * @throws IllegalArgumentException
- * if a column with given name is not defined.
- */
- public long readLong(String name) {
- return readLong(indexOf(name));
- }
-
- /**
- * Read the 'long' value at index 'index',
- * using the supplied defaultValue if the field value is
- * blank.
- *
- * @param index
- * the field index..
- * @throws IndexOutOfBoundsException
- * if the index is out of bounds.
- */
- public long readLong(int index, long defaultValue) {
- String value = readAndTrim(index);
-
- return StringUtils.hasLength(value) ? Long.parseLong(value)
- : defaultValue;
- }
-
- /**
- * Read the 'long' value from column with given 'name',
- * using the supplied defaultValue if the field value is
- * blank.
- *
- * @param name
- * the field name.
- * @throws IllegalArgumentException
- * if a column with given name is not defined.
- */
- public long readLong(String name, long defaultValue) {
- return readLong(indexOf(name), defaultValue);
- }
-
- /**
- * Read the 'float' value at index 'index'.
- *
- * @param index
- * the field index.
- * @throws IndexOutOfBoundsException
- * if the index is out of bounds.
- */
- public float readFloat(int index) {
- return Float.parseFloat(readAndTrim(index));
- }
-
- /**
- * Read the 'float' value from column with given 'name.
- *
- * @param name
- * the field name.
- * @throws IllegalArgumentException
- * if a column with given name is not defined.
- */
- public float readFloat(String name) {
- return readFloat(indexOf(name));
- }
-
- /**
- * Read the 'double' value at index 'index'.
- *
- * @param index
- * the field index.
- * @throws IndexOutOfBoundsException
- * if the index is out of bounds.
- */
- public double readDouble(int index) {
- return Double.parseDouble(readAndTrim(index));
- }
-
- /**
- * Read the 'double' value from column with given 'name.
- *
- * @param name
- * the field name.
- * @throws IllegalArgumentException
- * if a column with given name is not defined.
- */
- public double readDouble(String name) {
- return readDouble(indexOf(name));
- }
-
- /**
- * Read the {@link java.math.BigDecimal} value at index 'index'.
- *
- * @param index
- * the field index.
- * @throws IndexOutOfBoundsException
- * if the index is out of bounds.
- */
- public BigDecimal readBigDecimal(int index) {
- return readBigDecimal(index, null);
- }
-
- /**
- * Read the {@link java.math.BigDecimal} value from column with given 'name.
- *
- * @param name
- * the field name.
- * @throws IllegalArgumentException
- * if a column with given name is not defined.
- */
- public BigDecimal readBigDecimal(String name) {
- return readBigDecimal(name, null);
- }
-
- /**
- * Read the {@link BigDecimal} value at index 'index',
- * returning the supplied defaultValue if the trimmed string
- * value at index 'index' is blank.
- *
- * @param index
- * the field index.
- * @throws IndexOutOfBoundsException
- * if the index is out of bounds.
- */
- public BigDecimal readBigDecimal(int index, BigDecimal defaultValue) {
- String candidate = readAndTrim(index);
-
- try {
- return (StringUtils.hasText(candidate)) ? new BigDecimal(candidate)
- : defaultValue;
- } catch (NumberFormatException e) {
- throw new IllegalArgumentException("Unparseable number: "
- + candidate);
- }
- }
-
- /**
- * Read the {@link BigDecimal} value from column with given 'name,
- * returning the supplied defaultValue if the trimmed string
- * value at index 'index' is blank.
- *
- * @param name
- * the field name.
- * @throws IllegalArgumentException
- * if a column with given name is not defined.
- */
- public BigDecimal readBigDecimal(String name, BigDecimal defaultValue) {
- try {
- return readBigDecimal(indexOf(name), defaultValue);
- } catch (IllegalArgumentException e) {
- throw new IllegalArgumentException(e.getMessage() + ", name: ["
- + name + "]");
- }
- }
-
- /**
- * Read the java.util.Date value in default format at
- * designated column index.
- *
- * @param index
- * the field index.
- * @param pattern
- * the pattern describing the date and time format
- * @throws IndexOutOfBoundsException
- * if the index is out of bounds.
- * @see #DEFAULT_DATE_PATTERN
- */
- public Date readDate(int index) {
- return readDate(index, DEFAULT_DATE_PATTERN);
- }
-
- /**
- * Read the java.sql.Date value in given format from column
- * with given name.
- *
- * @param name
- * the field name.
- * @param pattern
- * the pattern describing the date and time format
- * @throws IllegalArgumentException
- * if a column with given name is not defined.
- * @see #DEFAULT_DATE_PATTERN
- */
- public Date readDate(String name) {
- return readDate(name, DEFAULT_DATE_PATTERN);
- }
-
- /**
- * Read the java.util.Date value in default format at
- * designated column index.
- *
- * @param index
- * the field index.
- * @param pattern
- * the pattern describing the date and time format
- * @throws IndexOutOfBoundsException
- * if the index is out of bounds.
- * @throws IllegalArgumentException
- * if the date cannot be parsed.
- *
- */
- public Date readDate(int index, String pattern) {
- SimpleDateFormat sdf = new SimpleDateFormat(pattern);
- Date date;
- String value = readAndTrim(index);
- try {
- date = sdf.parse(value);
- } catch (ParseException e) {
- throw new IllegalArgumentException(e.getMessage() + ", pattern: ["
- + pattern + "]");
- }
- return date;
- }
-
- /**
- * Read the java.sql.Date value in given format from column
- * with given name.
- *
- * @param name
- * the field name.
- * @param pattern
- * the pattern describing the date and time format
- * @throws IllegalArgumentException
- * if a column with given name is not defined or if the
- * specified field cannot be parsed
- *
- */
- public Date readDate(String name, String pattern) {
- try {
- return readDate(indexOf(name), pattern);
- } catch (IllegalArgumentException e) {
- throw new IllegalArgumentException(e.getMessage() + ", name: ["
- + name + "]");
- }
- }
-
- /**
- * Return the number of fields in this 'FieldSet'.
- */
- public int getFieldCount() {
- return tokens.length;
- }
-
- /**
- * Read and trim the {@link String} value at 'index'.
- *
- * @throws NullPointerException
- * if the field value is null.
- */
- private String readAndTrim(int index) {
- String value = tokens[index];
-
- if (value != null) {
- return value.trim();
- } else {
- return null;
- }
- }
-
- /**
- * Read and trim the {@link String} value from column with given 'name.
- *
- * @throws IllegalArgumentException
- * if a column with given name is not defined.
- */
- private int indexOf(String name) {
- if (names == null) {
- throw new IllegalArgumentException(
- "Cannot access columns by name without meta data");
- }
- int index = names.indexOf(name);
- if (index >= 0) {
- return index;
- }
- throw new IllegalArgumentException("Cannot access column [" + name
- + "] from " + names);
- }
-
- public String toString() {
- if (names != null) {
- return getProperties().toString();
- }
-
- return tokens == null ? "" : Arrays.asList(tokens).toString();
- }
-
- /**
- * @see java.lang.Object#equals(java.lang.Object)
- */
- public boolean equals(Object object) {
- if (object instanceof FieldSet) {
- FieldSet fs = (FieldSet) object;
-
- if (this.tokens == null) {
- return fs.tokens == null;
- } else {
- return Arrays.equals(this.tokens, fs.tokens);
- }
- }
-
- return false;
- }
-
- public int hashCode() {
- // this algorithm was taken from java 1.5 jdk Arrays.hashCode(Object[])
- if (tokens == null) {
- return 0;
- }
-
- int result = 1;
-
- for (int i = 0; i < tokens.length; i++) {
- result = 31 * result
- + (tokens[i] == null ? 0 : tokens[i].hashCode());
- }
-
- return result;
- }
-
- /**
- * Construct name-value pairs from the field names and string values. Null
- * values are omitted.
- *
- * @return some properties representing the field set.
- *
- * @throws IllegalStateException
- * if the field name meta data is not available.
- */
- public Properties getProperties() {
- if (names == null) {
- throw new IllegalStateException(
- "Cannot create properties without meta data");
- }
- Properties props = new Properties();
- for (int i = 0; i < tokens.length; i++) {
- String value = readAndTrim(i);
- if (value != null) {
- props.setProperty((String) names.get(i), value);
- }
- }
- return props;
- }
-
-}
diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/io/file/transform/AbstractLineTokenizer.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/io/file/transform/AbstractLineTokenizer.java
index 7d096e9ae..52c54958b 100644
--- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/io/file/transform/AbstractLineTokenizer.java
+++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/io/file/transform/AbstractLineTokenizer.java
@@ -19,6 +19,7 @@ package org.springframework.batch.io.file.transform;
import java.util.ArrayList;
import java.util.List;
+import org.springframework.batch.io.file.mapping.DefaultFieldSet;
import org.springframework.batch.io.file.mapping.FieldSet;
@@ -63,7 +64,7 @@ public abstract class AbstractLineTokenizer implements LineTokenizer {
public FieldSet tokenize(String line) {
if (line == null || line.length()==0) {
- return new FieldSet(new String[0]);
+ return new DefaultFieldSet(new String[0]);
}
List tokens = new ArrayList(doTokenize(line));
@@ -73,9 +74,9 @@ public abstract class AbstractLineTokenizer implements LineTokenizer {
String[] values = (String[]) tokens.toArray(new String[tokens.size()]);
if (names.length==0) {
- return new FieldSet(values);
+ return new DefaultFieldSet(values);
}
- return new FieldSet(values, names);
+ return new DefaultFieldSet(values, names);
}
protected abstract List doTokenize(String line);
diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/io/file/transform/PrefixMatchingCompositeLineTokenizer.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/io/file/transform/PrefixMatchingCompositeLineTokenizer.java
index 80830abce..cad1aa67c 100644
--- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/io/file/transform/PrefixMatchingCompositeLineTokenizer.java
+++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/io/file/transform/PrefixMatchingCompositeLineTokenizer.java
@@ -21,6 +21,7 @@ import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
+import org.springframework.batch.io.file.mapping.DefaultFieldSet;
import org.springframework.batch.io.file.mapping.FieldSet;
public class PrefixMatchingCompositeLineTokenizer implements LineTokenizer {
@@ -34,7 +35,7 @@ public class PrefixMatchingCompositeLineTokenizer implements LineTokenizer {
public FieldSet tokenize(String line) {
if (line==null) {
- return new FieldSet(new String[0]);
+ return new DefaultFieldSet(new String[0]);
}
LineTokenizer tokenizer = null;
diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/io/file/DefaultFlatFileItemReaderTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/io/file/DefaultFlatFileItemReaderTests.java
index 4989247d9..b29c357e9 100644
--- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/io/file/DefaultFlatFileItemReaderTests.java
+++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/io/file/DefaultFlatFileItemReaderTests.java
@@ -21,8 +21,9 @@ import java.io.IOException;
import junit.framework.TestCase;
import org.springframework.batch.io.file.DefaultFlatFileItemReader;
-import org.springframework.batch.io.file.mapping.FieldSet;
+import org.springframework.batch.io.file.mapping.DefaultFieldSet;
import org.springframework.batch.io.file.mapping.FieldSetMapper;
+import org.springframework.batch.io.file.mapping.FieldSet;
import org.springframework.batch.io.file.transform.LineTokenizer;
import org.springframework.batch.restart.RestartData;
import org.springframework.core.io.ByteArrayResource;
@@ -48,7 +49,7 @@ public class DefaultFlatFileItemReaderTests extends TestCase {
// simple stub instead of a realistic tokenizer
private LineTokenizer tokenizer = new LineTokenizer() {
public FieldSet tokenize(String line) {
- return new FieldSet(new String[]{line});
+ return new DefaultFieldSet(new String[]{line});
}
};
diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/io/file/FieldSetTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/io/file/FieldSetTests.java
index ea7ff35b0..d2b6359b3 100644
--- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/io/file/FieldSetTests.java
+++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/io/file/FieldSetTests.java
@@ -21,6 +21,7 @@ import java.text.ParseException;
import junit.framework.TestCase;
+import org.springframework.batch.io.file.mapping.DefaultFieldSet;
import org.springframework.batch.io.file.mapping.FieldSet;
public class FieldSetTests extends TestCase {
@@ -38,7 +39,7 @@ public class FieldSetTests extends TestCase {
names = new String[] { "String", "Boolean", "Char", "Byte", "Short", "Integer", "Long", "Float", "Double",
"BigDecimal", "Null", "Date", "DatePattern", "BlankInput" };
- fieldSet = new FieldSet(tokens, names);
+ fieldSet = new DefaultFieldSet(tokens, names);
assertEquals(14, fieldSet.getFieldCount());
}
@@ -48,7 +49,7 @@ public class FieldSetTests extends TestCase {
}
public void testNamesNotKnown() throws Exception {
- fieldSet = new FieldSet(new String[]{"foo"});
+ fieldSet = new DefaultFieldSet(new String[]{"foo"});
try {
fieldSet.getNames();
fail("Expected IllegalStateException");
@@ -162,7 +163,7 @@ public class FieldSetTests extends TestCase {
}
public void testReadBooleanFalse() {
- fieldSet = new FieldSet(new String[] { "false" });
+ fieldSet = new DefaultFieldSet(new String[] { "false" });
assertFalse(fieldSet.readBoolean(0));
}
@@ -217,7 +218,7 @@ public class FieldSetTests extends TestCase {
}
public void testReadLongWithPadding() throws Exception {
- fieldSet = new FieldSet(new String[] {"000009"});
+ fieldSet = new DefaultFieldSet(new String[] {"000009"});
assertEquals(9, fieldSet.readLong(0));
}
@@ -325,12 +326,12 @@ public class FieldSetTests extends TestCase {
public void testEquals() {
assertEquals(fieldSet, fieldSet);
- assertEquals(fieldSet, new FieldSet(tokens));
+ assertEquals(fieldSet, new DefaultFieldSet(tokens));
String[] tokens1 = new String[] { "token1" };
String[] tokens2 = new String[] { "token1" };
- FieldSet fs1 = new FieldSet(tokens1);
- FieldSet fs2 = new FieldSet(tokens2);
+ FieldSet fs1 = new DefaultFieldSet(tokens1);
+ FieldSet fs2 = new DefaultFieldSet(tokens2);
assertEquals(fs1, fs2);
}
@@ -343,30 +344,30 @@ public class FieldSetTests extends TestCase {
}
public void testEqualsNullTokens() {
- assertFalse(new FieldSet(null).equals(fieldSet));
+ assertFalse(new DefaultFieldSet(null).equals(fieldSet));
}
public void testEqualsNotEqual() throws Exception {
String[] tokens1 = new String[] { "token1" };
String[] tokens2 = new String[] { "token1", "token2" };
- FieldSet fs1 = new FieldSet(tokens1);
- FieldSet fs2 = new FieldSet(tokens2);
+ FieldSet fs1 = new DefaultFieldSet(tokens1);
+ FieldSet fs2 = new DefaultFieldSet(tokens2);
assertFalse(fs1.equals(fs2));
}
public void testHashCode() throws Exception {
- assertEquals(fieldSet.hashCode(), new FieldSet(tokens).hashCode());
+ assertEquals(fieldSet.hashCode(), new DefaultFieldSet(tokens).hashCode());
}
public void testHashCodeWithNullTokens() throws Exception {
- assertEquals(0, new FieldSet(null).hashCode());
+ assertEquals(0, new DefaultFieldSet(null).hashCode());
}
public void testConstructor() throws Exception {
try {
- new FieldSet(new String[] { "1", "2" }, new String[] { "a" });
+ new DefaultFieldSet(new String[] { "1", "2" }, new String[] { "a" });
fail("Expected IllegalArgumentException");
}
catch (IllegalArgumentException e) {
@@ -375,28 +376,28 @@ public class FieldSetTests extends TestCase {
}
public void testToStringWithNames() throws Exception {
- fieldSet = new FieldSet(new String[] { "foo", "bar" }, new String[] { "Foo", "Bar" });
+ fieldSet = new DefaultFieldSet(new String[] { "foo", "bar" }, new String[] { "Foo", "Bar" });
assertTrue(fieldSet.toString().indexOf("Foo=foo") >= 0);
}
public void testToStringWithoutNames() throws Exception {
- fieldSet = new FieldSet(new String[] { "foo", "bar" });
+ fieldSet = new DefaultFieldSet(new String[] { "foo", "bar" });
assertTrue(fieldSet.toString().indexOf("foo") >= 0);
}
public void testToStringNullTokens() throws Exception {
- fieldSet = new FieldSet(null);
+ fieldSet = new DefaultFieldSet(null);
assertEquals("", fieldSet.toString());
}
public void testProperties() throws Exception {
- assertEquals("foo", new FieldSet(new String[] { "foo", "bar" }, new String[] { "Foo", "Bar" }).getProperties()
+ assertEquals("foo", new DefaultFieldSet(new String[] { "foo", "bar" }, new String[] { "Foo", "Bar" }).getProperties()
.getProperty("Foo"));
}
public void testPropertiesWithNoNames() throws Exception {
try {
- new FieldSet(new String[] { "foo", "bar" }).getProperties();
+ new DefaultFieldSet(new String[] { "foo", "bar" }).getProperties();
fail("Expected IllegalStateException");
}
catch (IllegalStateException e) {
@@ -406,19 +407,19 @@ public class FieldSetTests extends TestCase {
public void testPropertiesWithWhiteSpace() throws Exception{
- assertEquals("bar", new FieldSet(new String[] { "foo", "bar " }, new String[] { "Foo", "Bar"}).getProperties().getProperty("Bar"));
+ assertEquals("bar", new DefaultFieldSet(new String[] { "foo", "bar " }, new String[] { "Foo", "Bar"}).getProperties().getProperty("Bar"));
}
public void testPropertiesWithNullValues() throws Exception{
- fieldSet = new FieldSet(new String[] { null, "bar" }, new String[] { "Foo", "Bar"});
+ fieldSet = new DefaultFieldSet(new String[] { null, "bar" }, new String[] { "Foo", "Bar"});
assertEquals("bar", fieldSet.getProperties().getProperty("Bar"));
assertEquals(null, fieldSet.getProperties().getProperty("Foo"));
}
public void testAccessByNameWhenNamesMissing() throws Exception {
try {
- new FieldSet(new String[] { "1", "2" }).readInt("a");
+ new DefaultFieldSet(new String[] { "1", "2" }).readInt("a");
fail("Expected IllegalArgumentException");
}
catch (IllegalArgumentException e) {
@@ -435,7 +436,7 @@ public class FieldSetTests extends TestCase {
}
public void testPaddedLong(){
- FieldSet fs = new FieldSet(new String[]{"00000009"});
+ FieldSet fs = new DefaultFieldSet(new String[]{"00000009"});
long value = fs.readLong(0);
assertEquals(value, 9);
diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/io/file/SimpleFlatFileItemReaderTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/io/file/SimpleFlatFileItemReaderTests.java
index 8b8c98686..7c73e6b31 100644
--- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/io/file/SimpleFlatFileItemReaderTests.java
+++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/io/file/SimpleFlatFileItemReaderTests.java
@@ -25,8 +25,9 @@ import junit.framework.TestCase;
import org.springframework.batch.io.exception.BatchEnvironmentException;
import org.springframework.batch.io.exception.FlatFileParsingException;
-import org.springframework.batch.io.file.mapping.FieldSet;
+import org.springframework.batch.io.file.mapping.DefaultFieldSet;
import org.springframework.batch.io.file.mapping.FieldSetMapper;
+import org.springframework.batch.io.file.mapping.FieldSet;
import org.springframework.batch.io.file.separator.DefaultRecordSeparatorPolicy;
import org.springframework.batch.io.file.transform.DelimitedLineTokenizer;
import org.springframework.batch.io.file.transform.LineTokenizer;
@@ -52,7 +53,7 @@ public class SimpleFlatFileItemReaderTests extends TestCase {
// simple stub instead of a realistic tokenizer
private LineTokenizer tokenizer = new LineTokenizer() {
public FieldSet tokenize(String line) {
- return new FieldSet(new String[] { line });
+ return new DefaultFieldSet(new String[] { line });
}
};
diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/io/file/mapping/BeanWrapperFieldSetMapperTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/io/file/mapping/BeanWrapperFieldSetMapperTests.java
index 998c5baa4..e84d5971c 100644
--- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/io/file/mapping/BeanWrapperFieldSetMapperTests.java
+++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/io/file/mapping/BeanWrapperFieldSetMapperTests.java
@@ -64,7 +64,7 @@ public class BeanWrapperFieldSetMapperTests extends TestCase {
mapper.setTargetType(TestObject.class);
mapper.afterPropertiesSet();
- FieldSet fieldSet = new FieldSet(new String[] { "This is some dummy string", "true", "C" }, new String[] {
+ FieldSet fieldSet = new DefaultFieldSet(new String[] { "This is some dummy string", "true", "C" }, new String[] {
"varString", "varBoolean", "varChar" });
TestObject result = (TestObject) mapper.mapLine(fieldSet);
assertEquals("This is some dummy string", result.getVarString());
@@ -79,7 +79,7 @@ public class BeanWrapperFieldSetMapperTests extends TestCase {
context.getBeanFactory().registerSingleton("bean", new TestObject());
mapper.setPrototypeBeanName("bean");
- FieldSet fieldSet = new FieldSet(new String[] { "This is some dummy string", "true", "C" }, new String[] {
+ FieldSet fieldSet = new DefaultFieldSet(new String[] { "This is some dummy string", "true", "C" }, new String[] {
"varString", "varBoolean", "varChar" });
TestObject result = (TestObject) mapper.mapLine(fieldSet);
assertEquals("This is some dummy string", result.getVarString());
@@ -94,7 +94,7 @@ public class BeanWrapperFieldSetMapperTests extends TestCase {
context.getBeanFactory().registerSingleton("bean", new TestObject());
mapper.setPrototypeBeanName("bean");
- FieldSet fieldSet = new FieldSet(new String[] { "This is some dummy string", "true", "C" }, new String[] {
+ FieldSet fieldSet = new DefaultFieldSet(new String[] { "This is some dummy string", "true", "C" }, new String[] {
"VarString", "VAR_BOOLEAN", "VAR_CHAR" });
TestObject result = (TestObject) mapper.mapLine(fieldSet);
assertEquals("This is some dummy string", result.getVarString());
@@ -107,7 +107,7 @@ public class BeanWrapperFieldSetMapperTests extends TestCase {
BeanWrapperFieldSetMapper mapper = (BeanWrapperFieldSetMapper) context.getBean("fieldSetMapper");
- FieldSet fieldSet = new FieldSet(new String[] { "This is some dummy string", "true", "C" }, new String[] {
+ FieldSet fieldSet = new DefaultFieldSet(new String[] { "This is some dummy string", "true", "C" }, new String[] {
"varString", "varBoolean", "varChar" });
TestObject result = (TestObject) mapper.mapLine(fieldSet);
assertEquals("This is some dummy string", result.getVarString());
@@ -128,7 +128,7 @@ public class BeanWrapperFieldSetMapperTests extends TestCase {
context.getBeanFactory().registerSingleton("bean", testNestedA);
mapper.setPrototypeBeanName("bean");
- FieldSet fieldSet = new FieldSet(new String[] { "This is some dummy string", "1", "Another dummy", "2" },
+ FieldSet fieldSet = new DefaultFieldSet(new String[] { "This is some dummy string", "1", "Another dummy", "2" },
new String[] { "valueA", "valueB", "testObjectB.valueA", "testObjectB.testObjectC.value" });
TestNestedA result = (TestNestedA) mapper.mapLine(fieldSet);
@@ -148,7 +148,7 @@ public class BeanWrapperFieldSetMapperTests extends TestCase {
context.getBeanFactory().registerSingleton("bean", testNestedA);
mapper.setPrototypeBeanName("bean");
- FieldSet fieldSet = new FieldSet(new String[] { "This is some dummy string", "1" }, new String[] { "VALUE_A",
+ FieldSet fieldSet = new DefaultFieldSet(new String[] { "This is some dummy string", "1" }, new String[] { "VALUE_A",
"VALUE_B" });
TestNestedA result = (TestNestedA) mapper.mapLine(fieldSet);
@@ -166,7 +166,7 @@ public class BeanWrapperFieldSetMapperTests extends TestCase {
context.getBeanFactory().registerSingleton("bean", testNestedC);
mapper.setPrototypeBeanName("bean");
- FieldSet fieldSet = new FieldSet(new String[] { "1" }, new String[] { "foo" });
+ FieldSet fieldSet = new DefaultFieldSet(new String[] { "1" }, new String[] { "foo" });
TestNestedC result = (TestNestedC) mapper.mapLine(fieldSet);
@@ -187,7 +187,7 @@ public class BeanWrapperFieldSetMapperTests extends TestCase {
context.getBeanFactory().registerSingleton("bean", testNestedA);
mapper.setPrototypeBeanName("bean");
- FieldSet fieldSet = new FieldSet(new String[] { "Another dummy", "2" }, new String[] { "TestObjectB.ValueA",
+ FieldSet fieldSet = new DefaultFieldSet(new String[] { "Another dummy", "2" }, new String[] { "TestObjectB.ValueA",
"TestObjectB.TestObjectC.Value" });
TestNestedA result = (TestNestedA) mapper.mapLine(fieldSet);
@@ -207,7 +207,7 @@ public class BeanWrapperFieldSetMapperTests extends TestCase {
context.getBeanFactory().registerSingleton("bean", testNestedA);
mapper.setPrototypeBeanName("bean");
- FieldSet fieldSet = new FieldSet(new String[] { "Another dummy" }, new String[] { "TestObjectB.foo" });
+ FieldSet fieldSet = new DefaultFieldSet(new String[] { "Another dummy" }, new String[] { "TestObjectB.foo" });
try {
mapper.mapLine(fieldSet);
@@ -229,7 +229,7 @@ public class BeanWrapperFieldSetMapperTests extends TestCase {
context.getBeanFactory().registerSingleton("bean", testNestedA);
mapper.setPrototypeBeanName("bean");
- FieldSet fieldSet = new FieldSet(new String[] { "2" }, new String[] { "TestObjectA.garbage" });
+ FieldSet fieldSet = new DefaultFieldSet(new String[] { "2" }, new String[] { "TestObjectA.garbage" });
try {
mapper.mapLine(fieldSet);
@@ -280,7 +280,7 @@ public class BeanWrapperFieldSetMapperTests extends TestCase {
context.getBeanFactory().registerSingleton("bean", nestedList);
mapper.setPrototypeBeanName("bean");
- FieldSet fieldSet = new FieldSet(new String[] { "1", "2", "3" }, new String[] { "NestedC[0].Value",
+ FieldSet fieldSet = new DefaultFieldSet(new String[] { "1", "2", "3" }, new String[] { "NestedC[0].Value",
"NestedC[1].Value", "NestedC[2].Value" });
mapper.mapLine(fieldSet);
@@ -296,7 +296,7 @@ public class BeanWrapperFieldSetMapperTests extends TestCase {
BeanWrapperFieldSetMapper mapper = new BeanWrapperFieldSetMapper();
mapper.setTargetType(TestObject.class);
- FieldSet fieldSet = new FieldSet(new String[] { "00009" }, new String[] { "varLong" });
+ FieldSet fieldSet = new DefaultFieldSet(new String[] { "00009" }, new String[] { "varLong" });
try {
mapper.mapLine(fieldSet);
@@ -343,7 +343,7 @@ public class BeanWrapperFieldSetMapperTests extends TestCase {
BeanWrapperFieldSetMapper mapper = new BeanWrapperFieldSetMapper();
mapper.setTargetType(TestObject.class);
- FieldSet fieldSet = new FieldSet(new String[] { "00009" }, new String[] { "varLong" });
+ FieldSet fieldSet = new DefaultFieldSet(new String[] { "00009" }, new String[] { "varLong" });
mapper.setCustomEditors(Collections.singletonMap(Long.TYPE, new CustomNumberEditor(Long.class, NumberFormat
.getNumberInstance(), true)));
@@ -357,7 +357,7 @@ public class BeanWrapperFieldSetMapperTests extends TestCase {
BeanWrapperFieldSetMapper mapper = new BeanWrapperFieldSetMapper();
mapper.setTargetType(TestObject.class);
- FieldSet fieldSet = new FieldSet(new String[] { "00009", "78" }, new String[] { "varLong", "varInt" });
+ FieldSet fieldSet = new DefaultFieldSet(new String[] { "00009", "78" }, new String[] { "varLong", "varInt" });
mapper.setCustomEditors(Collections.singletonMap(Long.TYPE, new CustomNumberEditor(Long.class, NumberFormat
.getNumberInstance(), true)));
diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/io/file/transform/PrefixMatchingCompositeLineTokenizerTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/io/file/transform/PrefixMatchingCompositeLineTokenizerTests.java
index 3013b8f9e..455758ce4 100644
--- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/io/file/transform/PrefixMatchingCompositeLineTokenizerTests.java
+++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/io/file/transform/PrefixMatchingCompositeLineTokenizerTests.java
@@ -23,6 +23,7 @@ import java.util.Map;
import junit.framework.TestCase;
+import org.springframework.batch.io.file.mapping.DefaultFieldSet;
import org.springframework.batch.io.file.mapping.FieldSet;
import org.springframework.batch.io.file.transform.DelimitedLineTokenizer;
import org.springframework.batch.io.file.transform.PrefixMatchingCompositeLineTokenizer;
@@ -86,7 +87,7 @@ public class PrefixMatchingCompositeLineTokenizerTests extends TestCase {
public void testMatchWithPrefix() throws Exception {
tokenizer.setTokenizers(Collections.singletonMap("foo", new LineTokenizer() {
public FieldSet tokenize(String line) {
- return new FieldSet(new String[] {line});
+ return new DefaultFieldSet(new String[] {line});
}
}));
FieldSet fields = tokenizer.tokenize("foo bar");
diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/repeat/support/AbstractTradeBatchTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/repeat/support/AbstractTradeBatchTests.java
index 30cb732f8..599585e68 100644
--- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/repeat/support/AbstractTradeBatchTests.java
+++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/repeat/support/AbstractTradeBatchTests.java
@@ -19,8 +19,8 @@ package org.springframework.batch.repeat.support;
import junit.framework.TestCase;
import org.springframework.batch.io.file.SimpleFlatFileItemReader;
-import org.springframework.batch.io.file.mapping.FieldSet;
import org.springframework.batch.io.file.mapping.FieldSetMapper;
+import org.springframework.batch.io.file.mapping.FieldSet;
import org.springframework.batch.item.ItemProcessor;
import org.springframework.batch.item.reader.DelegatingItemReader;
import org.springframework.core.io.ClassPathResource;