From b66119a80013d675ff34e94861bfaabfddf1b0a9 Mon Sep 17 00:00:00 2001 From: dsyer Date: Sun, 21 Oct 2007 15:29:06 +0000 Subject: [PATCH] IN PROGRESS - issue BATCH-145: Move CollectionItemProvider to infrastructure from samples http://opensource.atlassian.com/projects/spring/browse/BATCH-145 --- ...20070918.testStream.xmlFileStep.output.xml | 2 +- .../item/provider/CollectionItemProvider.java | 22 ++++------ .../sample/mapping/TradeFieldSetMapper.java | 8 ++++ .../src/main/resources/jobs/multilineJob.xml | 42 +++++++++++-------- .../provider/CollectionItemProviderTests.java | 15 ++----- .../mapping/TradeFieldSetMapperTests.java | 8 ++++ 6 files changed, 52 insertions(+), 45 deletions(-) diff --git a/samples/20070918.testStream.xmlFileStep.output.xml b/samples/20070918.testStream.xmlFileStep.output.xml index 50a39a9c9..f13620461 100644 --- a/samples/20070918.testStream.xmlFileStep.output.xml +++ b/samples/20070918.testStream.xmlFileStep.output.xml @@ -1 +1 @@ -XYZ0001511.39Customer1XYZ0002272.99Customer2cXYZ0003999.99Customer3XYZ0001511.39Customer1XYZ0002272.99Customer2cXYZ0003999.99Customer3XYZ0001511.39Customer1XYZ0002272.99Customer2cXYZ0003999.99Customer3 \ No newline at end of file +XYZ0001511.39Customer1XYZ0002272.99Customer2cXYZ0003999.99Customer3XYZ0001511.39Customer1XYZ0002272.99Customer2cXYZ0003999.99Customer3XYZ0001511.39Customer1XYZ0002272.99Customer2cXYZ0003999.99Customer3 \ No newline at end of file diff --git a/samples/src/main/java/org/springframework/batch/sample/item/provider/CollectionItemProvider.java b/samples/src/main/java/org/springframework/batch/sample/item/provider/CollectionItemProvider.java index 395f61083..14ef36fd1 100644 --- a/samples/src/main/java/org/springframework/batch/sample/item/provider/CollectionItemProvider.java +++ b/samples/src/main/java/org/springframework/batch/sample/item/provider/CollectionItemProvider.java @@ -22,7 +22,6 @@ import java.util.Collection; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.batch.io.InputSource; -import org.springframework.batch.io.file.FieldSet; import org.springframework.batch.io.file.FieldSetMapper; import org.springframework.batch.item.ItemProvider; import org.springframework.batch.item.provider.AbstractItemProvider; @@ -45,9 +44,6 @@ public class CollectionItemProvider extends AbstractItemProvider { private InputSource inputSource; - // maps a single line to a simple record - private FieldSetMapper fieldSetMapper; - /** * Get the next list of records. * @@ -56,7 +52,7 @@ public class CollectionItemProvider extends AbstractItemProvider { public Object next() { ResultHolder holder = new ResultHolder(); - while (process((FieldSet)inputSource.read(), holder)) { + while (process(inputSource.read(), holder)) { continue; } @@ -67,29 +63,29 @@ public class CollectionItemProvider extends AbstractItemProvider { } } - private boolean process(FieldSet fieldSet, ResultHolder holder) { + private boolean process(Object value, ResultHolder holder) { // finish processing if we hit the end of file - if (fieldSet == null) { + if (value == null) { log.debug("Exhausted InputSource"); holder.exhausted = true; return false; } // start a new collection - if (fieldSet.readString(0).equals("BEGIN")) { + if (value == FieldSetMapper.BEGIN_RECORD) { log.debug("Start of new record detected"); return true; } // mark we are finished with current collection - if (fieldSet.readString(0).equals("END")) { + if (value == FieldSetMapper.END_RECORD) { log.debug("End of record detected"); return false; } // add a simple record to the current collection - log.debug("Mapping: " + fieldSet); - holder.records.add(fieldSetMapper.mapLine(fieldSet)); + log.debug("Mapping: " + value); + holder.records.add(value); return true; } @@ -101,10 +97,6 @@ public class CollectionItemProvider extends AbstractItemProvider { this.inputSource = inputSource; } - public void setFieldSetMapper(FieldSetMapper mapper) { - this.fieldSetMapper = mapper; - } - /** * Private class for temporary state management while item is being * collected. diff --git a/samples/src/main/java/org/springframework/batch/sample/mapping/TradeFieldSetMapper.java b/samples/src/main/java/org/springframework/batch/sample/mapping/TradeFieldSetMapper.java index 8fcaa0b9a..88522e56a 100644 --- a/samples/src/main/java/org/springframework/batch/sample/mapping/TradeFieldSetMapper.java +++ b/samples/src/main/java/org/springframework/batch/sample/mapping/TradeFieldSetMapper.java @@ -31,6 +31,14 @@ public class TradeFieldSetMapper implements FieldSetMapper { public Object mapLine(FieldSet fieldSet) { + if ("BEGIN".equals(fieldSet.readString(0))) { + return FieldSetMapper.BEGIN_RECORD; + } + + if ("END".equals(fieldSet.readString(0))) { + return FieldSetMapper.END_RECORD; + } + Trade trade = new Trade(); trade.setIsin(fieldSet.readString(0)); trade.setQuantity(fieldSet.readLong(1)); diff --git a/samples/src/main/resources/jobs/multilineJob.xml b/samples/src/main/resources/jobs/multilineJob.xml index 0f589f80b..931785563 100644 --- a/samples/src/main/resources/jobs/multilineJob.xml +++ b/samples/src/main/resources/jobs/multilineJob.xml @@ -1,13 +1,16 @@ - - - + + @@ -17,18 +20,22 @@ - - - + + - + - + - + @@ -39,18 +46,19 @@ - - + - - - + - + @@ -79,7 +87,7 @@ - + diff --git a/samples/src/test/java/org/springframework/batch/sample/item/provider/CollectionItemProviderTests.java b/samples/src/test/java/org/springframework/batch/sample/item/provider/CollectionItemProviderTests.java index 5bc16f0d0..7ae8ae66d 100644 --- a/samples/src/test/java/org/springframework/batch/sample/item/provider/CollectionItemProviderTests.java +++ b/samples/src/test/java/org/springframework/batch/sample/item/provider/CollectionItemProviderTests.java @@ -7,15 +7,12 @@ import junit.framework.TestCase; import org.easymock.MockControl; import org.springframework.batch.io.InputSource; -import org.springframework.batch.io.file.FieldSet; import org.springframework.batch.io.file.FieldSetMapper; -import org.springframework.batch.sample.item.provider.CollectionItemProvider; public class CollectionItemProviderTests extends TestCase { private MockControl inputControl; private InputSource input; - private FieldSetMapper mapper; private CollectionItemProvider provider; public void setUp() { @@ -24,26 +21,20 @@ public class CollectionItemProviderTests extends TestCase { inputControl = MockControl.createControl(InputSource.class); input = (InputSource) inputControl.getMock(); - //create mock for mapper - mapper = new FieldSetMapper() { - public Object mapLine(FieldSet fs) { return fs.readString(0); } - }; - //create provider provider = new CollectionItemProvider(); provider.setInputSource(input); - provider.setFieldSetMapper(mapper); } public void testNext() { //set-up mock input input.read(); - inputControl.setReturnValue(new FieldSet(new String[] {"BEGIN"})); + inputControl.setReturnValue(FieldSetMapper.BEGIN_RECORD); input.read(); - inputControl.setReturnValue(new FieldSet(new String[] {"line"}),3); + inputControl.setReturnValue("line",3); input.read(); - inputControl.setReturnValue(new FieldSet(new String[] {"END"})); + inputControl.setReturnValue(FieldSetMapper.END_RECORD); input.read(); inputControl.setReturnValue(null); inputControl.replay(); diff --git a/samples/src/test/java/org/springframework/batch/sample/mapping/TradeFieldSetMapperTests.java b/samples/src/test/java/org/springframework/batch/sample/mapping/TradeFieldSetMapperTests.java index 6a7e25a2f..0d1a1c477 100644 --- a/samples/src/test/java/org/springframework/batch/sample/mapping/TradeFieldSetMapperTests.java +++ b/samples/src/test/java/org/springframework/batch/sample/mapping/TradeFieldSetMapperTests.java @@ -36,5 +36,13 @@ public class TradeFieldSetMapperTests extends AbstractFieldSetMapperTests{ protected FieldSetMapper fieldSetMapper() { return new TradeFieldSetMapper(); } + + public void testBeginRecord() throws Exception { + assertEquals(FieldSetMapper.BEGIN_RECORD, fieldSetMapper().mapLine(new FieldSet(new String[] {"BEGIN"}))); + } + + public void testEndRecord() throws Exception { + assertEquals(FieldSetMapper.END_RECORD, fieldSetMapper().mapLine(new FieldSet(new String[] {"END"}))); + } }