Class DataStreamParser

java.lang.Object
org.apache.fulcrum.parser.DataStreamParser
All Implemented Interfaces:
Iterator<ValueParser>, org.apache.avalon.framework.logger.LogEnabled
Direct Known Subclasses:
CSVParser, TSVParser

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
    Logger to use
  • Constructor Summary

    Constructors
    Constructor
    Description
    DataStreamParser(Reader in, List<String> columnNames, String characterEncoding)
    Create a new DataStreamParser instance.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    enableLogging(org.apache.avalon.framework.logger.Logger logger)
    Provide a logger
    boolean
    Determine whether a further row of values exists in the input.
    boolean
    Determine whether a further row of values exists in the input.
    protected abstract void
    Initialize the StreamTokenizer instance used to read the lines from the input reader.
    Returns a ValueParser object containing the next row of values.
    Returns a ValueParser object containing the next row of values.
    void
    Read the list of column names from the input reader using the tokenizer.
    void
    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 Details

    • log

      protected org.apache.avalon.framework.logger.Logger log
      Logger to use
  • Constructor Details

    • 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 Details

    • 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 interface org.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

      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 interface Iterator<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 interface Iterator<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 interface Iterator<ValueParser>
      Throws:
      UnsupportedOperationException - the operation is not supported.