uk.ac.starlink.table.formats
Class StreamStarTable

java.lang.Object
  |
  +--uk.ac.starlink.table.AbstractStarTable
        |
        +--uk.ac.starlink.table.formats.StreamStarTable
All Implemented Interfaces:
StarTable
Direct Known Subclasses:
AsciiStarTable, CsvStarTable

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. This superclass contains a rough framework for such behaviour and a number of useful protected classes and methods which may be used to achieve it.

Since:
21 Sep 2004

Nested Class Summary
protected static class StreamStarTable.Decoder
          Interface for an object that can turn a string into a cell content object.
protected static class StreamStarTable.Metadata
          Helper class used to group quantities which describe what the data types found in the columns of a table are.
protected static class StreamStarTable.RowEvaluator
          Helper class to examine unknown rows (arrays of strings) and work out what they contain.
 
Field Summary
protected static char END
          Char representation of -1 (as returned end-of-stream read)
 
Constructor Summary
protected StreamStarTable(DataSource datsrc)
          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 abstract  StreamStarTable.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, 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(DataSource datsrc)
                   throws TableFormatException,
                          IOException
Constructor.

Parameters:
datsrc - data source from which the stream can be obtained
Method Detail

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
Returns:
the number of columns

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
Returns:
the number of rows, or -1

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
Parameters:
icol - the column for which header information is required
Returns:
a ValueInfo object for column icol

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
Returns:
an object providing sequential access to the table data
Throws:
IOException - if there is an error providing access

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
IOException

obtainMetadata

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

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.