@Override public void update(ExecutionContext executionContext) throws ItemStreamException { this.delegate.update(executionContext); } }
@Test public void testCurrentItemCount() throws Exception { reader.setCurrentItemCount(2); reader.open(executionContext); // read some records reader.read(); reader.read(); // get restart data reader.update(executionContext); assertEquals(4, executionContext.getInt(ClassUtils.getShortName(FlatFileItemReader.class) + ".read.count")); // close input reader.close(); }
@Test public void testMaxItemCount() throws Exception { reader.setMaxItemCount(2); reader.open(executionContext); // read some records reader.read(); reader.read(); // get restart data reader.update(executionContext); assertNull(reader.read()); assertEquals(2, executionContext.getInt(ClassUtils.getShortName(FlatFileItemReader.class) + ".read.count")); // close input reader.close(); }
@Test public void testRestartWithSkippedLines() throws Exception { reader.setLinesToSkip(2); reader.open(executionContext); // read some records reader.read(); reader.read(); // get restart data reader.update(executionContext); // read next two records reader.read(); reader.read(); assertEquals(2, executionContext.getInt(ClassUtils.getShortName(FlatFileItemReader.class) + ".read.count")); // close input reader.close(); reader.setResource(getInputResource("header\nignoreme\ntestLine1\ntestLine2\ntestLine3\ntestLine4\ntestLine5\ntestLine6")); // init for restart reader.open(executionContext); // read remaining records assertEquals("testLine3", reader.read()); assertEquals("testLine4", reader.read()); reader.update(executionContext); assertEquals(4, executionContext.getInt(ClassUtils.getShortName(FlatFileItemReader.class) + ".read.count")); }
@Test public void testRestartWithCustomRecordSeparatorPolicy() throws Exception { reader.setRecordSeparatorPolicy(new RecordSeparatorPolicy() { // 1 record = 2 lines boolean pair = true; @Override public boolean isEndOfRecord(String line) { pair = !pair; return pair; } @Override public String postProcess(String record) { return record; } @Override public String preProcess(String record) { return record; } }); reader.open(executionContext); assertEquals("testLine1testLine2", reader.read()); assertEquals("testLine3testLine4", reader.read()); reader.update(executionContext); reader.close(); reader.open(executionContext); assertEquals("testLine5testLine6", reader.read()); }
@Test public void testItemCountAware() throws Exception { itemReader.open(executionContext); Item item1 = itemReader.read(); assertEquals("testLine1", item1.getValue()); assertEquals(1, item1.getItemCount()); Item item2 = itemReader.read(); assertEquals("testLine2", item2.getValue()); assertEquals(2, item2.getItemCount()); itemReader.update(executionContext); itemReader.close(); itemReader.open(executionContext); Item item3 = itemReader.read(); assertEquals("testLine3", item3.getValue()); assertEquals(3, item3.getItemCount()); }
@Test public void testAdvancedDelimited() throws Exception { final List<String> skippedLines = new ArrayList<>(); FlatFileItemReader<Foo> reader = new FlatFileItemReaderBuilder<Foo>() .name("fooReader") .resource(getResource("1,2,3\n4,5,$1,2,3$\n@this is a comment\n6,7, 8")) .delimited() .quoteCharacter('$') .names("first", "second", "third") .targetType(Foo.class) .linesToSkip(1) .skippedLinesCallback(skippedLines::add) .addComment("@") .build(); ExecutionContext executionContext = new ExecutionContext(); reader.open(executionContext); Foo item = reader.read(); assertEquals(4, item.getFirst()); assertEquals(5, item.getSecond()); assertEquals("1,2,3", item.getThird()); item = reader.read(); assertEquals(6, item.getFirst()); assertEquals(7, item.getSecond()); assertEquals("8", item.getThird()); reader.update(executionContext); assertNull(reader.read()); assertEquals("1,2,3", skippedLines.get(0)); assertEquals(1, skippedLines.size()); assertEquals(1, executionContext.size()); }
assertEquals("testLine3testLine4", item2.getValue()); assertEquals(2, item2.getItemCount()); itemReader.update(executionContext); itemReader.close();
@Test public void testAdvancedFixedLength() throws Exception { FlatFileItemReader<Foo> reader = new FlatFileItemReaderBuilder<Foo>() .name("fooReader") .resource(getResource("1 2%\n 3\n4 5%\n 6\n@this is a comment\n7 8%\n 9\n")) .fixedLength() .columns(new Range(1, 2), new Range(3, 5), new Range(6)) .names("first", "second", "third") .targetType(Foo.class) .recordSeparatorPolicy(new DefaultRecordSeparatorPolicy("\"", "%")) .maxItemCount(2) .saveState(false) .build(); ExecutionContext executionContext = new ExecutionContext(); reader.open(executionContext); Foo item = reader.read(); assertEquals(1, item.getFirst()); assertEquals(2, item.getSecond()); assertEquals("3", item.getThird()); item = reader.read(); assertEquals(4, item.getFirst()); assertEquals(5, item.getSecond()); assertEquals("6", item.getThird()); reader.update(executionContext); assertNull(reader.read()); assertEquals(0, executionContext.size()); }