Package org.apache.fulcrum.parser
Class DataStreamParser
- java.lang.Object
-
- org.apache.fulcrum.parser.DataStreamParser
-
- All Implemented Interfaces:
Iterator<ValueParser>
,org.apache.avalon.framework.logger.LogEnabled
public abstract class DataStreamParser extends Object implements Iterator<ValueParser>, org.apache.avalon.framework.logger.LogEnabled
DataStreamParser is used to parse a stream with a fixed format and generate ValueParser objects which can be used to extract the values in the desired type.The class itself is abstract - a concrete subclass which implements the initTokenizer method such as CSVParser or TSVParser is required to use the functionality.
The class implements the java.util.Iterator interface for convenience. This allows simple use in a Velocity template for example:
#foreach ($row in $datastream) Name: $row.Name Description: $row.Description #end
- Version:
- $Id$
- Author:
- Sean Legassick
-
-
Field Summary
Fields Modifier and Type Field Description protected org.apache.avalon.framework.logger.Logger
log
Logger to use
-
Constructor Summary
Constructors Constructor Description DataStreamParser(Reader in, List<String> columnNames, String characterEncoding)
Create a new DataStreamParser instance.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description void
enableLogging(org.apache.avalon.framework.logger.Logger logger)
Provide a loggerboolean
hasNext()
Determine whether a further row of values exists in the input.boolean
hasNextRow()
Determine whether a further row of values exists in the input.protected abstract void
initTokenizer(StreamTokenizer tokenizer)
Initialize the StreamTokenizer instance used to read the lines from the input reader.ValueParser
next()
Returns a ValueParser object containing the next row of values.ValueParser
nextRow()
Returns a ValueParser object containing the next row of values.void
readColumnNames()
Read the list of column names from the input reader using the tokenizer.void
remove()
The optional Iterator.remove method is not supported.void
setColumnNames(List<String> columnNames)
Set the list of column names explicitly.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface java.util.Iterator
forEachRemaining
-
-
-
-
Field Detail
-
log
protected org.apache.avalon.framework.logger.Logger log
Logger to use
-
-
Constructor Detail
-
DataStreamParser
public DataStreamParser(Reader in, List<String> columnNames, String characterEncoding)
Create a new DataStreamParser instance. Requires a Reader to read the comma-separated values from, a list of column names and a character encoding.- Parameters:
in
- the input reader.columnNames
- a list of column names.characterEncoding
- the character encoding of the input.
-
-
Method Detail
-
initTokenizer
protected abstract void initTokenizer(StreamTokenizer tokenizer)
Initialize the StreamTokenizer instance used to read the lines from the input reader. This must be implemented in subclasses to set up the tokenizing properties.- Parameters:
tokenizer
- the StreamTokenizer to use
-
enableLogging
public void enableLogging(org.apache.avalon.framework.logger.Logger logger)
Provide a logger- Specified by:
enableLogging
in interfaceorg.apache.avalon.framework.logger.LogEnabled
- See Also:
LogEnabled.enableLogging(org.apache.avalon.framework.logger.Logger)
-
setColumnNames
public void setColumnNames(List<String> columnNames)
Set the list of column names explicitly.- Parameters:
columnNames
- A list of column names.
-
readColumnNames
public void readColumnNames() throws IOException
Read the list of column names from the input reader using the tokenizer.- Throws:
IOException
- an IOException occurred.
-
hasNextRow
public boolean hasNextRow() throws IOException
Determine whether a further row of values exists in the input.- Returns:
- true if the input has more rows.
- Throws:
IOException
- an IOException occurred.
-
nextRow
public ValueParser nextRow() throws IOException, NoSuchElementException
Returns a ValueParser object containing the next row of values.- Returns:
- a ValueParser object.
- Throws:
IOException
- an IOException occurred.NoSuchElementException
- there are no more rows in the input.
-
hasNext
public boolean hasNext()
Determine whether a further row of values exists in the input.- Specified by:
hasNext
in interfaceIterator<ValueParser>
- Returns:
- true if the input has more rows.
-
next
public ValueParser next() throws NoSuchElementException
Returns a ValueParser object containing the next row of values.- Specified by:
next
in interfaceIterator<ValueParser>
- Returns:
- a ValueParser object as an Object.
- Throws:
NoSuchElementException
- there are no more rows in the input or an IOException occurred.
-
remove
public void remove() throws UnsupportedOperationException
The optional Iterator.remove method is not supported.- Specified by:
remove
in interfaceIterator<ValueParser>
- Throws:
UnsupportedOperationException
- the operation is not supported.
-
-