Class AbstractProperty
- java.lang.Object
-
- org.nuxeo.ecm.core.api.model.impl.AbstractProperty
-
- All Implemented Interfaces:
Serializable
,Cloneable
,Iterable<Property>
,Property
- Direct Known Subclasses:
ComplexProperty
,ListProperty
,RemovedProperty
,ScalarProperty
public abstract class AbstractProperty extends Object implements Property
- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description protected int
flags
boolean
forceDirty
for SimpleDocumentModel usesstatic int
IS_DEPRECATED
Whether or not this property is deprecated.static int
IS_READONLY
Whether or not this property is read only.static int
IS_SECURED
Whether or not this property is secured from edition.protected static Pattern
NON_CANON_INDEX
Property
parent
-
Fields inherited from interface org.nuxeo.ecm.core.api.model.Property
DIRTY_MASK, IS_DIRTY, IS_MODIFIED, IS_MOVED, IS_NEW, IS_PHANTOM, IS_REMOVED, NONE
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
AbstractProperty(Property parent)
protected
AbstractProperty(Property parent, int flags)
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Deprecated Methods Modifier and Type Method Description protected void
appendDirtyFlags(int dirtyFlags)
boolean
areFlagsSet(long flags)
void
clearDirtyFlags()
Notify the property that its changes was stored so it can safely remove dirty flags.void
clearFlags(long flags)
protected Path
collectPath(Path path)
protected Property
computeRemovedProperty(String name)
Returns theRemovedProperty
if it is a removed property or null otherwise.<T> T
convertTo(Serializable value, Class<T> toType)
Converts the given normalized value to the given type.protected Serializable
getDefaultValue()
protected Optional<Property>
getDeprecatedFallback()
Returns theProperty
fallback to use if the current property is deprecated.protected AbstractProperty
getDeprecatedParent()
int
getDirtyFlags()
Get the dirty flags that are set on this property.PropertyObjectResolver
getObjectResolver()
Property
getParent()
Gets the property parent.String
getPath()
Deprecated.DocumentPart
getRoot()
Gets the root property.Schema
getSchema()
Gets the document schema defining the property tree from which the property belongs.Serializable
getValue()
Gets the property normalized value.<T> T
getValue(Class<T> type)
Gets the property value as the given type.<T> T
getValue(Class<T> type, String path)
Gets the value of the property resolved using the given path.Serializable
getValue(String path)
Gets the value of the property resolved using the given path.protected Serializable
getValueDeprecation()
Serializable
getValueForWrite()
Gets the property normalized value for write.String
getXPath()
Gets the xpath of this property.protected void
getXPath(StringBuilder sb)
boolean
hasDefaultValue()
Whether or not this property has a default value.void
init(Serializable value)
Initializes the property with the given normalized value.abstract Serializable
internalGetValue()
abstract void
internalSetValue(Serializable value)
Sets the given normalized value.boolean
isComplex()
Tests whether this property is of a map (complex) type.protected boolean
isDeprecated()
boolean
isDirty()
Tests whether a property is dirty.boolean
isForceDirty()
only for SimpleDocumentModelboolean
isList()
Tests whether this property is of a list type.boolean
isModified()
Tests if a property value was modified.boolean
isMoved()
Tests if a property value was moved to another index in the parent list if any.boolean
isNew()
Tests if this property is new (just created but not yet stored).boolean
isNormalized(Object value)
Checks if the given value is a normalized one.boolean
isPhantom()
Tests if the property is a phantom.boolean
isReadOnly()
Whether the property is read only.boolean
isRemoved()
Tests if a property is flagged as removed.protected boolean
isSameValue(Serializable value1, Serializable value2)
boolean
isScalar()
Tests whether this property is of a scalar type.boolean
isSecured()
Returnstrue
if this property is flagged as secured in system.protected boolean
isSecuredForContext()
Returns whether or not current user can edit this property.Iterator<Property>
iterator()
void
moveTo(int index)
Moves a property position into the parent container list.protected StringBuilder
newDeprecatedMessage()
Object
newInstance()
Creates a new and empty instance of a normalized value.Serializable
normalize(Object value)
Normalizes the given value as dictated by the property type.Serializable
remove()
Removes this property from the tree.void
removePhantomFlag()
Property
resolvePath(String path)
Same asProperty.resolvePath(Path)
but with a string path as argument.Property
resolvePath(Path path)
Resolves the given path relative to the current property and return the property if any is found otherwise throws an exception.protected void
setDirtyFlags(int dirtyFlags)
void
setFlags(long flags)
void
setForceDirty(boolean forceDirty)
only for SimpleDocumentModelvoid
setIsModified()
This method is public because of DataModelImpl which use it.protected void
setIsMoved()
protected void
setIsNew()
protected void
setIsRemoved()
void
setReadOnly(boolean value)
Sets the read only flag.void
setValue(int index, Object value)
Sets a child property value given its index.void
setValue(Object value)
Sets this property value.void
setValue(String path, Object value)
Sets the value of the property resolved using the given path.protected void
setValueDeprecation(Object value, boolean setFallback)
If this property is deprecated and has a fallback, set value to fallback.int
size()
Get the count of the children properties.String
toString()
boolean
validateType(Class<?> type)
Validates the given value type.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface java.lang.Iterable
forEach, spliterator
-
Methods inherited from interface org.nuxeo.ecm.core.api.model.Property
accept, addEmpty, addValue, addValue, get, get, getChildren, getDirtyChildren, getField, getName, getType, isContainer, isSameAs, set
-
-
-
-
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
-
parent
public final Property parent
-
forceDirty
public boolean forceDirty
for SimpleDocumentModel uses
-
flags
protected 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
-
internalGetValue
public abstract Serializable internalGetValue() throws PropertyException
- 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 interfaceProperty
- 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 interfaceProperty
value
- the new value- Throws:
PropertyNotFoundException
- if the child property is not found in the type definitionPropertyException
-
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 propertyComplexType.getFieldsCount()
.
-
remove
public Serializable remove() throws PropertyException
Description copied from interface:Property
Removes this property from the tree.This method marks the property as dirty and sets its value to null.
- Specified by:
remove
in interfaceProperty
- Returns:
- the old property value
- Throws:
PropertyException
-
getParent
public Property getParent()
Description copied from interface:Property
Gets the property parent.
-
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 syntaxfoo/123/baz
- there is no initial
-
getXPath
protected void getXPath(StringBuilder sb)
-
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
-
getSchema
public Schema getSchema()
Description copied from interface:Property
Gets the document schema defining the property tree from which the property belongs.
-
isList
public boolean isList()
Description copied from interface:Property
Tests whether this property is of a list type.
-
isComplex
public boolean isComplex()
Description copied from interface:Property
Tests whether this property is of a map (complex) type.
-
isScalar
public boolean isScalar()
Description copied from interface:Property
Tests whether this property is of a scalar type.
-
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
-
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.
-
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.
-
isModified
public boolean isModified()
Description copied from interface:Property
Tests if a property value was modified.- Specified by:
isModified
in interfaceProperty
- 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.
-
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.
-
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 interfaceProperty
- 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 interfaceProperty
- 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 interfaceProperty
- 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 interfaceProperty
-
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 interfaceProperty
- 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 theProperty
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()
Returnstrue
if this property is flagged as secured in system.
-
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 interfaceProperty
- 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 interfaceProperty
- Parameters:
value
- the value to set- Throws:
InvalidPropertyValueException
- if the given value type is not compatible with the expected value typePropertyException
-
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
-
isSameValue
protected boolean isSameValue(Serializable value1, Serializable value2)
-
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 interfaceProperty
- Parameters:
path
- the property pathvalue
- 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 interfaceProperty
- Type Parameters:
T
- The type of the value to return- Parameters:
type
- the class of the valuepath
- 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 interfaceProperty
- Parameters:
path
- the path to the property- Returns:
- the property value
- Throws:
PropertyException
-
getValue
public Serializable getValue() throws PropertyException
Description copied from interface:Property
Gets the property normalized value.Normalized values are of the java type that correspond to the field type.
- Specified by:
getValue
in interfaceProperty
- Returns:
- the property value, which may be null
- 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.
-
getValueForWrite
public Serializable getValueForWrite() throws PropertyException
Description copied from interface:Property
Gets the property normalized value for write.Can be different fropm
Property.getValue()
in cases where the property adapts the value it is given to store.- Specified by:
getValueForWrite
in interfaceProperty
- Returns:
- the property value to use for write, which may be null
- Throws:
PropertyException
-
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.
-
getRoot
public DocumentPart getRoot()
Description copied from interface:Property
Gets the root property.
-
resolvePath
public Property resolvePath(String path) throws PropertyNotFoundException
Description copied from interface:Property
Same asProperty.resolvePath(Path)
but with a string path as argument. This is the same as callingresolvePath(new Path(path))
.- Specified by:
resolvePath
in interfaceProperty
- Parameters:
path
- the string path to resolve.- Returns:
- the resolved property
- Throws:
PropertyNotFoundException
- if the path cannot be resolved
-
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 interfaceProperty
- 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 theRemovedProperty
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 interfaceProperty
- 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 interfaceProperty
- 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 interfaceProperty
- Parameters:
value
- the normalized value to converttoType
- 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 interfaceProperty
- 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 interfaceProperty
- Returns:
- the empty instance the empty instance, or null for some implementations
-
getObjectResolver
public PropertyObjectResolver getObjectResolver()
- Specified by:
getObjectResolver
in interfaceProperty
- Returns:
- A
PropertyObjectResolver
to manage this property reference to external entities, null if this property's type has no resolver.
-
isForceDirty
public boolean isForceDirty()
Description copied from interface:Property
only for SimpleDocumentModel- Specified by:
isForceDirty
in interfaceProperty
-
setForceDirty
public void setForceDirty(boolean forceDirty)
Description copied from interface:Property
only for SimpleDocumentModel- Specified by:
setForceDirty
in interfaceProperty
-
-