Class AbstractProperty

    • Field Detail

      • NON_CANON_INDEX

        protected static final Pattern NON_CANON_INDEX
      • IS_READONLY

        public static final int IS_READONLY
        Whether or not this property is read only.
        See Also:
        Constant Field Values
      • IS_SECURED

        public static final int IS_SECURED
        Whether or not this property is secured from edition.
        Since:
        11.1
        See Also:
        Constant Field Values
      • IS_DEPRECATED

        public static final int IS_DEPRECATED
        Whether or not this property is deprecated.
        Since:
        11.1
        See Also:
        Constant Field Values
      • forceDirty

        public boolean forceDirty
        for SimpleDocumentModel uses
      • flags

        protected int flags
    • Constructor Detail

      • AbstractProperty

        protected AbstractProperty​(Property parent)
      • AbstractProperty

        protected AbstractProperty​(Property parent,
                                   int flags)
    • Method Detail

      • internalSetValue

        public abstract void internalSetValue​(Serializable value)
                                       throws PropertyException
        Sets the given normalized value.

        This applies only for nodes that physically store a value (that means non container nodes). Container nodes does nothing.

        Throws:
        PropertyException
      • init

        public void init​(Serializable value)
                  throws PropertyException
        Description copied from interface: Property
        Initializes the property with the given normalized value.

        The given value must be normalized - note that no check is done on that.

        The phantom flag is unset by this operation.

        This method should be used to initialize properties.

        Specified by:
        init in interface Property
        Parameters:
        value - the normalized value to set
        Throws:
        PropertyException
      • removePhantomFlag

        public void removePhantomFlag()
      • setValue

        public void setValue​(int index,
                             Object value)
                      throws PropertyException
        Description copied from interface: Property
        Sets a child property value given its index. This method is required only for List properties.

        If this method is not supported, an UnsupportedOperationException must be thrown.

        This method will mark the child value as dirty for existing values and in the case of map properties it will mark phantom properties as new properties.

        Specified by:
        setValue in interface Property
        value - the new value
        Throws:
        PropertyNotFoundException - if the child property is not found in the type definition
        PropertyException
      • size

        public int size()
        Description copied from interface: Property
        Get the count of the children properties. This includes phantom properties. So the returned size will be equal to the one returned by the property ComplexType.getFieldsCount().
        Specified by:
        size in interface Property
        Returns:
        the children properties count
      • getParent

        public Property getParent()
        Description copied from interface: Property
        Gets the property parent.
        Specified by:
        getParent in interface Property
        Returns:
        the property parent for sub properties or null for top level properties
      • getXPath

        public String getXPath()
        Description copied from interface: Property
        Gets the xpath of this property.

        The xpath is of the form pref:foo/mylist/123/elem, of note:

        • there is no initial /
        • the schema prefix is only present if a prefix is configured for the base property's schema
        • list elements indexes start at 0
        • list elements aren't using the old syntax foo/bar[123]/baz but the new syntax foo/123/baz
        Specified by:
        getXPath in interface Property
        Returns:
        the xpath
      • getPath

        @Deprecated
        public String getPath()
        Deprecated.
        Description copied from interface: Property
        Gets the path of this property relative to the owner document.

        The path for top level properties is the same to the property name.

        NOTE the path returned contains an initial / and expresses list indexes using an old syntax

        Specified by:
        getPath in interface Property
        Returns:
        the path
      • collectPath

        protected Path collectPath​(Path path)
      • getSchema

        public Schema getSchema()
        Description copied from interface: Property
        Gets the document schema defining the property tree from which the property belongs.
        Specified by:
        getSchema in interface Property
        Returns:
        the document schema owning the field corresponding to the property
      • isList

        public boolean isList()
        Description copied from interface: Property
        Tests whether this property is of a list type.
        Specified by:
        isList in interface Property
        Returns:
        true if the property is of list type, false otherwise
      • isComplex

        public boolean isComplex()
        Description copied from interface: Property
        Tests whether this property is of a map (complex) type.
        Specified by:
        isComplex in interface Property
        Returns:
        true if the property is of map type, false otherwise
      • isScalar

        public boolean isScalar()
        Description copied from interface: Property
        Tests whether this property is of a scalar type.
        Specified by:
        isScalar in interface Property
        Returns:
        true if the property is of a scalar type, false otherwise
      • isNew

        public boolean isNew()
        Description copied from interface: Property
        Tests if this property is new (just created but not yet stored).

        A property is new when added to a collection. This is the typical state for a new property added to a list

        Specified by:
        isNew in interface Property
        Returns:
        true if this property is new, false otherwise
      • isRemoved

        public boolean isRemoved()
        Description copied from interface: Property
        Tests if a property is flagged as removed. Removed properties are child property that were removed from their container.
        Specified by:
        isRemoved in interface Property
        Returns:
        if the property was removed, false otherwise
      • isMoved

        public boolean isMoved()
        Description copied from interface: Property
        Tests if a property value was moved to another index in the parent list if any.
        Specified by:
        isMoved in interface Property
        Returns:
        if the property was removed, false otherwise
      • isModified

        public boolean isModified()
        Description copied from interface: Property
        Tests if a property value was modified.
        Specified by:
        isModified in interface Property
        Returns:
        if the property was removed, false otherwise
      • isPhantom

        public boolean isPhantom()
        Description copied from interface: Property
        Tests if the property is a phantom. This means it doesn't exists yet in the storage and it is not a new property. This is a placeholder for a property that is defined by the schema but was not yet set.
        Specified by:
        isPhantom in interface Property
        Returns:
        true if a phantom false otherwise
      • isDirty

        public final boolean isDirty()
        Description copied from interface: Property
        Tests whether a property is dirty.

        This tests whether or not a dirty flag is set on the property.

        Specified by:
        isDirty in interface Property
        Returns:
        true if the property changed or is new
      • setDirtyFlags

        protected final void setDirtyFlags​(int dirtyFlags)
      • appendDirtyFlags

        protected final void appendDirtyFlags​(int dirtyFlags)
      • isReadOnly

        public boolean isReadOnly()
        Description copied from interface: Property
        Whether the property is read only.
        Specified by:
        isReadOnly in interface Property
        Returns:
        true if read only false otherwise
      • setReadOnly

        public void setReadOnly​(boolean value)
        Description copied from interface: Property
        Sets the read only flag.
        Specified by:
        setReadOnly in interface Property
        Parameters:
        value - true to set this property read only false otherwise
      • areFlagsSet

        public final boolean areFlagsSet​(long flags)
      • setFlags

        public final void setFlags​(long flags)
      • clearFlags

        public final void clearFlags​(long flags)
      • getDirtyFlags

        public int getDirtyFlags()
        Description copied from interface: Property
        Get the dirty flags that are set on this property.
        Specified by:
        getDirtyFlags in interface Property
        Returns:
        the dirty flags mask
      • 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
      • hasDefaultValue

        public boolean hasDefaultValue()
        Description copied from interface: Property
        Whether or not this property has a default value. For complex property, this method will lookup in its children.
        Specified by:
        hasDefaultValue in interface Property
        Returns:
        true if property has a default value
      • setIsModified

        public void setIsModified()
        This method is public because of DataModelImpl which use it.

        TODO after removing DataModelImpl make it protected.

      • setIsNew

        protected void setIsNew()
      • setIsRemoved

        protected void setIsRemoved()
      • setIsMoved

        protected void setIsMoved()
      • isDeprecated

        protected boolean isDeprecated()
      • getDeprecatedFallback

        protected Optional<Property> getDeprecatedFallback()
        Returns the Property fallback to use if the current property is deprecated.
        Returns:
        the fallback as Property if exist
      • isSecuredForContext

        protected boolean isSecuredForContext()
        Returns whether or not current user can edit this property.
        Since:
        11.1
      • isSecured

        public boolean isSecured()
        Returns true if this property is flagged as secured in system.
        Specified by:
        isSecured in interface Property
      • getValue

        public <T> T getValue​(Class<T> type)
                       throws PropertyException
        Description copied from interface: Property
        Gets the property value as the given type.

        The value is converted using the registered converter to the given type.

        If conversion is not supported a runtime exception will be triggered.

        Specified by:
        getValue in interface Property
        Returns:
        the property value, which may be null
        Throws:
        PropertyException
      • 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
        Parameters:
        value - the value to set
        Throws:
        InvalidPropertyValueException - if the given value type is not compatible with the expected value type
        PropertyException
      • setValueDeprecation

        protected void setValueDeprecation​(Object value,
                                           boolean setFallback)
                                    throws PropertyException
        If this property is deprecated and has a fallback, set value to fallback.
        Throws:
        PropertyException
      • setValue

        public void setValue​(String path,
                             Object value)
                      throws PropertyException
        Description copied from interface: Property
        Sets the value of the property resolved using the given path.

        This method is a shortcut for: resolvePath(path).setValue(value).

        Specified by:
        setValue in interface Property
        Parameters:
        path - the property path
        value - the value
        Throws:
        PropertyException
      • getValue

        public <T> T getValue​(Class<T> type,
                              String path)
                       throws PropertyException
        Description copied from interface: Property
        Gets the value of the property resolved using the given path.

        The value will be converted to the given type if possible, otherwise an exception will be thrown.

        This method is a shortcut for: resolvePath(path).getValue(type).

        Specified by:
        getValue in interface Property
        Type Parameters:
        T - The type of the value to return
        Parameters:
        type - the class of the value
        path - the java path of the property value
        Returns:
        the value
        Throws:
        PropertyException
      • getValue

        public Serializable getValue​(String path)
                              throws PropertyException
        Description copied from interface: Property
        Gets the value of the property resolved using the given path.

        This method is a shortcut for: resolvePath(path).getValue().

        Specified by:
        getValue in interface Property
        Parameters:
        path - the path to the property
        Returns:
        the property value
        Throws:
        PropertyException
      • getValueDeprecation

        protected Serializable getValueDeprecation()
        Returns:
        the fallback value if this property is deprecated and has a fallback, otherwise return null
      • newDeprecatedMessage

        protected StringBuilder newDeprecatedMessage()
      • getDeprecatedParent

        protected AbstractProperty getDeprecatedParent()
        Returns:
        the higher deprecated parent.
      • getDefaultValue

        protected Serializable getDefaultValue()
      • moveTo

        public void moveTo​(int index)
        Description copied from interface: Property
        Moves a property position into the parent container list.

        This method applies only for list item properties. The given index includes removed properties.

        Specified by:
        moveTo in interface Property
        Parameters:
        index - the position in the parent container to move this property
      • getRoot

        public DocumentPart getRoot()
        Description copied from interface: Property
        Gets the root property.
        Specified by:
        getRoot in interface Property
        Returns:
        the root property
      • resolvePath

        public Property resolvePath​(Path path)
                             throws PropertyNotFoundException
        Description copied from interface: Property
        Resolves the given path relative to the current property and return the property if any is found otherwise throws an exception.

        The path format is a subset of XPath. Thus, / is used as path element separator, [n] for list element indexes. Attribute separator '@' are not supported since all properties are assumed to be elements. Also you .. and . can be used as element names.

        Example of paths:

        • dc:title
        • attachments/item[2]/mimeType
        • ../dc:title
        Specified by:
        resolvePath in interface Property
        Parameters:
        path - the path to resolve.
        Returns:
        the resolved property
        Throws:
        PropertyNotFoundException - if the path cannot be resolved
      • computeRemovedProperty

        protected Property computeRemovedProperty​(String name)
        Returns the RemovedProperty if it is a removed property or null otherwise.
        Since:
        9.2
      • 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
        Parameters:
        value - the value to normalize according to the property type
        Returns:
        the normalized value
        Throws:
        PropertyConversionException
      • 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
        Parameters:
        value - the value to check
        Returns:
        true if the value is normalized false otherwise
      • 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
        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
      • validateType

        public boolean validateType​(Class<?> type)
        Description copied from interface: Property
        Validates the given value type.

        Tests if the given value type can be converted to a normalized type and thus a value of this type can be set to that property.

        Specified by:
        validateType in interface Property
        Parameters:
        type - the type to validate
        Returns:
        true if the type is valid, false otherwise
      • 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
        Returns:
        the empty instance the empty instance, or null for some implementations
      • isForceDirty

        public boolean isForceDirty()
        Description copied from interface: Property
        only for SimpleDocumentModel
        Specified by:
        isForceDirty in interface Property
      • setForceDirty

        public void setForceDirty​(boolean forceDirty)
        Description copied from interface: Property
        only for SimpleDocumentModel
        Specified by:
        setForceDirty in interface Property