Class I18NTextType

All Implemented Interfaces:
DataType<I18NText>

@Service(DataType.class) public class I18NTextType extends AbstractDataType<I18NText>
Datatype for I18NText.
Stored as one or two columns, depending on the backend.
  • If the database supports very long strings as an extension to VARCHAR, like TEXT in postgres, a single column of the database-specific type is used.
  • For all other databases, two columns are used:
    1. VARCHAR(max): where max is the maximum supported length by the backend. If an optional size is defined by the model, max is further limited by the model's size.
    2. CLOB: if the string is too large to fit into the first column
This type is not sortable and as a backend-specific type it cannot be used in wurblet arguments.
  • Constructor Details

    • I18NTextType

      public I18NTextType()
      Creates the datatype for I18NText.
  • Method Details

    • getJavaType

      public String getJavaType()
      Description copied from interface: DataType
      Gets the name of the Java type.
      Returns:
      the type
    • isPredefined

      public boolean isPredefined()
      Description copied from interface: DataType
      Returns whether this is a predefined type.
      Specified by:
      isPredefined in interface DataType<I18NText>
      Overrides:
      isPredefined in class AbstractDataType<I18NText>
      Returns:
      true if explicit methods provided by the persistence layer, false if generic methods must be used
    • isColumnCountBackendSpecific

      public boolean isColumnCountBackendSpecific()
      Description copied from interface: DataType
      Returns whether the number of columns is backend-specific.
      For such types the following restrictions apply:
      • no CN_... will be generated for the individual columns, just the column basename
      • they cannot be used as wurblet arguments (to generate the WHERE-clause)
      • the application cannot refer to a column in a backend-agnostic way
      Specified by:
      isColumnCountBackendSpecific in interface DataType<I18NText>
      Overrides:
      isColumnCountBackendSpecific in class AbstractDataType<I18NText>
      Returns:
      false if not backend-specific (default), true if varying
    • isLiteralSupported

      public boolean isLiteralSupported(Integer index)
      Description copied from interface: DataType
      Returns whether this type can be used literally in a query String.
      Specified by:
      isLiteralSupported in interface DataType<I18NText>
      Overrides:
      isLiteralSupported in class AbstractDataType<I18NText>
      Parameters:
      index - the column index, null if applies to object of this type
      Returns:
      true if literal String supported, else false
    • valueOfLiteralToCode

      public String valueOfLiteralToCode(String str, Integer index)
      Description copied from interface: DataType
      Creates the java code to apply the valueOf method to a String.
      Specified by:
      valueOfLiteralToCode in interface DataType<I18NText>
      Overrides:
      valueOfLiteralToCode in class AbstractDataType<I18NText>
      Parameters:
      str - the literal to be parsed
      index - the column index, null if applies to object of this type
      Returns:
      the java code
    • getColumnCount

      public int getColumnCount(Backend backend)
      Description copied from interface: DataType
      Gets the number of database columns.
      A tentackle type may be mapped to more than one column for multi-column types such as BMoney.
      Specified by:
      getColumnCount in interface DataType<I18NText>
      Overrides:
      getColumnCount in class AbstractDataType<I18NText>
      Parameters:
      backend - the backend, ignored if !DataType.isColumnCountBackendSpecific()
      Returns:
      default is 1
    • getCommentSuffix

      public Optional<String> getCommentSuffix(Backend backend, int index)
      Description copied from interface: DataType
      Gets the optional comment suffix.
      If present, it will be appended to the comment.

      Important: for datatypes with more than one column, none or exactly one should be without suffix. See WurbletArgument in tentackle-wurblets.

      Specified by:
      getCommentSuffix in interface DataType<I18NText>
      Overrides:
      getCommentSuffix in class AbstractDataType<I18NText>
      Parameters:
      backend - the backend, ignored if !DataType.isColumnCountBackendSpecific()
      index - the column index
      Returns:
      the optional suffix
    • getSqlType

      public SqlType getSqlType(Backend backend, int index)
      Description copied from interface: DataType
      Gets the SQL type.
      For predefined types, the type must be the same for all backends and the backend argument may be null.
      Application specific types, however, can use different sql types for different backends and for those types the backend argument is always valid.
      Parameters:
      backend - the backend, not used by predefined types
      index - the column index
      Returns:
      the SQL type
    • getSize

      public int getSize(Backend backend, int index, Integer size)
      Description copied from interface: DataType
      Gets the column size.
      Sizes may be differently aligned according to the backend.
      Specified by:
      getSize in interface DataType<I18NText>
      Overrides:
      getSize in class AbstractDataType<I18NText>
      Parameters:
      backend - the backend
      index - the column index
      size - the size from the model
      Returns:
      the column size
    • getScale

      public int getScale(Backend backend, int index, Integer scale)
      Description copied from interface: DataType
      Gets the column scale.
      The scale may be differently aligned according to the backend.
      Specified by:
      getScale in interface DataType<I18NText>
      Overrides:
      getScale in class AbstractDataType<I18NText>
      Parameters:
      backend - the backend
      index - the column index
      scale - the scale from the model
      Returns:
      the column scale
    • getColumnValue

      public Object getColumnValue(Backend backend, int index, I18NText value)
      Description copied from interface: DataType
      Gets the value of a column.
      Specified by:
      getColumnValue in interface DataType<I18NText>
      Overrides:
      getColumnValue in class AbstractDataType<I18NText>
      Parameters:
      backend - the backend, ignored if !DataType.isColumnCountBackendSpecific()
      index - the column index
      value - the datatype's value according to the model
      Returns:
      the column's value
    • getColumnGetter

      public String getColumnGetter(int index, String varName)
      Description copied from interface: DataType
      Returns the java code to get the value of a column.
      Specified by:
      getColumnGetter in interface DataType<I18NText>
      Overrides:
      getColumnGetter in class AbstractDataType<I18NText>
      Parameters:
      index - the column index
      varName - the java variable name
      Returns:
      the java code, empty string if this is a single column type
    • getColumnAlias

      public String getColumnAlias(int index)
      Description copied from interface: DataType
      Gets the alias name of a column.
      Specified by:
      getColumnAlias in interface DataType<I18NText>
      Overrides:
      getColumnAlias in class AbstractDataType<I18NText>
      Parameters:
      index - the column index
      Returns:
      the column's alias
    • valueOf

      public I18NText valueOf(String str)
      Description copied from interface: DataType
      Parses a string and converts to the value of this type.
      The method is used to parse a literal (for example the default value defined in the model).

      Notice: the method doesn't use any locale, so the results are always the same regardless of the JVM's locale.

      Parameters:
      str - the source string
      Returns:
      the value
    • set

      public Object[] set(Backend backend, PreparedStatement statement, int pos, I18NText object, boolean mapNull, Integer size) throws SQLException
      Description copied from interface: DataType
      Sets the object into a prepared statement.
      Must be implemented if DataType.isPredefined() returns false. Not invoked by framework otherwise.
      Parameters:
      backend - the database backend
      statement - the prepared statement
      pos - the position of the first SQL value
      object - the object, may be null
      mapNull - true if map null-values to non-null values
      size - the optional size specified in the model
      Returns:
      the values stored in the prepared statement
      Throws:
      SQLException - if failed
    • set

      public Object set(Backend backend, PreparedStatement statement, int pos, I18NText object, int index, boolean mapNull, Integer size) throws SQLException
      Description copied from interface: DataType
      Sets a column of an object into a prepared statement.
      Must be implemented if DataType.isPredefined() returns false. Not invoked by framework otherwise.
      Specified by:
      set in interface DataType<I18NText>
      Overrides:
      set in class AbstractDataType<I18NText>
      Parameters:
      backend - the database backend
      statement - the prepared statement
      pos - the position of the first SQL value
      object - the object, may be null
      index - the column index
      mapNull - true if map null-values to non-null values
      size - the optional size specified in the model
      Returns:
      the object stored in the prepared statement
      Throws:
      SQLException - if failed
    • get

      public I18NText get(Backend backend, ResultSet resultSet, int[] pos, boolean mapNull, Integer size) throws SQLException
      Description copied from interface: DataType
      Gets the object from a result set.
      Must be implemented if DataType.isPredefined() returns false. Not invoked by framework otherwise.
      Parameters:
      backend - the database backend
      resultSet - the result set
      pos - the column positions in the result set
      mapNull - true if unmap null-values from non-null values
      size - the optional size specified in the model
      Returns:
      the object or null if column(s) IS NULL
      Throws:
      SQLException - if failed
    • getMaxSize

      protected int getMaxSize(Backend backend, Integer size)
      Calculates the maximum size of the 1st VARCHAR column.
      Parameters:
      backend - the backend
      size - the optional size given by the model
      Returns:
      the maximum size, 0 if unlimited