DefaultFlatFileItemProvider -> FlatFileItemProvider

This commit is contained in:
dsyer
2007-08-21 13:31:09 +00:00
parent 2c1f2f9a98
commit 92bd3607f3
7 changed files with 84 additions and 45 deletions

View File

@@ -18,6 +18,7 @@ package org.springframework.batch.item.provider;
import java.util.Properties;
import org.springframework.batch.io.Skippable;
import org.springframework.batch.io.file.FieldSet;
import org.springframework.batch.io.file.FieldSetMapper;
import org.springframework.batch.item.validator.Validator;
@@ -33,8 +34,8 @@ import org.springframework.batch.statistics.StatisticsProvider;
*
* @author Dave Syer
*/
public class DefaultFlatFileItemProvider extends AbstractFieldSetItemProvider implements Restartable,
StatisticsProvider {
public class FlatFileItemProvider extends AbstractFieldSetItemProvider implements Restartable,
StatisticsProvider, Skippable {
private FieldSetMapper mapper;
private Validator validator;
@@ -102,4 +103,14 @@ public class DefaultFlatFileItemProvider extends AbstractFieldSetItemProvider im
return ((StatisticsProvider) source).getStatistics();
}
/**
* @return delegates to the input source if it is a
* {@link Skippable}.
* @see Skippable#skip()
*/
public void skip() {
if (source instanceof Skippable) {
((Skippable) source).skip();
}
}
}

View File

@@ -22,12 +22,13 @@ import java.util.Properties;
import junit.framework.TestCase;
import org.springframework.batch.io.Skippable;
import org.springframework.batch.io.exception.ValidationException;
import org.springframework.batch.io.file.FieldSet;
import org.springframework.batch.io.file.FieldSetInputSource;
import org.springframework.batch.io.file.FieldSetMapper;
import org.springframework.batch.io.file.support.DefaultFlatFileInputSource;
import org.springframework.batch.item.provider.DefaultFlatFileItemProvider;
import org.springframework.batch.item.provider.FlatFileItemProvider;
import org.springframework.batch.item.validator.Validator;
import org.springframework.batch.restart.GenericRestartData;
import org.springframework.batch.restart.RestartData;
@@ -37,27 +38,33 @@ import org.springframework.batch.support.PropertiesConverter;
import org.springframework.core.io.ByteArrayResource;
/**
* Unit tests for {@link DefaultFlatFileItemProvider}
* Unit tests for {@link FlatFileItemProvider}
*
* @author Robert Kasanicky
* @author Dave Syer
*/
public class DefaultFlatFileItemProviderTests extends TestCase {
public class FlatFileItemProviderTests extends TestCase {
public static String FOO = "foo";
// object under test
private DefaultFlatFileItemProvider itemProvider = new DefaultFlatFileItemProvider();
private FlatFileItemProvider itemProvider = new FlatFileItemProvider();
// Input source
private DefaultFlatFileInputSource source;
//mock mapper
// mock mapper
private FieldSetMapper mapper;
private List list = new ArrayList();
// create mock objects and inject them into data provider
protected void setUp() throws Exception {
source = new DefaultFlatFileInputSource();
source = new DefaultFlatFileInputSource() {
public void skip() {
super.skip();
list.add("skipped");
}
};
source.setResource(new ByteArrayResource("a,b".getBytes()));
mapper = new FieldSetMapper() {
public Object mapLine(FieldSet fs) {
@@ -66,36 +73,43 @@ public class DefaultFlatFileItemProviderTests extends TestCase {
};
itemProvider.setSource(source);
itemProvider.setMapper(mapper);
assertTrue(Restartable.class.isAssignableFrom(DefaultFlatFileInputSource.class));
assertTrue(FieldSetInputSource.class.isAssignableFrom(DefaultFlatFileInputSource.class));
assertTrue(StatisticsProvider.class.isAssignableFrom(DefaultFlatFileInputSource.class));
assertTrue(Restartable.class
.isAssignableFrom(DefaultFlatFileInputSource.class));
assertTrue(Skippable.class
.isAssignableFrom(DefaultFlatFileInputSource.class));
assertTrue(FieldSetInputSource.class
.isAssignableFrom(DefaultFlatFileInputSource.class));
assertTrue(StatisticsProvider.class
.isAssignableFrom(DefaultFlatFileInputSource.class));
}
/**
* Uses input template to provide the domain object.
*/
public void testNext() {
public void testNext() {
Object result = itemProvider.next();
assertSame("domain object is provided by the input template", FOO, result);
assertSame("domain object is provided by the input template", FOO,
result);
}
/**
* Uses input template to provide the domain object.
*/
public void testNextWithValidator() {
public void testNextWithValidator() {
itemProvider.setValidator(new Validator() {
public void validate(Object value) throws ValidationException {
list.add(value);
}
});
itemProvider.next();
assertSame("domain object is provided by the input template", FOO, list.get(0));
assertSame("domain object is provided by the input template", FOO, list
.get(0));
}
/**
* Uses input template to provide the domain object.
*/
public void testNextWithValidatorAndInvalidData() {
public void testNextWithValidatorAndInvalidData() {
itemProvider.setValidator(new Validator() {
public void validate(Object value) throws ValidationException {
throw new ValidationException("Invalid input");
@@ -114,10 +128,10 @@ public class DefaultFlatFileItemProviderTests extends TestCase {
* Gets statistics from the input template
*/
public void testGetStatistics() {
Properties statistics = ((StatisticsProvider) source).getStatistics();
Properties statistics = ((StatisticsProvider) source).getStatistics();
assertEquals(statistics, itemProvider.getStatistics());
}
/**
* Gets statistics from the input template
*/
@@ -132,58 +146,72 @@ public class DefaultFlatFileItemProviderTests extends TestCase {
*/
public void testGetRestartData() {
RestartData data = ((Restartable) source).getRestartData();
assertEquals(data.getProperties(), itemProvider.getRestartData().getProperties());
assertEquals(data.getProperties(), itemProvider.getRestartData()
.getProperties());
}
/**
* Forwarded restart data to input template
*/
public void testRestoreFrom() {
final List list = new ArrayList();
RestartData data = new RestartData() {
public Properties getProperties() {
list.add(FOO);
return ((Restartable) source).getRestartData().getProperties();
}};
}
};
itemProvider.restoreFrom(data);
//assertEquals(1, list.size()); getProperties are called multiple times due to null checks
// assertEquals(1, list.size()); getProperties are called multiple times
// due to null checks
assertTrue(list.size() > 0);
}
/**
* Forward restart data to input template
* @throws Exception
*
* @throws Exception
*/
public void testRestoreFromWithoutRestartable() throws Exception {
itemProvider.setSource(null);
try {
itemProvider.restoreFrom(new GenericRestartData(PropertiesConverter.stringToProperties("value=bar")));
itemProvider.restoreFrom(new GenericRestartData(PropertiesConverter
.stringToProperties("value=bar")));
fail("Expected IllegalStateException");
}
catch (IllegalStateException e) {
} catch (IllegalStateException e) {
// expected
}
}
/**
* Forward restart data to input template
* @throws Exception
*
* @throws Exception
*/
public void testGetRestartDataWithoutRestartable() throws Exception {
itemProvider.setSource(null);
try {
itemProvider.getRestartData();
fail("Expected IllegalStateException");
}
catch (IllegalStateException e) {
} catch (IllegalStateException e) {
// expected
}
}
/**
* Forward restart data to input template
*
* @throws Exception
*/
public void testSkippable() throws Exception {
assertEquals(0, list.size());
itemProvider.skip();
assertEquals(1, list.size());
}
}

View File

@@ -22,7 +22,7 @@
class="org.springframework.batch.execution.tasklet.RestartableItemProviderTasklet">
<property name="itemProvider">
<bean
class="org.springframework.batch.item.provider.DefaultFlatFileItemProvider">
class="org.springframework.batch.item.provider.FlatFileItemProvider">
<property name="source" ref="fileInputTemplate" />
<property name="mapper" ref="fieldSetMapper" />
<property name="validator" ref="fixedValidator" />
@@ -42,7 +42,7 @@
class="org.springframework.batch.execution.tasklet.RestartableItemProviderTasklet">
<property name="itemProvider">
<bean
class="org.springframework.batch.item.provider.DefaultFlatFileItemProvider">
class="org.springframework.batch.item.provider.FlatFileItemProvider">
<property name="source" ref="fileInputTemplate2" />
<property name="mapper" ref="fieldSetMapper2" />
</bean>

View File

@@ -22,7 +22,7 @@
class="org.springframework.batch.execution.tasklet.RestartableItemProviderTasklet">
<property name="itemProvider">
<bean
class="org.springframework.batch.item.provider.DefaultFlatFileItemProvider">
class="org.springframework.batch.item.provider.FlatFileItemProvider">
<property name="source" ref="fileInputTemplate" />
<property name="mapper" ref="fieldSetMapper" />
<property name="validator" ref="fixedValidator" />

View File

@@ -22,7 +22,7 @@
class="org.springframework.batch.execution.tasklet.RestartableItemProviderTasklet">
<property name="itemProvider">
<bean
class="org.springframework.batch.item.provider.DefaultFlatFileItemProvider">
class="org.springframework.batch.item.provider.FlatFileItemProvider">
<property name="source" ref="fileInputTemplate" />
<property name="mapper" ref="fieldSetMapper" />
<property name="validator" ref="fixedValidator" />

View File

@@ -20,7 +20,7 @@
<bean class="org.springframework.batch.sample.module.ExceptionRestartableTasklet">
<property name="itemProvider">
<bean
class="org.springframework.batch.item.provider.DefaultFlatFileItemProvider">
class="org.springframework.batch.item.provider.FlatFileItemProvider">
<property name="source" ref="fileInputTemplate" />
<property name="mapper" ref="fieldSetMapper" />
<property name="validator" ref="fixedValidator" />

View File

@@ -24,7 +24,7 @@
<bean class="org.springframework.batch.execution.tasklet.RestartableItemProviderTasklet">
<property name="itemProvider">
<bean
class="org.springframework.batch.item.provider.DefaultFlatFileItemProvider">
class="org.springframework.batch.item.provider.FlatFileItemProvider">
<property name="source" ref="fileInputTemplate" />
<property name="mapper">
<bean class="org.springframework.batch.sample.mapping.TradeFieldSetMapper" />