# Class ColumnStarTable

java.lang.Object
uk.ac.starlink.table.AbstractStarTable
uk.ac.starlink.table.RandomStarTable
uk.ac.starlink.table.ColumnStarTable

All Implemented Interfaces:
  `Closeable, AutoCloseable, StarTable`

Direct Known Subclasses:
  `LoopStarTable`

public abstract class ColumnStarTable extends RandomStarTable
A random-access StarTable that manages its data in columns. The data in each column is managed by a `ColumnData` object which can be accessed directly using the `getColumnData(int)` method. Columns can be added and substituted. If the columns permit it then table cells can be written to as well as read from.

Concrete subclasses of this abstract class must implement `getRowCount()`. If you just need a `ColumnStarTable` with a fixed number of rows you can use the static convenience method `makeTableWithRows(long)`.

Author:
  Mark Taylor (Starlink)

## Field Summary

Fields
Modifier and Type
Field
Description
`List<ColumnData>`
`columns_`

## Constructor Summary

Constructors
Constructor
Description
`ColumnStarTable()`
Default constructor.
`ColumnStarTable(StarTable template)`
Initialises a `ColumnStarTable` using a template `StarTable` to provide per-table metadata.

## Method Summary

Modifier and Type
Method
Description
`void`
`addColumn(ColumnData coldata)`
Appends a new column to the end of this model.
`Object`
`getCell(long lrow, int icol)`
Implementations of this method must be safe for concurrent calls from multiple threads.
`int`
`getColumnCount()`
Returns the number of columns in this table.
`ColumnData`
`getColumnData(int icol)`
Returns the `ColumnData` object for a given column.
`ColumnInfo`
`getColumnInfo(int icol)`
Returns the object describing the data in a given column.
`abstract long`
`getRowCount()`
Gets the number of rows in the table (which must be applicable to all the columns).
`static ColumnStarTable`
`makeTableWithRows(long nrow)`
Convenience method to return a `ColumnStarTable` with a fixed number of rows.
`void`
`setCell(long lrow, int icol, Object value)`
Stores an object in a given cell of the table.
`void`
`setColumn(int icol, ColumnData coldata)`
Substitutes a new column for the one which is currently in a given position.

### Methods inherited from class RandomStarTable

`getRowAccess, getRowSequence, isRandom`

### Methods inherited from class AbstractStarTable

`checkedLongToInt, close, getColumnAuxDataInfos, getName, getParameters, getRow, getRowSplittable, getURL, setName, setParameters, setURL`

### Methods inherited from class Object

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

### Methods inherited from interface StarTable

`getParameterByName, setParameter`

## Field Details

### columns_

public List<ColumnData> columns_

## Constructor Details

### ColumnStarTable

public ColumnStarTable()
Default constructor.

### ColumnStarTable

public ColumnStarTable(StarTable template)
Initialises a `ColumnStarTable` using a template `StarTable` to provide per-table metadata. The newly constructed object will have copies of the `template`'s name, parameters etc.

Parameters:
  `template` - the template StarTable

## Method Details

### getRowCount

public abstract long getRowCount()
Gets the number of rows in the table (which must be applicable to all the columns). Since this is a `RandomStarTable` the return value must be non-negative.

Specified by:
  `getRowCount` in interface `StarTable`
Specified by:
  `getRowCount` in class `RandomStarTable`
Returns:
  number of rows

### 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

### 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`

### getCell

public Object getCell(long lrow, int icol) throws IOException
Description copied from class: `RandomStarTable`
Implementations of this method must be safe for concurrent calls from multiple threads.

Specified by:
  `getCell` in interface `StarTable`
Specified by:
  `getCell` in class `RandomStarTable`
Parameters:
  `lrow` - the index of the cell's row
  `icol` - the index of the cell's column
Returns:
  the contents of this cell
Throws:
  `IOException` - if there is an error reading the data

### setCell

public void setCell(long lrow, int icol, Object value) throws IOException
Stores an object in a given cell of the table.

Parameters:
  `lrow` - the row index
  `icol` - the column index
  `value` - the value to store
Throws:
  `IOException` - if an I/O error occurs
  `UnsupportedOperationException` - if column `icol` is not writable (`!getColumnData(icol).isWritable()`);

### getColumnData

public ColumnData getColumnData(int icol)
Returns the `ColumnData` object for a given column.

Parameters:
  `icol` - the index of the column for which the result is required
Returns:
  the ColumnData for column `icol`

### addColumn

public void addColumn(ColumnData coldata)
Appends a new column to the end of this model.

Parameters:
  `coldata` - the new column object to add

### setColumn

public void setColumn(int icol, ColumnData coldata)
Substitutes a new column for the one which is currently in a given position. The old one is discarded.

Parameters:
  `icol` - the column index to change
  `coldata` - the new column data object

### makeTableWithRows

public static ColumnStarTable makeTableWithRows(long nrow)
Convenience method to return a `ColumnStarTable` with a fixed number of rows.

Parameters:
  `nrow` - the number of rows this table will have