/** * Builds the {@link MultiResourceItemReader}. * * @return a {@link MultiResourceItemReader} */ public MultiResourceItemReader<T> build() { Assert.notNull(this.resources, "resources array is required."); Assert.notNull(this.delegate, "delegate is required."); if (this.saveState) { Assert.state(StringUtils.hasText(this.name), "A name is required when saveState is set to true."); } MultiResourceItemReader<T> reader = new MultiResourceItemReader<>(); reader.setResources(this.resources); reader.setDelegate(this.delegate); reader.setSaveState(this.saveState); reader.setStrict(this.strict); if (comparator != null) { reader.setComparator(this.comparator); } if (StringUtils.hasText(this.name)) { reader.setName(this.name); } return reader; }
/** * Setup the tested reader to read from the test resources. */ @Before public void setUp() throws Exception { itemReader.setLineMapper(new FooLineMapper()); tested.setDelegate(itemReader); tested.setComparator(new Comparator<Resource>() { @Override public int compare(Resource o1, Resource o2) { return 0; // do not change ordering } }); tested.setResources(new Resource[] { r1, r2, r3, r4, r5 }); }
/** * Setup the tested reader to read from the test resources. */ @Before public void setUp() throws Exception { itemReader.setLineMapper(new PassThroughLineMapper()); tested.setDelegate(itemReader); tested.setComparator(new Comparator<Resource>() { @Override public int compare(Resource o1, Resource o2) { return 0; // do not change ordering } }); tested.setResources(new Resource[] { r1, r2, r3, r4, r5 }); }
@Override protected ItemReader<Foo> getItemReader() throws Exception { MultiResourceItemReader<Foo> multiReader = new MultiResourceItemReader<>(); FlatFileItemReader<Foo> fileReader = new FlatFileItemReader<>(); fileReader.setLineMapper(new LineMapper<Foo>() { @Override public Foo mapLine(String line, int lineNumber) throws Exception { Foo foo = new Foo(); foo.setValue(Integer.valueOf(line)); 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.setComparator(new Comparator<Resource>() { @Override public int compare(Resource arg0, Resource arg1) { return 0; // preserve original ordering } }); return multiReader; }
/** * Resources are ordered according to injected comparator. */ @Test public void testResourceOrderingWithCustomComparator() { Resource r1 = new ByteArrayResource("".getBytes(), "b"); Resource r2 = new ByteArrayResource("".getBytes(), "a"); Resource r3 = new ByteArrayResource("".getBytes(), "c"); Resource[] resources = new Resource[] { r1, r2, r3 }; Comparator<Resource> comp = new Comparator<Resource>() { /** * Reversed ordering by filename. */ @Override public int compare(Resource o1, Resource o2) { Resource r1 = o1; Resource r2 = o2; return -r1.getDescription().compareTo(r2.getDescription()); } }; tested.setComparator(comp); tested.setResources(resources); tested.open(ctx); resources = (Resource[]) ReflectionTestUtils.getField(tested, "resources"); assertSame(r3, resources[0]); assertSame(r1, resources[1]); assertSame(r2, resources[2]); }
multiReader.setResources(new Resource[] { r1, r2, r3, r4 }); multiReader.setSaveState(true); multiReader.setComparator(new Comparator<Resource>() { @Override public int compare(Resource arg0, Resource arg1) {
/** * Builds the {@link MultiResourceItemReader}. * * @return a {@link MultiResourceItemReader} */ public MultiResourceItemReader<T> build() { Assert.notNull(this.resources, "resources array is required."); Assert.notNull(this.delegate, "delegate is required."); if (this.saveState) { Assert.state(StringUtils.hasText(this.name), "A name is required when saveState is set to true."); } MultiResourceItemReader<T> reader = new MultiResourceItemReader<>(); reader.setResources(this.resources); reader.setDelegate(this.delegate); reader.setSaveState(this.saveState); reader.setStrict(this.strict); if (comparator != null) { reader.setComparator(this.comparator); } if (StringUtils.hasText(this.name)) { reader.setName(this.name); } return reader; }