uk.ac.starlink.table.TableSink Maven / Gradle / Ivy
package uk.ac.starlink.table;
import java.io.IOException;
/**
* Defines a set of callbacks to consume the information held in a
* StarTable. This may be used to transmit a table from one place to
* another in one go (passing a {@link StarTable} argument may be unsuitable
* in that it requires the row sequence to be accessible multiple times).
* Any source which uses this interface must do so in the following sequence:
*
* - Call {@link #acceptMetadata} once
*
- Call {@link #acceptRow} once for each row in the table
*
- Call {@link #endRows} once
*
* Implementations are under no obligation to behave sensibly if this
* sequence is not observed.
*
* @author Mark Taylor
*/
public interface TableSink {
/**
* Takes delivery of a row-less StarTable object which defines
* the metadata of the table to be transmitted.
* If the number of rows that will be transmitted via subsequent
* calls to acceptRow is known, this value should be made
* available as the row count of meta
* ({@link StarTable#getRowCount}); if it is not known, the row count
* should be -1. However, this object should not attempt to read
* any of meta's cell data.
*
* The data to be transmitted in subsequent calls of acceptRow
* must match the metadata transmitted in this call in the same way
* that rows of a StarTable must match its own metadata (number and
* content clases of columns etc).
* If this sink cannot dispose of a table corresponding to meta
* then it may throw a TableFormatException - this may be the case
* if for instance meta has columns with types that this
* sink can't deal with.
*
* @param meta table metadata object
* @throws TableFormatException if this sink cannot accept table rows
* matching the given metadata
*/
void acceptMetadata( StarTable meta ) throws TableFormatException;
/**
* Takes delivery of one row of data. row is an array of
* objects comprising the contents of one row of the table being
* transmitted. The number and classes of the elements of row
* are described by the metadata object previously accepted.
*
* @param row table data row
*/
void acceptRow( Object[] row ) throws IOException;
/**
* Signals that there are no more rows to be transmitted.
*/
void endRows() throws IOException;
}