Class ArrayProperty

All Implemented Interfaces:
Serializable, Cloneable, Iterable<Property>, Property

public class ArrayProperty extends ScalarProperty
Author:
Bogdan Stefanescu
See Also:
  • Constructor Details

    • ArrayProperty

      public ArrayProperty(Property parent, Field field, int flags)
  • Method Details

    • getType

      public ListType getType()
      Description copied from interface: Property
      Get the type of the field corresponding to this property.
      Specified by:
      getType in interface Property
      Overrides:
      getType in class ScalarProperty
      Returns:
      the property type
    • isContainer

      public boolean isContainer()
      Description copied from interface: Property
      Whether this property is a container - this means the property value is a map or a list.

      Container properties don't have a scalar values. Container values are computed each time they are requested - by calling on of the getValue methods - by collecting the values of the child properties.

      Specified by:
      isContainer in interface Property
      Overrides:
      isContainer in class ScalarProperty
      Returns:
      true if scalar false otherwise
    • setValue

      public void setValue(Object value) throws PropertyException
      Description copied from interface: Property
      Sets this property value. The value will be first normalized and then set.

      For complex or list properties the value will be set recursively (as a map or list value).

      Specified by:
      setValue in interface Property
      Overrides:
      setValue in class AbstractProperty
      Parameters:
      value - the value to set
      Throws:
      InvalidPropertyValueException - if the given value type is not compatible with the expected value type
      PropertyException
    • isSameValue

      protected boolean isSameValue(Serializable value1, Serializable value2)
      Overrides:
      isSameValue in class AbstractProperty
    • isNormalized

      public boolean isNormalized(Object value)
      Description copied from interface: Property
      Checks if the given value is a normalized one. This means the value has a type that is normalized.

      Null values are considered as normalized.

      Specified by:
      isNormalized in interface Property
      Overrides:
      isNormalized in class AbstractProperty
      Parameters:
      value - the value to check
      Returns:
      true if the value is normalized false otherwise
    • normalize

      public Serializable normalize(Object value) throws PropertyConversionException
      Description copied from interface: Property
      Normalizes the given value as dictated by the property type.

      Normalized values are the ones that are used for transportation over the net and that are given to the storage implementation to be stored in the repository

      Normalized values must be Serializable

      If the given value is already normalized it will be returned back.

      Specified by:
      normalize in interface Property
      Overrides:
      normalize in class AbstractProperty
      Parameters:
      value - the value to normalize according to the property type
      Returns:
      the normalized value
      Throws:
      PropertyConversionException
    • convert

      protected Serializable convert(Collection<?> value) throws PropertyConversionException
      Throws:
      PropertyConversionException
    • convertTo

      public <T> T convertTo(Serializable value, Class<T> toType) throws PropertyConversionException
      Description copied from interface: Property
      Converts the given normalized value to the given type.

      If the value has already the given type it will be returned back.

      Specified by:
      convertTo in interface Property
      Overrides:
      convertTo in class AbstractProperty
      Parameters:
      value - the normalized value to convert
      toType - the conversion type
      Returns:
      the converted value, which may be null
      Throws:
      PropertyConversionException - if the conversion cannot be made because of type incompatibilities
    • newInstance

      public Object newInstance()
      Description copied from interface: Property
      Creates a new and empty instance of a normalized value.

      Empty is used in the sense of a value that has not been initialized or can be considered as an empty value. For example for the String type the empty value will be the empty string ""

      Specified by:
      newInstance in interface Property
      Overrides:
      newInstance in class AbstractProperty
      Returns:
      the empty instance the empty instance, or null for some implementations
    • getChildDirty

      protected boolean[] getChildDirty()
    • isDirty

      public boolean isDirty(int index)
      This method provides a way to know if some arrayproperty values are dirty: value or index changed. since 7.2
    • clearDirtyFlags

      public void clearDirtyFlags()
      Description copied from interface: Property
      Notify the property that its changes was stored so it can safely remove dirty flags.

      Dirty flags are removed according to the type of the modifications. This way if the property was REMOVED it becomes a PHANTOM otherwise all dirty flags are cleared.

      This method should be used by storage implementors to notify the property it should reset its dirty flags. Note that clearing dirty flags is not propagated to the parent property or to children. You need to clear dirty flags explicitly for each property.

      Specified by:
      clearDirtyFlags in interface Property
      Overrides:
      clearDirtyFlags in class AbstractProperty