Class GenericValueDatatype

java.lang.Object
org.faktorips.datatype.GenericValueDatatype
All Implemented Interfaces:
Comparable<Datatype>, Datatype, ValueDatatype
Direct Known Subclasses:
DefaultGenericValueDatatype, GenericEnumDatatype

public abstract class GenericValueDatatype extends Object implements ValueDatatype
The generic value datatype is used to make a Java class (representing a value) available as value datatype. Instead of writing a special class implementing the datatype interface, an instance of this class (or more precisely of one of it's subclasses) is used.

This allows to defined a datatype based on a Java class by declaring it, instead of writing code.

Author:
Jan Ortmann
  • Field Details

  • Constructor Details

    • GenericValueDatatype

      public GenericValueDatatype()
  • Method Details

    • getDefaultValue

      public String getDefaultValue()
      Description copied from interface: ValueDatatype
      Returns the datatype's default value. For datatypes representing objects the method returns null. For datatypes representing Java primitives the Java default value is returned, e.g. 0 for int.
      Specified by:
      getDefaultValue in interface ValueDatatype
      See Also:
    • getAdaptedClass

      public abstract Class<?> getAdaptedClass()
      Returns the class represented by this datatype. If the class can't be found, null is returned. In this case the validate() method returns a message list containing an error message.
    • getAdaptedClassName

      public abstract String getAdaptedClassName()
      Returns the name of the class represented by this datatype. This method must return a value, even if the class itself can't be found.
    • checkReadyToUse

      public org.faktorips.runtime.MessageList checkReadyToUse()
      Description copied from interface: ValueDatatype
      Validates the value datatype and returns a message list containing error messages if the datatype is invalid. If the datatype is valid an empty list is returned.

      Value datatypes like the predefined datatypes (defined by the constants in this class) are always valid. However generic datatypes that implement this interface might be invalid.

      Specified by:
      checkReadyToUse in interface ValueDatatype
    • getToStringMethod

      protected org.faktorips.util.MethodAccess getToStringMethod()
    • getIsParsableMethodName

      public String getIsParsableMethodName()
    • setIsParsableMethodName

      public void setIsParsableMethodName(String isParsableMethodName)
    • hasNullObject

      public boolean hasNullObject()
      Returns true if the datatype has a special instance representing null. (This is known as the NullObject pattern).
      Specified by:
      hasNullObject in interface Datatype
      See Also:
      • NullObject
    • setNullObjectDefined

      public void setNullObjectDefined(boolean flag)
      Sets if this datatype is an application of the NullObject pattern.
    • getNullObjectId

      public String getNullObjectId()
      Returns the String identification of the special NullObject.
      Specified by:
      getNullObjectId in interface ValueDatatype
      See Also:
    • setNullObjectId

      public void setNullObjectId(String specialNullValueId)
      Sets the String identification of the special NullObject.
    • getValueOfMethodName

      public String getValueOfMethodName()
    • setValueOfMethodName

      public void setValueOfMethodName(String valueOfMethodName)
    • getToStringMethodName

      public String getToStringMethodName()
    • setToStringMethodName

      public void setToStringMethodName(String toStringMethodName)
    • setQualifiedName

      public void setQualifiedName(String qualifiedName)
    • getWrapperType

      public ValueDatatype getWrapperType()
      Description copied from interface: ValueDatatype
      If this datatype represents a primitive type, this method returns the datatype that represents the wrapper class. Returns null if this datatype does not represent a primitive.
      Specified by:
      getWrapperType in interface ValueDatatype
    • isParsable

      public boolean isParsable(String value)
      Description copied from interface: ValueDatatype
      Returns true if the given string can be parsed to a value of this datatype. Returns false otherwise.
      Specified by:
      isParsable in interface ValueDatatype
    • getValue

      public Object getValue(String value)
      Description copied from interface: ValueDatatype
      This method parses the given string and returns the value as an instance of the class this value datatype represents.

      Use with caution: During development time Faktor-IPS maintains all values with their string representation. This allows to change the value's datatype without the need to convert the value from one class to another (e.g. if the string representation is 42 you can change the datatype from integer to string without converting the integer object to a string object.

      May throw different exceptions if the given string does not represent any value, for example a NumberFormatException when "twelve" is passed to PrimitiveIntegerDatatype.getValue(String).

      Specified by:
      getValue in interface ValueDatatype
      Parameters:
      value - the string representation of a value
      Returns:
      the value as instance of the class this datatype represents
      See Also:
    • valueToString

      public String valueToString(Object value)
      Description copied from interface: ValueDatatype
      Returns the string representation of the given value compatible to ValueDatatype.getValue(String).
      Specified by:
      valueToString in interface ValueDatatype
      Parameters:
      value - a value of this datatype
      Returns:
      the value's string representation
      See Also:
    • isNull

      public boolean isNull(String value)
      Description copied from interface: ValueDatatype
      Returns true if the given string is null or the representation of the null object (if the datatype value class makes use of the null object pattern.) Returns false otherwise.
      Specified by:
      isNull in interface ValueDatatype
      See Also:
      • NullObject
    • isEnum

      public boolean isEnum()
      Description copied from interface: Datatype
      Returns true if this value datatype is an enum datatype. In this case the instance can be cast to EnumDatatype. Returns false otherwise.
      Specified by:
      isEnum in interface Datatype
    • getName

      public String getName()
      Description copied from interface: Datatype
      Returns the datatype's name.
      Specified by:
      getName in interface Datatype
    • getQualifiedName

      public String getQualifiedName()
      Description copied from interface: Datatype
      Returns the datatype's qualified name.

      The qualified name identifies the datatype.

      Specified by:
      getQualifiedName in interface Datatype
    • hashCode

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

      public boolean equals(Object o)
      Overrides:
      equals in class Object
    • isVoid

      public boolean isVoid()
      Description copied from interface: Datatype
      Returns true if this is the Datatype Void, otherwise false.
      Specified by:
      isVoid in interface Datatype
    • isPrimitive

      public boolean isPrimitive()
      Description copied from interface: Datatype
      Returns true if this datatype represents one of Java's primitive types.
      Specified by:
      isPrimitive in interface Datatype
    • isAbstract

      public boolean isAbstract()
      Description copied from interface: Datatype
      Returns true if this datatype is an abstract datatype in means of the object oriented paradigm.
      Specified by:
      isAbstract in interface Datatype
    • isValueDatatype

      public boolean isValueDatatype()
      Description copied from interface: Datatype
      Returns true if this datatype represents values.

      If the method returns true, the datatype can be safely casted to ValueDatatype.

      Specified by:
      isValueDatatype in interface Datatype
    • getJavaClassName

      public String getJavaClassName()
      Returns the java class that is represented by this generic datatype
    • compareTo

      public int compareTo(Datatype o)
      Specified by:
      compareTo in interface Comparable<Datatype>
    • toString

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

      protected void clearCache()
    • areValuesEqual

      public boolean areValuesEqual(String valueA, String valueB)
      Description copied from interface: ValueDatatype
      Returns true if both given strings represent the same value defined by this datatype. The String " 1" (a blank followed by the char '1') and "1" (just the char '1') are equal if the datatype is an Integer, but will not be equal if the datatype is a String.
      Specified by:
      areValuesEqual in interface ValueDatatype
      Parameters:
      valueA - The first parameter to compare
      valueB - The second parameter to compare
      Returns:
      true if the two values are equal according to the datatype, returns false if they are different.
    • compare

      public int compare(String valueA, String valueB)
      Description copied from interface: ValueDatatype
      Compares the values created from the two given strings.
      Specified by:
      compare in interface ValueDatatype
      Parameters:
      valueA - The value to compare to valueB
      valueB - The value to compare to valueA
      Returns:
      A value less than 0 if valueA is less than valueB, 0 if valueA is equal to valueB and a value greater than 0 if valueA is greater than valueB.
      See Also:
    • supportsCompare

      public boolean supportsCompare()
      Specified by:
      supportsCompare in interface ValueDatatype
      Returns:
      true if this datatype is able to compare two values.
    • isImmutable

      public boolean isImmutable()
      Description copied from interface: ValueDatatype
      Returns true if this is an immutable datatype, false otherwise.
      Specified by:
      isImmutable in interface ValueDatatype
      Returns:
      whether this is an immutable datatype
    • isMutable

      public boolean isMutable()
      Description copied from interface: ValueDatatype
      Returns true if this is a mutable datatype, false if it is an immutable datatype.
      Specified by:
      isMutable in interface ValueDatatype
      Returns:
      whether this is a mutable datatype
    • getAllValuesMethod

      public org.faktorips.util.MethodAccess getAllValuesMethod()
    • setAllValuesMethodName

      public void setAllValuesMethodName(String getAllValuesMethodName)
    • getAllValuesMethodName

      public String getAllValuesMethodName()