# Interface Coord

All Known Implementing Classes:
  `AreaCoord, BooleanCoord, FixedLengthVectorCoord, FloatingArrayCoord, FloatingCoord, IntegerCoord, LongCoord, SingleCoord, SkyCoord, StringCoord`

public interface Coord
Defines a coordinate quantity in terms of both the user's view of it and its representation for use in plotting. The `inputStorage(ValueInfo[], DomainMapper[])` method provides translation between these two representations.

An implementation of this class defines an additional `read*Coord(Tuple,int)` method which is able to read appropriate coordinate values from a suitable field of a `Tuple`. That behaviour is not enforced or defined in this interface using generic types, partly in order to allow use of primitive types and eliminate unnecessary use of wrapper classes.

In many cases, both the input and the plotting views will be a scalar, in which case there will be only one Input. One notable case for which this is not true is for `SkyCoord`, which has two input coordinates (lat + long) and three storage coordinates (x, y, z vector).

Since:
  4 Feb 2013
Author:
  Mark Taylor

## Method Summary

Modifier and Type
Method
Description
`Input[]`
`getInputs()`
Returns specifications of the one or more input values the user supplies to provide the data values for this coord.
`StorageType`
`getStorageType()`
Returns a code indicating how the quantity defined by this object is stored internally and presented to the plotting classes.
`Function<Object[],?>`
`inputStorage(uk.ac.starlink.table.ValueInfo[] infos, uk.ac.starlink.table.DomainMapper[] domainMappers)`
Provides a function to turn a quantity in the user view to a plotting view object.
`boolean`
`isRequired()`
Indicates whether this item must have a non-blank value in order for a plot to be possible.

## Method Details

### getInputs

Input[] getInputs()
Returns specifications of the one or more input values the user supplies to provide the data values for this coord.

Returns:
  one or more items describing the user input values for this quantity

### isRequired

boolean isRequired()
Indicates whether this item must have a non-blank value in order for a plot to be possible.

Returns:
  if true, values must be supplied to make a plot

### getStorageType

StorageType getStorageType()
Returns a code indicating how the quantity defined by this object is stored internally and presented to the plotting classes.

Returns:
  storage type enum instance

### inputStorage

Function<Object[],?> inputStorage(uk.ac.starlink.table.ValueInfo[] infos, uk.ac.starlink.table.DomainMapper[] domainMappers)
Provides a function to turn a quantity in the user view to a plotting view object.

The supplied `infos` and `domainMappers` arrays correspond to (have the same length as) this object's Inputs array, and may influence the return values. However, Coord instances that always behave the same way (for instance whose Input Domains have fixed DomainMappers) are free to ignore these arguments.

The returned function converts an array of per-input user values to a storable object of the type corresponding to the result of `getStorageType()`; the return value of the returned function is never null.

Parameters:
  `infos` - per-input array of column input metadata
  `domainMappers` - per-input array of input value->domain value mappers
Returns:
  input values to storage object conversion function, or null if such conversions will never be possible