Class 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 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 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.
      • 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.