IN PROGRESS - BATCH-826: Create callback for header and footer reading in xml and flat files
added header callback to FFIR
This commit is contained in:
@@ -90,10 +90,19 @@ public class FlatFileItemReader<T> extends AbstractItemReaderItemStream<T> imple
|
||||
|
||||
private BufferedReader reader;
|
||||
|
||||
private LineCallbackHandler headerCallback;
|
||||
|
||||
public FlatFileItemReader() {
|
||||
setName(ClassUtils.getShortName(FlatFileItemReader.class));
|
||||
}
|
||||
|
||||
/**
|
||||
* headerCallback will be passed the header line before any items are read.
|
||||
*/
|
||||
public void setHeaderCallback(LineCallbackHandler headerCallback) {
|
||||
this.headerCallback = headerCallback;
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter for resource property. The location of an input stream that can be
|
||||
* read.
|
||||
@@ -227,6 +236,9 @@ public class FlatFileItemReader<T> extends AbstractItemReaderItemStream<T> imple
|
||||
String[] names = tokenizer.tokenize(firstLine).getValues();
|
||||
((AbstractLineTokenizer) tokenizer).setNames(names);
|
||||
}
|
||||
if (headerCallback != null) {
|
||||
headerCallback.handleLine(firstLine);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
package org.springframework.batch.item.file;
|
||||
|
||||
/**
|
||||
* Callback interface for handling a line from file. Useful e.g. for header
|
||||
* processing.
|
||||
*
|
||||
* @author Robert Kasanicky
|
||||
*/
|
||||
public interface LineCallbackHandler {
|
||||
|
||||
void handleLine(String line);
|
||||
}
|
||||
@@ -20,6 +20,7 @@ import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
import static org.easymock.EasyMock.*;
|
||||
|
||||
import org.springframework.batch.item.ExecutionContext;
|
||||
import org.springframework.batch.item.ItemStreamException;
|
||||
@@ -228,15 +229,21 @@ public class FlatFileItemReaderBasicTests extends TestCase {
|
||||
|
||||
/**
|
||||
* Header line is skipped and used to setup fieldSet column names.
|
||||
* It is also passed to header callback.
|
||||
*/
|
||||
public void testColumnNamesInHeader() throws Exception {
|
||||
final String INPUT = "name1|name2\nvalue1|value2\nvalue3|value4";
|
||||
|
||||
LineCallbackHandler headerCallback = createStrictMock(LineCallbackHandler.class);
|
||||
headerCallback.handleLine("name1|name2");
|
||||
replay(headerCallback);
|
||||
|
||||
itemReader = new FlatFileItemReader<FieldSet>();
|
||||
itemReader.setResource(getInputResource(INPUT));
|
||||
itemReader.setLineTokenizer(new DelimitedLineTokenizer('|'));
|
||||
itemReader.setFieldSetMapper(fieldSetMapper);
|
||||
itemReader.setFirstLineIsHeader(true);
|
||||
itemReader.setHeaderCallback(headerCallback);
|
||||
itemReader.afterPropertiesSet();
|
||||
itemReader.open(executionContext);
|
||||
|
||||
@@ -247,6 +254,8 @@ public class FlatFileItemReaderBasicTests extends TestCase {
|
||||
fs = itemReader.read();
|
||||
assertEquals("value3", fs.readString("name1"));
|
||||
assertEquals("value4", fs.readString("name2"));
|
||||
|
||||
verify(headerCallback);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user