* declared for the CodeReader.
*
*/
-public final class ChannelCodeReaderFilter<OUTPUT> extends CodeReaderFilter {
+public final class ChannelCodeReaderFilter<OUTPUT> extends CodeReaderFilter<OUTPUT> {
@SuppressWarnings("unchecked")
private Channel<OUTPUT>[] channels = new Channel[0];
private CodeReader internalCodeReader;
- private OUTPUT output;
+ /**
+ * Creates a CodeReaderFilter that will use the provided Channels to filter the character stream it gets from its reader.
+ *
+ * @param channels
+ * the different channels
+ */
+ public ChannelCodeReaderFilter(Channel<OUTPUT>... channels) {
+ super();
+ this.channels = channels;
+ }
/**
- * Creates a CodeReaderFilter that will use the provided Channels to filter the character stream it gets from its reader. And optionaly,
+ * Creates a CodeReaderFilter that will use the provided Channels to filter the character stream it gets from its reader. And optionally,
* it can push token to the provided output object.
*
* @param output
* the different channels
*/
public ChannelCodeReaderFilter(OUTPUT output, Channel<OUTPUT>... channels) {
- super();
+ super(output);
this.channels = channels;
- this.output = output;
}
/**
}
boolean consumed = false;
for (Channel<OUTPUT> channel : channels) {
- if (channel.consume(internalCodeReader, output)) {
+ if (channel.consume(internalCodeReader, getOutput())) {
consumed = true;
break;
}
private boolean recordingMode = false;
private StringBuilder recordedCharacters = new StringBuilder();
- public CodeBuffer(Reader code, CodeReaderFilter... codeReaderFilters) {
+ public CodeBuffer(Reader code, CodeReaderFilter<?>... codeReaderFilters) {
this(code, DEFAULT_BUFFER_CAPACITY, codeReaderFilters);
}
- private CodeBuffer(Reader initialCodeReader, int bufferCapacity, CodeReaderFilter... codeReaderFilters) {
+ private CodeBuffer(Reader initialCodeReader, int bufferCapacity, CodeReaderFilter<?>... codeReaderFilters) {
lastChar = -1;
cursor = new Cursor();
this.bufferCapacity = bufferCapacity;
buffer = new char[bufferCapacity];
Reader reader = initialCodeReader;
- for (CodeReaderFilter codeReaderFilter : codeReaderFilters) {
+ for (CodeReaderFilter<?> codeReaderFilter : codeReaderFilters) {
reader = new Filter(reader, codeReaderFilter);
}
this.code = reader;
fillBuffer();
}
- public CodeBuffer(String code, CodeReaderFilter... codeReaderFilters) {
+ public CodeBuffer(String code, CodeReaderFilter<?>... codeReaderFilters) {
this(new StringReader(code), codeReaderFilters);
}
- protected CodeBuffer(String code, int bufferCapacity, CodeReaderFilter... codeReaderFilters) {
+ protected CodeBuffer(String code, int bufferCapacity, CodeReaderFilter<?>... codeReaderFilters) {
this(new StringReader(code), bufferCapacity, codeReaderFilters);
}
*/
final class Filter extends FilterReader {
- private CodeReaderFilter codeReaderFilter;
+ private CodeReaderFilter<?> codeReaderFilter;
- public Filter(Reader in, CodeReaderFilter codeReaderFilter) {
+ public Filter(Reader in, CodeReaderFilter<?> codeReaderFilter) {
super(in);
this.codeReaderFilter = codeReaderFilter;
this.codeReaderFilter.setReader(in);
* @see CodeBufferTest#testSeveralCodeReaderFilter()
*
*/
-public abstract class CodeReaderFilter {
+public abstract class CodeReaderFilter<OUTPUT> {
private Reader reader;
+ private OUTPUT output;
+
+ public CodeReaderFilter() {
+ }
+
+ public CodeReaderFilter(OUTPUT output) {
+ this.output = output;
+ }
+
/**
* Returns the reader from which this class reads the character stream.
*
this.reader = reader;
}
+ /**
+ * Returns the output object.
+ *
+ * @return the output
+ */
+ public OUTPUT getOutput() {
+ return output;
+ }
+
+ /**
+ * Sets the output object
+ *
+ * @param output
+ * the output to set
+ */
+ public void setOutput(OUTPUT output) {
+ this.output = output;
+ }
+
/**
* This method implements the filtering logic, that is:
* <ul>
public void testChannelCodeReaderFilter() throws Exception {
// create a windowing channel that drops the 2 first characters, keeps 6 characters and drops the rest of the line
@SuppressWarnings({ "rawtypes", "unchecked" })
- CodeBuffer code = new CodeBuffer("0123456789\nABCDEFGHIJ", new ChannelCodeReaderFilter(null, new WindowingChannel()));
+ CodeBuffer code = new CodeBuffer("0123456789\nABCDEFGHIJ", new ChannelCodeReaderFilter(new Object(), new WindowingChannel()));
// test #charAt
assertEquals('2', code.charAt(0));
assertEquals('7', code.charAt(5));
assertThat(code.pop(), is( -1));
}
- class ReplaceNumbersFilter extends CodeReaderFilter {
+ class ReplaceNumbersFilter extends CodeReaderFilter<Object> {
private Pattern pattern = Pattern.compile("\\d");
private String REPLACEMENT = "-";
}
}
- class ReplaceCharFilter extends CodeReaderFilter {
+ class ReplaceCharFilter extends CodeReaderFilter<Object> {
private Pattern pattern = Pattern.compile("[a-zA-Z]");
private String REPLACEMENT = "*";