Class Enumeration

java.lang.Object
nz.org.riskscape.engine.types.Enumeration
All Implemented Interfaces:
Type

public class Enumeration extends Object implements Type

Riskscape type that maps a set of numbers to a set of well-known strings. A bit like WithinSet except that it will coerce any Number in to a String within the set, based on the String's position within the list

``` enumeration = Enumeration.oneBased("cat", "dog", "Bear"); enumeration.coerce(1) // gives "cat" enumeration.coerce(4) // raises a coercion exception - outside of range enumeration.coerce("dog") // gives "dog" enumeration.coerce("fox") // raises a coercion exception - fox not in set enumeration.coerce("bear") // gives "BEAR" - comparisons are always lower cased to avoid case consistency issues

```

  • Field Details

  • Method Details

    • zeroBased

      public static Enumeration zeroBased(String... values)

      Construct a Riskscape Enumeration from the given array of strings. The position they are at in the array is that string's ordinal value, starting from zero. Null values are supported, and are considered gaps in the enumeration. Attempts to coerce numbers that don't map to a non null value will raise a CoercionException.

      Throws:
      IllegalArgumentException - if there are duplicate (case insensitive) values.
    • oneBased

      public static Enumeration oneBased(String... values)

      Construct a Riskscape Enumeration from the given array of strings. The position they are at in the array is that string's ordinal value, starting from 1. Null values are supported, and are considered gaps in the enumeration. Attempts to coerce numbers that don't map to a non null value will raise a CoercionException.

      Throws:
      IllegalArgumentException - if there are duplicate (case insensitive) values.
    • coerce

      public Object coerce(Object value) throws CoercionException
      Description copied from interface: Type

      Attempt to convert the given value in to one represented by this type.

      Specified by:
      coerce in interface Type
      Parameters:
      value - The value to coerce
      Returns:
      A value that conforms to this type
      Throws:
      CoercionException - if the given object can not be converted to something represented by this type
    • internalType

      public Class<?> internalType()
      Description copied from interface: Type

      The underlying java class used to represent this type.

      Specified by:
      internalType in interface Type
    • toString

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

      public int estimateSize(Object entry)
      Description copied from interface: Type

      Estimate the number of bytes used to serialize the given value to an output stream.

      Specified by:
      estimateSize in interface Type
      Parameters:
      entry - the value of this type to measure. Must be of Type.internalType() or a ClassCastException is going to happen
      Returns:
      the estimated number of bytes, or zero if no estimation was possible.
    • toBytes

      public void toBytes(DataOutputStream os, Object toWrite) throws IOException
      Specified by:
      toBytes in interface Type
      Throws:
      IOException
    • fromBytes

      public Object fromBytes(DataInputStream in) throws IOException
      Specified by:
      fromBytes in interface Type
      Throws:
      IOException
    • equals

      public boolean equals(Object obj)
      Overrides:
      equals in class Object
    • asStruct

      public Struct asStruct()
      Specified by:
      asStruct in interface Type
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • visit

      public <T, U> U visit(TypeVisitor<T,U> tv, T data)
      Description copied from interface: Type

      Type specific visiting logic. Types must decide whether they are atomic or compound and call the relevant method on TypeVisitor. It's up to each compound type to decide how they want to structure their children, e.g. order, metadata, and what's considered a child or not.

      Specified by:
      visit in interface Type
    • isOneBased

      public boolean isOneBased()
    • getValues

      public String[] getValues()