Author: bpoussin Date: 2011-01-04 18:18:10 +0100 (Tue, 04 Jan 2011) New Revision: 366 Url: http://nuiton.org/repositories/revision/processor/366 Log: Evolution #1197: It will be useful, if we can know the current line number in Filter Modified: trunk/nuiton-processor/pom.xml trunk/nuiton-processor/src/main/java/org/nuiton/processor/Processor.java trunk/nuiton-processor/src/main/java/org/nuiton/processor/ProcessorReader.java trunk/nuiton-processor/src/main/java/org/nuiton/processor/filters/DefaultFilter.java trunk/nuiton-processor/src/main/java/org/nuiton/processor/filters/Filter.java trunk/nuiton-processor/src/main/java/org/nuiton/processor/filters/NoActionFilter.java Modified: trunk/nuiton-processor/pom.xml =================================================================== --- trunk/nuiton-processor/pom.xml 2010-11-21 14:30:50 UTC (rev 365) +++ trunk/nuiton-processor/pom.xml 2011-01-04 17:18:10 UTC (rev 366) @@ -90,6 +90,17 @@ <!-- ************************************************************* --> <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <version>2.0.2</version> + <configuration> + <source>1.6</source> + <target>1.6</target> + </configuration> + </plugin> + </plugins> <testResources> <testResource> <directory>src/test/resources</directory> Modified: trunk/nuiton-processor/src/main/java/org/nuiton/processor/Processor.java =================================================================== --- trunk/nuiton-processor/src/main/java/org/nuiton/processor/Processor.java 2010-11-21 14:30:50 UTC (rev 365) +++ trunk/nuiton-processor/src/main/java/org/nuiton/processor/Processor.java 2011-01-04 17:18:10 UTC (rev 366) @@ -37,10 +37,16 @@ * par : */ package org.nuiton.processor; -import org.nuiton.processor.filters.*; -import java.io.*; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.LineNumberReader; +import java.io.Reader; +import java.io.Writer; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.processor.filters.Filter; +import org.nuiton.processor.filters.NoActionFilter; /** * This class is a generic sources processor given @@ -76,7 +82,7 @@ } protected BufferedReader getReader(Reader externalInput) { - BufferedReader result = new BufferedReader(externalInput); + LineNumberReader result = new LineNumberReader(externalInput); for (Filter anInputFilter : inputFilter) { result = new ProcessorReader(result, anInputFilter); } Modified: trunk/nuiton-processor/src/main/java/org/nuiton/processor/ProcessorReader.java =================================================================== --- trunk/nuiton-processor/src/main/java/org/nuiton/processor/ProcessorReader.java 2010-11-21 14:30:50 UTC (rev 365) +++ trunk/nuiton-processor/src/main/java/org/nuiton/processor/ProcessorReader.java 2011-01-04 17:18:10 UTC (rev 366) @@ -37,20 +37,20 @@ * par : */ package org.nuiton.processor; -import java.io.BufferedReader; import java.io.IOException; +import java.io.LineNumberReader; import java.io.StringReader; import org.nuiton.processor.filters.Filter; /** - * TODO doc. + * ProcessorReader is used in conjonction with filter to change source data * * @author poussin */ -public class ProcessorReader extends BufferedReader { +public class ProcessorReader extends LineNumberReader { - protected BufferedReader input; + protected LineNumberReader input; protected Filter filter; protected String lineSeparator; @@ -58,17 +58,41 @@ super(new StringReader("")); } - public ProcessorReader(BufferedReader input, Filter filter) { + /** + * Override to send call to input + * @return + */ + @Override + public int getLineNumber() { + return input.getLineNumber(); + } + + /** + * Override to send call to input + */ + @Override + public void setLineNumber(int lineNumber) { + input.setLineNumber(lineNumber); + } + + public ProcessorReader(LineNumberReader input, Filter filter) { this(); setInput(input); - this.filter = filter; + setFilter(filter); lineSeparator = System.getProperty("line.separator"); } - public void setInput(BufferedReader input) { + public void setInput(LineNumberReader input) { this.input = input; } + public void setFilter(Filter filter) { + this.filter = filter; + if (filter != null) { + filter.setReader(this); + } + } + @Override public boolean markSupported() { return false; Modified: trunk/nuiton-processor/src/main/java/org/nuiton/processor/filters/DefaultFilter.java =================================================================== --- trunk/nuiton-processor/src/main/java/org/nuiton/processor/filters/DefaultFilter.java 2010-11-21 14:30:50 UTC (rev 365) +++ trunk/nuiton-processor/src/main/java/org/nuiton/processor/filters/DefaultFilter.java 2011-01-04 17:18:10 UTC (rev 366) @@ -35,13 +35,15 @@ * Mise a jour: $Date$ par : */ package org.nuiton.processor.filters; +import java.io.LineNumberReader; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** - * A common astract filter. + * A common astract filter. This classe offer getLineNumber method to know + * line number currently read from source reader. * - * Implements the methods : + * You must implements the methods : * <ul> * <li>{@link #getHeader()}</li> * <li>{@link #getFooter()}</li> @@ -58,6 +60,8 @@ /** to use log facility, just put in your code: log.info(\"...\"); */ static private final Log log = LogFactory.getLog(DefaultFilter.class); + protected LineNumberReader reader = null; + /** * le buffer interne pour conserve ce qui n'a pas encore été écrit */ @@ -102,6 +106,23 @@ abstract protected String getFooter(); @Override + public void setReader(LineNumberReader reader) { + this.reader = reader; + } + + /** + * Return line currently read in source reader + * @return line number or -1 if no reader available + */ + public int getLineNumber() { + int result = -1; + if (reader != null) { + result = reader.getLineNumber(); + } + return result; + } + + @Override public String parse(String input) { int matchingIndex; Modified: trunk/nuiton-processor/src/main/java/org/nuiton/processor/filters/Filter.java =================================================================== --- trunk/nuiton-processor/src/main/java/org/nuiton/processor/filters/Filter.java 2010-11-21 14:30:50 UTC (rev 365) +++ trunk/nuiton-processor/src/main/java/org/nuiton/processor/filters/Filter.java 2011-01-04 17:18:10 UTC (rev 366) @@ -37,8 +37,11 @@ * par : */ package org.nuiton.processor.filters; +import java.io.LineNumberReader; + /** - * TODO doc + * Filter use to change data in reader. Filter instance must be used in only + * one ProcessorReader in same time * * @author poussin */ @@ -47,6 +50,12 @@ String EMPTY_STRING = ""; /** + * set reader used with this filter + * @param reader + */ + void setReader(LineNumberReader reader); + + /** * * @param input la chaine de caractère à processer * @return la chaine processée Modified: trunk/nuiton-processor/src/main/java/org/nuiton/processor/filters/NoActionFilter.java =================================================================== --- trunk/nuiton-processor/src/main/java/org/nuiton/processor/filters/NoActionFilter.java 2010-11-21 14:30:50 UTC (rev 365) +++ trunk/nuiton-processor/src/main/java/org/nuiton/processor/filters/NoActionFilter.java 2011-01-04 17:18:10 UTC (rev 366) @@ -37,6 +37,8 @@ * par : */ package org.nuiton.processor.filters; +import java.io.LineNumberReader; + /** * This filter does nothing on input. * @@ -44,6 +46,10 @@ public class NoActionFilter implements Filter { @Override + public void setReader(LineNumberReader reader) { + } + + @Override public String parse(String input) { return input; }