Package uk.ac.starlink.fits

## Class AbstractFitsTableWriter

- java.lang.Object
- - uk.ac.starlink.table.StreamStarTableWriter
  - - uk.ac.starlink.fits.AbstractFitsTableWriter

- All Implemented Interfaces:
    `uk.ac.starlink.table.MultiStarTableWriter`, `uk.ac.starlink.table.StarTableWriter`
  Direct Known Subclasses:
    `ColFitsTableWriter`, `FitsTableWriter`, `HduFitsTableWriter`, `HealpixFitsTableWriter`, `VariableFitsTableWriter`

      public abstract class AbstractFitsTableWriter
      extends uk.ac.starlink.table.StreamStarTableWriter
      implements uk.ac.starlink.table.MultiStarTableWriter

  Abstract table writer superclass designed for writing FITS tables.

  A couple of Auxiliary metadata items of the ColumnInfo metadata from written tables are respected:

  - `Tables.NULL_VALUE_INFO`: sets the value of `TNULLn` "magic" blank value for integer columns
  - `Tables.UBYTE_FLAG_INFO`: if set to `Boolean.TRUE` and if the column has content class `Short` or `short[]`, the data will be written as unsigned bytes (`TFORMn='B'`) not 16-bit signed integers (`TFORMn='I'`).
  - `BintableStarTable.LONGOFF_INFO`: if this is set to a string representation of an integer value, and the column has content class String or String[], then the data will be written as long integers (`TFORMn='K'`) with the given offset (`TZEROn=...`). This option supports round-tripping of offset long values (typically representing unsigned longs) which are converted to strings on read.
  Since:
    27 Jun 2006
  Author:
    Mark Taylor

- - ### Constructor Summary

    Constructors
    Modifier | Constructor | Description
    --- | --- | ---
    `protected` | `AbstractFitsTableWriter​(java.lang.String formatName)` | Constructor.

  - ### Method Summary

    All Methods Static Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `protected void` | `addMetadata​(nom.tam.fits.Header hdr)` | Adds some standard metadata header cards to a FITS table header.
    `protected abstract FitsTableSerializer` | `createSerializer​(uk.ac.starlink.table.StarTable table)` | Provides a suitable serializer for a given table.
    `static java.lang.String` | `getCurrentDate()` | Returns an ISO-8601 data string representing the time at which this method is called.
    `java.lang.String` | `getFormatName()` |
    `java.lang.String` | `getMimeType()` | Returns "application/fits".
    `void` | `setFormatName​(java.lang.String formatName)` | Sets the declared format name.
    `void` | `writePrimaryHDU​(java.io.DataOutput out)` | Writes the primary HDU.
    `void` | `writeStarTable​(uk.ac.starlink.table.StarTable table, java.io.OutputStream out)` | Writes a single table.
    `void` | `writeStarTables​(uk.ac.starlink.table.TableSequence tableSeq, java.io.OutputStream out)` | Writes tables.
    `void` | `writeStarTables​(uk.ac.starlink.table.TableSequence tableSeq, java.lang.String location, uk.ac.starlink.table.StarTableOutput sto)` | Invokes `writeStarTables(uk.ac.starlink.table.TableSequence, java.io.OutputStream)`.
    `void` | `writeTableHDU​(uk.ac.starlink.table.StarTable table, FitsTableSerializer fitser, java.io.DataOutput out)` | Writes a data HDU.

    - ### Methods inherited from class uk.ac.starlink.table.StreamStarTableWriter

      `writeStarTable`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

    - ### Methods inherited from interface uk.ac.starlink.table.StarTableWriter

      `looksLikeFile, writeStarTable`

- - ### Constructor Detail

    - #### AbstractFitsTableWriter

          protected AbstractFitsTableWriter​(java.lang.String formatName)

      Constructor.
      Parameters:
        `formatName` - format name

  - ### Method Detail

    - #### getFormatName

          public java.lang.String getFormatName()

      Specified by:
        `getFormatName` in interface `uk.ac.starlink.table.StarTableWriter`

    - #### setFormatName

          public void setFormatName​(java.lang.String formatName)

      Sets the declared format name.
      Parameters:
        `formatName` - format name

    - #### getMimeType

          public java.lang.String getMimeType()

      Returns "application/fits".
      Specified by:
        `getMimeType` in interface `uk.ac.starlink.table.StarTableWriter`
      Returns:
        MIME type

    - #### writeStarTable

          public void writeStarTable​(uk.ac.starlink.table.StarTable table,
                                     java.io.OutputStream out)
                              throws java.io.IOException

      Writes a single table. Invokes `writeStarTables(uk.ac.starlink.table.TableSequence, java.io.OutputStream)`.
      Specified by:
        `writeStarTable` in interface `uk.ac.starlink.table.StarTableWriter`
      Throws:
        `java.io.IOException`

    - #### writeStarTables

          public void writeStarTables​(uk.ac.starlink.table.TableSequence tableSeq,
                                      java.io.OutputStream out)
                               throws java.io.IOException

      Writes tables. Calls `writePrimaryHDU(java.io.DataOutput)` to write the primary HDU. Subclasses which want to put something related to the input tables into the primary HDU will need to override this method (writeStarTables).
      Specified by:
        `writeStarTables` in interface `uk.ac.starlink.table.MultiStarTableWriter`
      Throws:
        `java.io.IOException`

    - #### writeStarTables

          public void writeStarTables​(uk.ac.starlink.table.TableSequence tableSeq,
                                      java.lang.String location,
                                      uk.ac.starlink.table.StarTableOutput sto)
                               throws java.io.IOException

      Invokes `writeStarTables(uk.ac.starlink.table.TableSequence, java.io.OutputStream)`.
      Specified by:
        `writeStarTables` in interface `uk.ac.starlink.table.MultiStarTableWriter`
      Throws:
        `java.io.IOException`

    - #### writePrimaryHDU

          public void writePrimaryHDU​(java.io.DataOutput out)
                               throws java.io.IOException

      Writes the primary HDU. This cannot contain a table since BINTABLE HDUs can only be extensions. The AbstractFitsTableWriter implementation writes a minimal, data-less HDU.
      Parameters:
        `out` - destination stream
      Throws:
        `java.io.IOException`

    - #### writeTableHDU

          public void writeTableHDU​(uk.ac.starlink.table.StarTable table,
                                    FitsTableSerializer fitser,
                                    java.io.DataOutput out)
                             throws java.io.IOException

      Writes a data HDU.
      Parameters:
        `table` - the table to be written into the HDU
        `fitser` - fits serializer initalised from `table`
        `out` - destination stream
      Throws:
        `java.io.IOException`

    - #### createSerializer

          protected abstract FitsTableSerializer createSerializer​(uk.ac.starlink.table.StarTable table)
                                                           throws java.io.IOException

      Provides a suitable serializer for a given table. Note this should throw an IOException if it can be determined that the submitted table cannot be written by this writer, for instance if it has too many columns.
      Parameters:
        `table` - table to serialize
      Returns:
        FITS serializer
      Throws:
        `java.io.IOException` - if the table can't be written

    - #### addMetadata

          protected void addMetadata​(nom.tam.fits.Header hdr)

      Adds some standard metadata header cards to a FITS table header. This includes date stamp, STIL version, etc.
      Parameters:
        `hdr` - header to modify

    - #### getCurrentDate

          public static java.lang.String getCurrentDate()

      Returns an ISO-8601 data string representing the time at which this method is called.
      Returns:
        date string