Class JEPConverterHolder<S extends javax.measure.Quantity<S>,T extends javax.measure.Quantity<T>>

java.lang.Object
gda.factory.FindableBase
gda.util.converters.JEPConverterHolder<S,T>
All Implemented Interfaces:
Findable, IConverter<javax.measure.Quantity<S>,javax.measure.Quantity<T>>, IQuantitiesConverter<S,T>, IQuantityConverter<S,T>, IReloadableQuantitiesConverter<S,T>

public final class JEPConverterHolder<S extends javax.measure.Quantity<S>,T extends javax.measure.Quantity<T>> extends FindableBase implements IReloadableQuantitiesConverter<S,T>
class to be generated by the Castor on the ObjectServer to allow conversion between two DOFs using mathematical expressions given in a file.

An instance of this object is to be created by the Castor system within the ObjectServer due to presence in the main xml file of content of the from:

<JEPConverter name="AngstromToDeg" expressionFileName="AngstromToDeg.xml"/>

The object implements findable so it can be found via the Jython script using the command

converter = finder.find("dcm_energy_perp_converter")

The object implements IReloadableQuantitiesConverter so that the lookup table can be re-read using the command:

finder.find("dcm_energy_perp_converter").ReloadConverter

The object implements IQuantitiesConverter so that the object can be referenced by CombinedDOF.

The object implements IQuantityConverter to allow the conversion to be easily tested using the commands:

   converter = finder.find("dcm_energy_perp_converter")
   import  org.jscience.physics.quantities.Quantity as Quantity
   q = Quantity.valueOf(-200, converter.AcceptableTargetUnits().get(0))
   converter.ToSource(q)
 

The expression file is to be found in the folder pointed to be LocalProperties.get("gda.function.columnDataFile.lookupDir").

The expression file is to be of the form:

   <JEPQuantityConverter>
   <ExpressionTtoS>X/2</ExpressionTtoS>
   <ExpressionStoT>2X</ExpressionStoT>
   <AcceptableSourceUnits>Angstrom</AcceptableSourceUnits>
   <AcceptableTargetUnits>mm</AcceptableTargetUnits>
   </JEPQuantityConverter>
 
  • Constructor Details

    • JEPConverterHolder

      public JEPConverterHolder(String name, String expressionFileName)
      Creates a JEPConverterHolder with the specified name which loads converter information from the specified file.
      Parameters:
      name - the converter name
      expressionFileName - the converter expression filename
  • Method Details

    • getExpressionFileName

      public String getExpressionFileName()
      Returns the filename of the expression file.
      Returns:
      the expression filename
    • setName

      public void setName(String name)
      Description copied from interface: Findable
      Set or change the name of the object (as defined in XML).
      Specified by:
      setName in interface Findable
      Overrides:
      setName in class FindableBase
      Parameters:
      name - the object name
    • reloadConverter

      public void reloadConverter()
      Description copied from interface: IReloadableQuantitiesConverter
      Reload its state from any resource on which it may depend e.g. re-read a lookup table.
      Specified by:
      reloadConverter in interface IReloadableQuantitiesConverter<S extends javax.measure.Quantity<S>,T extends javax.measure.Quantity<T>>
    • getAcceptableMoveableUnits

      public List<List<String>> getAcceptableMoveableUnits()
      Description copied from interface: IQuantitiesConverter
      Returns the units in which the targets quantities passed into ToSource can be expressed
      Specified by:
      getAcceptableMoveableUnits in interface IQuantitiesConverter<S extends javax.measure.Quantity<S>,T extends javax.measure.Quantity<T>>
      Returns:
      Each element of the array is an array of units that is acceptable for the corresponding target in calls to ToSource
    • getAcceptableUnits

      public List<List<String>> getAcceptableUnits()
      Description copied from interface: IQuantitiesConverter
      Returns the units in which the sources quantities passed into calculateMoveables can be expressed
      Specified by:
      getAcceptableUnits in interface IQuantitiesConverter<S extends javax.measure.Quantity<S>,T extends javax.measure.Quantity<T>>
      Returns:
      Each element of the array is an array of units that is acceptable for the corresponding source in calls to calculateMoveables
    • calculateMoveables

      public javax.measure.Quantity<T>[] calculateMoveables(javax.measure.Quantity<S>[] sources, Object[] moveables) throws Exception
      Description copied from interface: IQuantitiesConverter
      Calculates an array of values in units of the source given an array of quantities in units of the source
      Specified by:
      calculateMoveables in interface IQuantitiesConverter<S extends javax.measure.Quantity<S>,T extends javax.measure.Quantity<T>>
      Parameters:
      sources - Array of values in units of the sources to be converted.
      moveables - Array of Moveable
      Returns:
      Array of calculated values in units of the moveables
      Throws:
      Exception
    • toSource

      public javax.measure.Quantity<S>[] toSource(javax.measure.Quantity<T>[] targets, Object[] moveables) throws Exception
      Description copied from interface: IQuantitiesConverter
      Calculates an array of values in units of the source given an array of quantities in units of the moveables
      Specified by:
      toSource in interface IQuantitiesConverter<S extends javax.measure.Quantity<S>,T extends javax.measure.Quantity<T>>
      Parameters:
      targets - Array of values in units of the moveables to be converted.
      moveables - Array of Moveable
      Returns:
      Array of calculated values in units of the source
      Throws:
      Exception
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • getAcceptableSourceUnits

      public List<String> getAcceptableSourceUnits()
      Specified by:
      getAcceptableSourceUnits in interface IQuantityConverter<S extends javax.measure.Quantity<S>,T extends javax.measure.Quantity<T>>
      Returns:
      AcceptableSourceUnits
    • getAcceptableTargetUnits

      public List<String> getAcceptableTargetUnits()
      Specified by:
      getAcceptableTargetUnits in interface IQuantityConverter<S extends javax.measure.Quantity<S>,T extends javax.measure.Quantity<T>>
      Returns:
      AcceptableTargetUnits
    • toSource

      public javax.measure.Quantity<S> toSource(javax.measure.Quantity<T> target) throws Exception
      Description copied from interface: IConverter
      Calculates a value for Source given the value of the target
      Specified by:
      toSource in interface IConverter<S extends javax.measure.Quantity<S>,T extends javax.measure.Quantity<T>>
      Parameters:
      target -
      Returns:
      The value calculated from the value of the target *
      Throws:
      Exception
    • toTarget

      public javax.measure.Quantity<T> toTarget(javax.measure.Quantity<S> source) throws Exception
      Description copied from interface: IConverter
      Calculates a value for Target given the value of the source
      Specified by:
      toTarget in interface IConverter<S extends javax.measure.Quantity<S>,T extends javax.measure.Quantity<T>>
      Parameters:
      source -
      Returns:
      The value calculated from the value of the source
      Throws:
      Exception
    • sourceMinIsTargetMax

      public boolean sourceMinIsTargetMax()
      Description copied from interface: IConverter
      Returns true is the conversion reverses the sense. So that to get the max of the source you convert the min of the target and vice versa
      Specified by:
      sourceMinIsTargetMax in interface IConverter<S extends javax.measure.Quantity<S>,T extends javax.measure.Quantity<T>>
      Returns:
      true is the conversion reverses the sense.
    • handlesStoT

      public boolean handlesStoT()
      Specified by:
      handlesStoT in interface IQuantityConverter<S extends javax.measure.Quantity<S>,T extends javax.measure.Quantity<T>>
      Returns:
      true if the converter converts from S to T
    • handlesTtoS

      public boolean handlesTtoS()
      Specified by:
      handlesTtoS in interface IQuantityConverter<S extends javax.measure.Quantity<S>,T extends javax.measure.Quantity<T>>
      Returns:
      true if the converter converts from T to S