IN PROGRESS - BATCH-520: Add a Delegating File Reader For Multiple Files

added the common 'foo' tests for both flatfile and xml
added setter for 'saveState'
This commit is contained in:
robokaso
2008-06-03 08:52:48 +00:00
parent 90465f9ce0
commit ca4fc0dbb4
4 changed files with 112 additions and 2 deletions

View File

@@ -0,0 +1,40 @@
package org.springframework.batch.item;
import org.springframework.batch.item.file.FlatFileItemReader;
import org.springframework.batch.item.file.mapping.FieldSet;
import org.springframework.batch.item.file.mapping.FieldSetMapper;
import org.springframework.batch.item.sample.Foo;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
public class MultiResourceItemReaderFlatFileTests extends CommonItemStreamItemReaderTests {
protected ItemReader getItemReader() throws Exception {
MultiResourceItemReader multiReader = new MultiResourceItemReader();
FlatFileItemReader fileReader = new FlatFileItemReader();
fileReader.setFieldSetMapper(new FieldSetMapper() {
public Object mapLine(FieldSet fs) {
Foo foo = new Foo();
foo.setValue(fs.readInt(0));
return foo;
}
});
fileReader.setSaveState(true);
multiReader.setDelegate(fileReader);
Resource r1 = new ByteArrayResource("1\n2\n".getBytes());
Resource r2 = new ByteArrayResource("".getBytes());
Resource r3 = new ByteArrayResource("3\n".getBytes());
Resource r4 = new ByteArrayResource("4\n5\n".getBytes());
multiReader.setResources(new Resource[] { r1, r2, r3, r4 });
multiReader.setSaveState(true);
multiReader.afterPropertiesSet();
return multiReader;
}
}

View File

@@ -112,6 +112,7 @@ public class MultiResourceItemReaderIntegrationTests extends TestCase {
public void testRestart() throws Exception {
itemReader.setSaveState(true);
tested.setSaveState(true);
tested.open(ctx);

View File

@@ -0,0 +1,54 @@
package org.springframework.batch.item;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.Attribute;
import javax.xml.stream.events.StartElement;
import org.springframework.batch.item.sample.Foo;
import org.springframework.batch.item.xml.EventReaderDeserializer;
import org.springframework.batch.item.xml.StaxEventItemReader;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
public class MultiResourceItemReaderXmlTests extends CommonItemStreamItemReaderTests {
protected ItemReader getItemReader() throws Exception {
MultiResourceItemReader multiReader = new MultiResourceItemReader();
StaxEventItemReader reader = new StaxEventItemReader();
reader.setFragmentRootElementName("foo");
reader.setFragmentDeserializer(new EventReaderDeserializer() {
public Object deserializeFragment(XMLEventReader eventReader) {
Attribute attr;
try {
assertTrue(eventReader.nextEvent().isStartDocument());
StartElement event = eventReader.nextEvent().asStartElement();
attr = (Attribute) event.getAttributes().next();
}
catch (XMLStreamException e) {
throw new RuntimeException(e);
}
Foo foo = new Foo();
foo.setValue(Integer.parseInt(attr.getValue()));
return foo;
}
});
reader.setSaveState(true);
Resource r1 = new ByteArrayResource("<foos> <foo value=\"1\"/> <foo value=\"2\"/> </foos>".getBytes());
Resource r2 = new ByteArrayResource("<foos> </foos>".getBytes());
Resource r3 = new ByteArrayResource("<foos> <foo value=\"3\"/> </foos>".getBytes());
Resource r4 = new ByteArrayResource("<foos> <foo value=\"4\"/> <foo value=\"5\"/> </foos>".getBytes());
multiReader.setDelegate(reader);
multiReader.setResources(new Resource[] { r1, r2, r3, r4 });
multiReader.setSaveState(true);
multiReader.afterPropertiesSet();
return multiReader;
}
}