Class TemplateEntity

java.lang.Object
ch.tocco.nice2.persist.entity.spi.template.TemplateEntity
All Implemented Interfaces:
EntityReference, Entity

public class TemplateEntity extends Object
A TemplateEntity is a special Entity in that it is a view of any other normal Entity. It always has an underlying "base entity" which contributes its entity model with a few exceptions (i.e. without the keys) and a subset of its relations to this entity model. The data of this template entity is serialized into a textual representation and stored in a single field of type `text`. When loading, the representation is read and fields are populated according to the current type of the field of the underlying base model. Relations are loaded from the current database and linked back to this template entity.
  • Constructor Details

  • Method Details

    • setValue

      public void setValue(String field, @Nullable @Nullable Object value)
      Description copied from interface: Entity
      Set the value of a field.

      In the current implementation no content validation is made on this method call - other than null on a non-nullable field. Validation happens when storing, when all values have been set.

      The value must either be in the correct data type, or convertible. To be convertible there must be a ch.tocco.nice2.types.spi.Converter contributed. Note that not all kinds of conversions that seem obvious at first are registered, for example there is no string to integer converter and thus a value like "" won't work and set 0 on an int field. Setting an int 0 on a long field works though because there is an int to long type converter.

      Parameters:
      field - The name of the field.
      value - The new value in the expected data type, or in a conversible type of it. Throws ch.tocco.nice2.security.UnauthorizedException If the user does not have the permission to set/change the value.
    • setTemplateValue

      public void setTemplateValue(String field, Object value)
    • getTemplateValue

      public <T> T getTemplateValue(FieldModel fieldModel, Type<T> type)
    • getValue

      @Nullable public <T> T getValue(FieldModel fieldModel, Type<T> type)
      Description copied from interface: Entity
      Get the value of a field as the specified type, converting the value if neccessary.
      Parameters:
      fieldModel - The field model.
      type - The target type.
      Returns:
      The value.
    • delete

      public void delete()
      Description copied from interface: Entity
      Delete the entity.
    • doJoinTx

      protected void doJoinTx(Transaction tx)
      Executed exactly once for any TemplateEntity instance, if one of the `joinTx` methods is invoked.
    • isFieldTouched

      public boolean isFieldTouched(String field)
    • getChangedFields

      public Set<String> getChangedFields()
      Description copied from interface: Entity
      Returns all field names for fields with values differing from initially loaded value in current transaction. Note: This method throws an UnauthorizedException when at least one changed field is not readable.
      See Also:
    • isFieldChanged

      public boolean isFieldChanged(String field)
      Description copied from interface: Entity
      Returns true if the current field value differs from initially loaded value in current transaction.
    • getTouchedFields

      public Set<String> getTouchedFields()
    • getTouchedRelations

      public Set<String> getTouchedRelations()
      Returns:
      all touched relations, unmodifiableSet
    • resolve

      public RelationQuery resolve(String relation)
      Description copied from interface: Entity
      Resolve a relation. Throws if there is no such relation, check the model if you're unsure!

      The returned RelationQuery may be modified by interceptors already when you receive it. For example, in the entity system, there is (as of now) the NiceModelEntityInterceptorFactory which appends the default ordering rules of the EntityModel on query.

      Parameters:
      relation - The name of the relation
      Returns:
      The executable RelationQuery.
    • getValueMap

      public Map<String,Object> getValueMap()
      Description copied from interface: Entity
      Get all values of the entity as a map.

      Changes to that map will not be reflected in the entity.

      The data includes pk fields as well as nice-specific fields (version etc).

      Returns:
      A map containing all values of the entity (shallow copy, modifiable).
    • getModel

      public TemplateEntityModel getModel()
      Description copied from interface: Entity
      Get the entity model.
      Returns:
      The entity model.
    • getManager

      public EntityManager getManager()
      Description copied from interface: Entity
      Get the manager that manages this entity.
    • baseModel

      protected EntityModel baseModel()
    • getTemplateEntity

      public Entity getTemplateEntity()
    • entityManager

      protected TemplateEntityManager entityManager()
    • getTypeManager

      protected TypeManager getTypeManager()
    • requireType

      protected Type<?> requireType(String field)
    • fromString

      protected Object fromString(String field, String value) throws StringConversionException
      Throws:
      StringConversionException
    • toString

      protected String toString(String field, Object value)
    • isTemplateField

      public static boolean isTemplateField(String name)
    • stripTemplatePrefix

      public static String stripTemplatePrefix(String name)
    • getKey

      @Nullable public @Nullable PrimaryKey getKey()
      Description copied from interface: Entity
      Get the primary key of this entity.
      Specified by:
      getKey in interface Entity
      Specified by:
      getKey in interface EntityReference
      Returns:
      The primary key of this entity, or null if in CONCEPTION state.
      See Also:
    • getValue

      public <T> T getValue(String field, Type<T> type)
      Description copied from interface: Entity
      Get the value of a field as the specified type, converting the value if neccessary.
      Specified by:
      getValue in interface Entity
      Parameters:
      field - The name of the Field
      type - The target type.
      Returns:
      The value.
    • getValue

      public TypedValue<?> getValue(FieldModel model)
      Description copied from interface: Entity
      Get the value and (nominal) type of a field. If the underlying value is null, it returns the type associated with the value of null.
      Specified by:
      getValue in interface Entity
      Parameters:
      model - The name of the field
      Returns:
      A TypedValue.
    • getValue

      public TypedValue<?> getValue(String field)
      Description copied from interface: Entity
      Get the value and (nominal) type of a field. If the value of the specified field is null, typed value with the field type and an associated value of null is returned.
      Specified by:
      getValue in interface Entity
      Parameters:
      field - The name of the field
      Returns:
      A TypedValue.
    • getValue

      public <T> T getValue(String field, Class<T> targetClass)
      Description copied from interface: Entity
      Get the value of a field, converting it if necessary.
      Specified by:
      getValue in interface Entity
      Type Parameters:
      T - The target Java type.
      Parameters:
      field - The name of a field.
      targetClass - The target Java type.
      Returns:
      The value of the field.
    • getValue

      public <T> T getValue(FieldModel fieldModel, Class<T> targetClass)
      Description copied from interface: Entity
      Get the value of a field, converting it if necessary.
      Specified by:
      getValue in interface Entity
      Type Parameters:
      T - The target Java type.
      Parameters:
      fieldModel - The name of a field.
      targetClass - The target Java type.
      Returns:
      The value of the field.
    • getOldValue

      @Nullable public <T> T getOldValue(String field, Class<T> targetType)
      Description copied from interface: Entity
      Get the old value of a field.
      Specified by:
      getOldValue in interface Entity
      Parameters:
      field - The field to get the old value from.
      targetType - The target Java type.
      Returns:
      the old value of the field (cached value read from database).
    • getFieldModel

      protected FieldModel getFieldModel(String field)
    • joinTx

      public void joinTx()
      Description copied from interface: Entity
      Joins the current transaction.
      Specified by:
      joinTx in interface Entity
    • isUpdatable

      public boolean isUpdatable()
      Description copied from interface: Entity
      Determine whether the entity is updatable.
      Specified by:
      isUpdatable in interface Entity
      Returns:
      true, if the entity is updatable, false, if it's read-only.
    • getState

      public Entity.State getState()
      Description copied from interface: Entity
      Get the current state of the entity.
      Specified by:
      getState in interface Entity
      Returns:
      The current state of the entity.
    • getContext

      public Context getContext()
      Specified by:
      getContext in interface Entity
    • validate

      public CompleteEntityValidationResult validate(boolean asynchronous)
      Description copied from interface: Entity
      Validates this entity by running the validators of this entity's fields. Such validation includes business logic. Data type validation has been made way before, before setting the values on this entity object. Validators that throw a WARN level error may be ignored, which means they won't be run at all, and thus won't stop a persist operation. The DataOperator uses this functionality. The GUI can show a warning to the user, and he may change his input, or ignore the warning and submit again. If asynchronous is set to true, only validators that are deemed save for asynchronous validation (e.g. validation of an entity before everything is filled in / before listeners) are run. If it is set to false, all validators will be run.
      Specified by:
      validate in interface Entity
    • validate

      public CompleteEntityValidationResult validate(Map<String,Set<String>> ignoreWarnings)
    • getLogger

      public org.slf4j.Logger getLogger()
      Description copied from interface: Entity
      Provides access to the entity's logger. This may be useful to report errors on certain operation on an entity.
      Specified by:
      getLogger in interface Entity
    • getRelatedEntity

      public Entity getRelatedEntity(String relName)
      Description copied from interface: Entity
      Returns the single related entity for the given relation name, or throws.
      Specified by:
      getRelatedEntity in interface Entity
      Parameters:
      relName - The relation name.
      Returns:
      The single related entity, loaded eagerly.
      See Also:
    • getRelatedEntityOrNull

      @Nullable public @Nullable Entity getRelatedEntityOrNull(String relName)
      Description copied from interface: Entity
      Returns the single related entity for the given relation name, null if none, or throws.

      Like Entity.getRelatedEntity(java.lang.String) but returns null if none.

      Specified by:
      getRelatedEntityOrNull in interface Entity
      Parameters:
      relName - The relation name.
      Returns:
      The single related entity loaded eagerly, or null if none.
      See Also:
    • setAutoFieldsDisabled

      public void setAutoFieldsDisabled(boolean disabled)
      Description copied from interface: Entity
      Disables fields listed EntityAutoField (like version, update-user and -timestamps). Useful for background-tasks which update things which can be re-written when overwritten by someone else. Important: Use this only when you exactly know why you are doing it!
      Specified by:
      setAutoFieldsDisabled in interface Entity
    • getAutoFieldsDisabled

      public boolean getAutoFieldsDisabled()
      Specified by:
      getAutoFieldsDisabled in interface Entity
      See Also: