uk.ac.starlink.table

## Interface TableSink

- All Known Subinterfaces:
    RowPipe, RowStore
  All Known Implementing Classes:
    ByteStoreRowStore, DiscardRowStore, DiskRowStore, ListRowStore, OnceRowPipe, ProgressBarTableSink, SidewaysRowStore, StreamTableSink

      public interface TableSink

  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 `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:
  1. Call `acceptMetadata(uk.ac.starlink.table.StarTable)` once
  2. Call `acceptRow(java.lang.Object[])` once for each row in the table
  3. Call `endRows()` once
  Implementations are under no obligation to behave sensibly if this sequence is not observed.

- - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `acceptMetadata(StarTable meta)` Takes delivery of a row-less `StarTable` object which defines the metadata of the table to be transmitted.
    `void` | `acceptRow(java.lang.Object[] row)` Takes delivery of one row of data.
    `void` | `endRows()` Signals that there are no more rows to be transmitted.

- - ### Method Detail

    - #### acceptMetadata

          void acceptMetadata(StarTable meta)
                       throws TableFormatException

      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` (`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.

      Parameters:
        `meta` - table metadata object
      Throws:
        `TableFormatException` - if this sink cannot accept table rows matching the given metadata

    - #### acceptRow

          void acceptRow(java.lang.Object[] row)
                  throws java.io.IOException

      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.
      Parameters:
        `row` - table data row
      Throws:
        `java.io.IOException`

    - #### endRows

          void endRows()
                throws java.io.IOException

      Signals that there are no more rows to be transmitted.
      Throws:
        `java.io.IOException`