uk.ac.starlink.table.formats
Class StreamStarTable

java.lang.Object
  extended byuk.ac.starlink.table.AbstractStarTable
      extended byuk.ac.starlink.table.formats.StreamStarTable
All Implemented Interfaces:
StarTable
Direct Known Subclasses:
AsciiStarTable, CsvStarTable, PostgresAsciiStarTable

public abstract class StreamStarTable
extends AbstractStarTable

Abstract superclass for tables which reads a stream of characters to obtain the row data and metadata. Since metadata is typically scarce in such tables, the strategy is to make one pass through the data attempting to work out column types etc at table initialisation time, and to make a further pass through for each required RowSequence, using the metadata obtained earlier.

Since:
21 Sep 2004
See Also:
RowEvaluator

Field Summary
protected static char END
          Char representation of -1 (as returned end-of-stream read)
 
Constructor Summary
protected StreamStarTable()
          Constructor.
 
Method Summary
 int getColumnCount()
          Returns the number of columns in this table.
 ColumnInfo getColumnInfo(int icol)
          Returns the object describing the data in a given column.
protected  PushbackInputStream getInputStream()
          Convenience method which returns a buffered pushback stream based on this table's data source.
 long getRowCount()
          Returns the number of rows in this table, if known.
 RowSequence getRowSequence()
          Returns an object which can iterate over all the rows in the table sequentially.
protected  void init(DataSource datsrc)
          Initialises the table from the input stream.
protected abstract  RowEvaluator.Metadata obtainMetadata()
          Obtains column metadata for this table, probably by reading through the rows once and using a RowEvaluator.
protected abstract  List readRow(PushbackInputStream in)
          Reads the next row of data from a given stream.
 
Methods inherited from class uk.ac.starlink.table.AbstractStarTable
checkedLongToInt, getCell, getColumnAuxDataInfos, getName, getParameterByName, getParameters, getRow, getURL, isRandom, setName, setParameter, setParameters, setURL
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

END

protected static final char END
Char representation of -1 (as returned end-of-stream read)

See Also:
Constant Field Values
Constructor Detail

StreamStarTable

protected StreamStarTable()
Constructor. This doesn't perform any processing; you must call init(uk.ac.starlink.util.DataSource) before doing anything with the constructed table. It is arranged this way so that the initialisation is able to call overridden methods in subclasses, which is a Bad thing to do from a constructor.

Method Detail

init

protected void init(DataSource datsrc)
             throws TableFormatException,
                    IOException
Initialises the table from the input stream. This method calls obtainMetadata(), which probably reads through some or all of the stream.

Parameters:
datsrc - data source from which the stream can be obtained
Throws:
TableFormatException
IOException

getColumnCount

public int getColumnCount()
Description copied from interface: StarTable
Returns the number of columns in this table.

Specified by:
getColumnCount in interface StarTable
Specified by:
getColumnCount in class AbstractStarTable

getRowCount

public long getRowCount()
Description copied from interface: StarTable
Returns the number of rows in this table, if known. If the number of rows cannot be (easily) determined, a value of -1 will be returned.

Specified by:
getRowCount in interface StarTable
Specified by:
getRowCount in class AbstractStarTable

getColumnInfo

public ColumnInfo getColumnInfo(int icol)
Description copied from interface: StarTable
Returns the object describing the data in a given column.

Specified by:
getColumnInfo in interface StarTable
Specified by:
getColumnInfo in class AbstractStarTable

getRowSequence

public RowSequence getRowSequence()
                           throws IOException
Description copied from interface: StarTable
Returns an object which can iterate over all the rows in the table sequentially.

Specified by:
getRowSequence in interface StarTable
Specified by:
getRowSequence in class AbstractStarTable
Throws:
IOException

getInputStream

protected PushbackInputStream getInputStream()
                                      throws IOException
Convenience method which returns a buffered pushback stream based on this table's data source.

Returns:
input stream containing source data
Throws:
IOException

obtainMetadata

protected abstract RowEvaluator.Metadata obtainMetadata()
                                                 throws TableFormatException,
                                                        IOException
Obtains column metadata for this table, probably by reading through the rows once and using a RowEvaluator.

Returns:
information about the table represented by the character stream
Throws:
TableFormatException - if the data doesn't represent this kind of table
IOException - if I/O error is encountered

readRow

protected abstract List readRow(PushbackInputStream in)
                         throws TableFormatException,
                                IOException
Reads the next row of data from a given stream. Ignorable rows are skipped; comments may be stashed away.

Parameters:
in - input stream
Returns:
list of Strings one for each cell in the row, or null for end of stream
Throws:
TableFormatException - if the data doesn't represent this kind of table
IOException - if I/O error is encountered

Copyright © 2004 CLRC: Central Laboratory of the Research Councils. All rights reserved.