Package uk.ac.starlink.topcat

## Class SyntheticColumn

- java.lang.Object
- - uk.ac.starlink.table.ColumnData
  - - uk.ac.starlink.topcat.SyntheticColumn

-     public class SyntheticColumn
      extends uk.ac.starlink.table.ColumnData

  A column which produces read-only values based on an algebraic expression. This expression may include other columns in the table referenced by column name, and can use any of the java language expression constructs as well as the static methods in the `java.lang.Math` class. This list could be extended quite easily if new arithmetic tricks were required.

  The engine used for expression evaluation is the GNU Java Expressions Library (JEL).

  Author:
    Mark Taylor (Starlink)
  See Also:
    JEL

- - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `SyntheticColumn​(TopcatModel tcModel, uk.ac.starlink.table.ColumnInfo cinfo, java.lang.String expression, java.lang.Class<?> resultType)` | Constructs a new synthetic column from an algebraic expression applied to a table.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `java.lang.String` | `getExpression()` | Returns the JEL expression that provides this column's value.
    `java.lang.Object` | `readValue​(long lrow)` |
    `void` | `setExpression​(java.lang.String expression, java.lang.Class<?> resultType)` | Sets the algebraic expression which this column uses to calculate its results.

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

      `getColumnInfo, isWritable, setColumnInfo, storeValue`

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

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

- - ### Constructor Detail

    - #### SyntheticColumn

          public SyntheticColumn​(TopcatModel tcModel,
                                 uk.ac.starlink.table.ColumnInfo cinfo,
                                 java.lang.String expression,
                                 java.lang.Class<?> resultType)
                          throws gnu.jel.CompilationException

      Constructs a new synthetic column from an algebraic expression applied to a table.
      Parameters:
        `tcModel` - context for JEL expression evaluation
        `cinfo` - metadata for the new column; note this object may be modified as required by the supplied expression
        `expression` - algebraic expression for the value of this column
        `resultType` - a Class for the result, presumably one of the primitive wrapper types or String.class. If `null` a suitable class is chosen automatically.
      Throws:
        `gnu.jel.CompilationException`

  - ### Method Detail

    - #### setExpression

          public void setExpression​(java.lang.String expression,
                                    java.lang.Class<?> resultType)
                             throws gnu.jel.CompilationException

      Sets the algebraic expression which this column uses to calculate its results. Column names are used to refer to values of cells in other columns of this table in the same row as that for which the result is being generated.
      Parameters:
        `expression` - the string giving the algebraic exprssion for this column's value in terms of other columns
        `resultType` - a Class for the result, presumably one of the primitive wrapper types or String.class. If `null` a suitable class is chosen automatically.
      Throws:
        `gnu.jel.CompilationException`

    - #### getExpression

          public java.lang.String getExpression()

      Returns the JEL expression that provides this column's value.
      Returns:
        expression

    - #### readValue

          public java.lang.Object readValue​(long lrow)
                                     throws java.io.IOException

      Specified by:
        `readValue` in class `uk.ac.starlink.table.ColumnData`
      Throws:
        `java.io.IOException`