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

setter for resources instead of resourcePatternResolver + locationPattern
This commit is contained in:
robokaso
2008-05-22 08:05:37 +00:00
parent 6419588259
commit 4c73946232
2 changed files with 10 additions and 45 deletions

View File

@@ -6,14 +6,11 @@ import java.util.List;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.util.Assert;
/**
* Reads items from multiple resources sequentially - resource list is given by
* {@link #setResourcePatternResolver(ResourcePatternResolver)}, the actual
* reading is delegated to
* {@link #setResources(Resource[])}, the actual reading is delegated to
* {@link #setDelegate(ResourceAwareItemReaderItemStream)}.
*
* Reset (rollback) capability is implemented by item buffering.
@@ -27,10 +24,6 @@ public class MultiResourceItemReader extends ExecutionContextUserSupport impleme
private ResourceAwareItemReaderItemStream delegate;
private ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
private String resourceLocationPattern;
private Resource[] resources;
private int currentResourceIndex;
@@ -117,12 +110,6 @@ public class MultiResourceItemReader extends ExecutionContextUserSupport impleme
* delegate.
*/
public void open(ExecutionContext executionContext) throws ItemStreamException {
try {
resources = resourcePatternResolver.getResources(resourceLocationPattern);
}
catch (Exception e) {
throw new ItemStreamException("Couldn't get resource", e);
}
if (executionContext.containsKey(getKey(RESOURCE_INDEX))) {
int index = Long.valueOf(executionContext.getLong(getKey(RESOURCE_INDEX))).intValue();
@@ -149,26 +136,15 @@ public class MultiResourceItemReader extends ExecutionContextUserSupport impleme
this.delegate = delegate;
}
/**
* @param resourcePatternResolver provides the list of input
* {@link Resource}s given {@link #setResourceLocationPattern(String)}.
* {@link PathMatchingResourcePatternResolver} is used by default.
*/
public void setResourcePatternResolver(ResourcePatternResolver resourcePatternResolver) {
this.resourcePatternResolver = resourcePatternResolver;
}
/**
* @param resourceLocationPattern identifies the input {@link Resource}s,
* parsed by {@link #setResourcePatternResolver(ResourcePatternResolver)}
*/
public void setResourceLocationPattern(String resourceLocationPattern) {
this.resourceLocationPattern = resourceLocationPattern;
}
public void afterPropertiesSet() throws Exception {
Assert.notNull(resourcePatternResolver, "resourcePatternResolver property must be set");
Assert.hasLength(resourceLocationPattern, "resourceLocationPattern property must be set");
Assert.notEmpty(resources, "There must be at least one input resource");
}
/**
* @param resources input resources
*/
public void setResources(Resource[] resources) {
this.resources = resources;
}
}

View File

@@ -2,21 +2,17 @@ package org.springframework.batch.item;
import junit.framework.TestCase;
import org.easymock.MockControl;
import org.springframework.batch.item.file.FlatFileItemReader;
import org.springframework.batch.item.file.mapping.FieldSet;
import org.springframework.batch.item.file.mapping.PassThroughFieldSetMapper;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.ResourcePatternResolver;
/**
* Tests for {@link MultiResourceItemReader}.
*/
public class MultiResourceItemReaderIntegrationTests extends TestCase {
private static final String PATTERN = "resource location pattern";
private MultiResourceItemReader tested = new MultiResourceItemReader();
private FlatFileItemReader itemReader = new FlatFileItemReader();
@@ -39,17 +35,10 @@ public class MultiResourceItemReaderIntegrationTests extends TestCase {
*/
protected void setUp() throws Exception {
MockControl control = MockControl.createStrictControl(ResourcePatternResolver.class);
ResourcePatternResolver resolver = (ResourcePatternResolver) control.getMock();
resolver.getResources(PATTERN);
control.setReturnValue(new Resource[] { r1, r2, r3, r4, r5 }, 2);
control.replay();
itemReader.setFieldSetMapper(new PassThroughFieldSetMapper());
tested.setResourcePatternResolver(resolver);
tested.setDelegate(itemReader);
tested.setResourceLocationPattern(PATTERN);
tested.setResources(new Resource[] { r1, r2, r3, r4, r5 });
tested.afterPropertiesSet();
}