Class TopcatJELUtils

java.lang.Object
uk.ac.starlink.ttools.jel.JELUtils
uk.ac.starlink.topcat.TopcatJELUtils

public class TopcatJELUtils extends uk.ac.starlink.ttools.jel.JELUtils
This class provides some utility methods for use with the JEL expression compiler.
Author:
Mark Taylor (Starlink)
  • Field Details

  • Method Details

    • getLibrary

      public static gnu.jel.Library getLibrary(uk.ac.starlink.ttools.jel.JELRowReader rowReader, boolean activation)
      Returns a JEL Library suitable for expression evaluation.
      Parameters:
      rowReader - object which can read rows from the table to be used for expression evaluation
      activation - true iff the result is to include classes used only for activation (e.g. write to System.out, pop up viewers) as well as classes with methods for calculations
      Returns:
      a JEL library
    • getActivationStaticClasses

      public static List<Class<?>> getActivationStaticClasses()
      Returns the list of classes whose static methods will be mapped into the JEL evaluation namespace for activation purposes only. This may be modified.
      Returns:
      list of activation classes with static methods
    • wrapPrimitiveClass

      public static Class<?> wrapPrimitiveClass(Class<?> prim)
      Turns a primitive class into the corresponding wrapper class.
      Parameters:
      prim - primitive class
      Returns:
      the corresponding non-primitive wrapper class
    • classForName

      public static Class<?> classForName(String cname)
      Returns the class with the given name, or null if it's not on the path.
      Parameters:
      cname - class name
      Returns:
      class or null
    • isColumnReferenced

      public static boolean isColumnReferenced(TopcatModel tcModel, int icol, String expr)
      Indicates whether a given JEL expression makes direct or indirect reference to an existing column in a given table. If the expression cannot be compiled, false is returned
      Parameters:
      tcModel - topcat model
      icol - column index to test
      expr - JEL expression
      Returns:
      true iff expr references the column with index icol
    • getReferencedColumns

      public static Set<Integer> getReferencedColumns(TopcatModel tcModel, String expr)
      Returns a list of the column indices that are directly or indirectly referenced by a given JEL expression. If the expression cannot be compiled, an empty list is returned.
      Parameters:
      tcModel - topcat model
      expr - JEL expression
      Returns:
      set of column indices referenced
    • isSubsetReferenced

      public static boolean isSubsetReferenced(TopcatModel tcModel, int rsetId, String expr)
      Indicates whether a given JEL expression makes direct or indirect reference to an existing subset in a given topcat model. If the expression cannot be compiled, false is returned.
      Parameters:
      tcModel - topcat model
      rsetId - ID of row subset to test
      expr - JEL expression
      Returns:
      true iff expr references the subset with index rsetId
    • getReferencedSubsets

      public static Set<Integer> getReferencedSubsets(TopcatModel tcModel, String expr)
      Returns a list of subset IDs that are directly or indirectly referenced by a given JEL expression. If the expression cannot be compiled, an empty list is returned.
      Parameters:
      tcModel - topcat model
      expr - JEL expression
      Returns:
      set of subset IDs referenced
    • isSubsetReferenced

      public static boolean isSubsetReferenced(TopcatModel tcModel, String rsetName, String expr)
      Indicates whether a given JEL expression makes direct or indirect reference to a named subset in a given topcat model. If the expression cannot be compiled, or no subset with the given name exists, false is returned.
      Parameters:
      tcModel - topcat model
      rsetName - name of row subset to test
      expr - JEL expression
      Returns:
      true iff expr references the subset with name rsetName
    • getDataExpression

      public static String getDataExpression(TopcatModel tcModel, ColumnSelector colSelector)
      Returns a JEL expression for the value given by a column selector. Converters are accounted for.
      Parameters:
      tcModel - topcat model
      colSelector - column selector
      Returns:
      JEL expression
    • getAngleExpression

      public static String getAngleExpression(TopcatModel tcModel, ColumnSelector angleSelector, AngleColumnConverter.Unit unit)
      Returns a JEL expression for the value in a given angular unit represented by a column selector that reads angular data. The selector's ColumnConverter should be an AngleColumnConverter. If it's not, a strong warning will be issued through the logging system.
      Parameters:
      tcModel - topcat model
      angleSelector - selector for an angular quantity
      unit - required angular unit
      Returns:
      JEL expression for selected value, in requested unit
    • getDataExpression

      public static String getDataExpression(TopcatModel tcModel, GuiCoordContent content)
      Returns a single JEL-friendly expression which may be used to reference a GuiCoordContent, if possible. This will only succeed (return a non-null value) if the supplied GuiCoordContent corresponds to a single user-supplied label.
      Parameters:
      tcModel - topcat model
      content - user specification for a plotted quantity
      Returns:
      JEL-safe expression for referencing the quantity, or null
    • getDataExpressions

      public static String[] getDataExpressions(TopcatModel tcModel, GuiCoordContent content)
      Returns an array of JEL-friendly expressions which may be used to reference a GuiCoordContent.
      Parameters:
      tcModel - topcat model
      content - user specification for a plotted quantity
      Returns:
      array of JEL-safe expressions, one for each user-supplied label in the content
    • getDataExpression

      public static String getDataExpression(TopcatModel tcModel, String label)
      Converts a data label to a JEL-friendly expression for a table quantity. The label will typically be a string that the user has selected or entered to identify a quantity to be plotted.
      Parameters:
      tcModel - topcat model
      label - textual identifier for data
    • getSubsetExpression

      public static String getSubsetExpression(TopcatModel tcModel, RowSubset rset)
      Returns a JEL-friendly expression which may be used to reference a RowSubset.
      Parameters:
      tcModel - topcat model
      rset - row subset
      Returns:
      JEL-safe expression for subset
    • getColumnId

      public static String getColumnId(uk.ac.starlink.table.gui.StarTableColumn tcol)
      Returns the JEL $Identifier for a given column.
      Parameters:
      tcol - table column from data model
      Returns:
      "$nn" expression referencing column
    • isJelIdentifier

      public static boolean isJelIdentifier(String label)
      Indicates whether a given string is a syntactically legal Java identifier. It has to have the right form and not be a reserved word.
      Parameters:
      label - text to test
      Returns:
      true iff it can be used as an identifier in JEL expressions
    • combineSubsetsExpression

      public static String combineSubsetsExpression(TopcatModel tcModel, String expr, RowSubset[] rowSubsets)
      Returns a JEL expression that represents the union of a given array of subsets ANDed with a given JEL expression.
      Parameters:
      tcModel - topcat model
      expr - expression to AND with
      rowSubsets - array of zero or more subsets composing union; if none are provided, ALL is assumed
      Returns:
      combined expression
    • groupForMultiply

      public static String groupForMultiply(String expr)
      Provides grouping as required for a given JEL expression. The resulting string can have multiplication-like operations applied, for instance just adding "*x". Basically, it checks if the input has embedded "+" or "-" signs and if so wraps it in parentheses.

      This is not bulletproof, but will generally do the right thing.

      Parameters:
      expr - input JEL expression
      Returns:
      equivalent expression suitable for multiplication etc, best efforts
    • multiplyExpression

      public static String multiplyExpression(String expr, double factor)
      Returns a JEL expression multiplied by a factor.
      Parameters:
      expr - base JEL expression
      factor - factor to multiply by
      Returns:
      JEL expression representing expr * factor
    • betweenExpression

      public static String betweenExpression(String expr, double lo, double hi, boolean isLog, int npix)
      Returns a JEL expression that characterises a univariate range of values.
      Parameters:
      expr - JEL expression whose value is to be constrained
      lo - lowest permissible bound for expr
      hi - highest permissible bound for expr
      isLog - true for logarithmic range, false for linear
      npix - approximate number of pixels covered by the range
      Returns:
      JEL expression with the meaning lo<=expr<=hi