Package org.ametys.cms.data.holder.impl
Class DefaultModelAwareDataHolder
java.lang.Object
org.ametys.cms.data.holder.impl.DefaultModelAwareDataHolder
- All Implemented Interfaces:
IndexableDataHolder
,DataHolder
,ModelAwareDataHolder
- Direct Known Subclasses:
DefaultModifiableModelAwareDataHolder
Default implementation for data holder with model
-
Field Summary
Modifier and TypeFieldDescriptionprotected Collection<? extends ModelItemContainer>
Model containers to use to get information about definitionsprotected Optional<? extends IndexableDataHolder>
Parent of the currentDataHolder
protected RepositoryData
Repository data to use to store data in the repositoryprotected IndexableDataHolder
RootDataHolder
Fields inherited from interface org.ametys.plugins.repository.data.holder.ModelAwareDataHolder
ALTERNATIVE_SUFFIX, COMMENTS_SUFFIX, STATUS_SUFFIX
-
Constructor Summary
ConstructorDescriptionDefaultModelAwareDataHolder
(RepositoryData repositoryData, Collection<? extends ModelItemContainer> itemContainers, Optional<? extends IndexableDataHolder> parent, Optional<? extends IndexableDataHolder> root) Creates a default model aware data holderDefaultModelAwareDataHolder
(RepositoryData repositoryData, ModelItemContainer itemContainer) Creates a default model aware data holderDefaultModelAwareDataHolder
(RepositoryData repositoryData, ModelItemContainer itemContainer, Optional<? extends IndexableDataHolder> parent, Optional<? extends IndexableDataHolder> root) Creates a default model aware data holder -
Method Summary
Modifier and TypeMethodDescriptionprotected void
_checkDefinition
(String dataPath, boolean checkStatusAvailable, String errorMsg) Check definition for data pathprotected void
_checkDefinition
(String dataPath, String errorMsg) Check definition for data pathprotected boolean
_checkElementDifferences
(ViewElement viewElement, SynchronizableValue value, ValueContext context) Check if there are differences between the given value and the given view element's valueprotected boolean
_checkElementDifferencesInRemoveMode
(ViewElement viewElement, SynchronizableValue value, ValueContext context) Check if there are differences between the given value and the given view element's valueprotected boolean
_checkStatusDifferences
(ElementDefinition definition, SynchronizableValue value, SynchronizationContext synchronizationContext, boolean doValuesContainData) Check if the data's status will have to be changedprotected <T extends SynchronizationContext>
TCreates an instance ofSynchronizationContext
protected ModelAwareComposite
_getComposite
(String name, CompositeDefinition compositeDefinition) Retrieves the composite with the given nameprotected Class
Retrieves the class of the managed compositesprotected Collection<ModelItem>
_getDifferences
(ViewItemAccessor viewItemAccessor, Map<String, Object> values, SynchronizationContext context) Get the collection of model items where there are differences between the given values and the current onesprotected Collection<ModelItem>
_getDifferencesInGroup
(ModelViewItemGroup modelViewItemGroup, Map<String, Object> values, SynchronizationContext synchronizationContext) Get the collection of model items where there are differences between the given values and the given group's onesprotected String
_getFinalDataName
(String dataName, Optional<ExternalizableDataProvider.ExternalizableDataStatus> status) Retrieves the name of the data according to the given statusprotected ModelAwareDataAwareAmetysObject
_getPropertysAmetysObject
(String dataPath) Retrieves the ametys object containing the property at the given pathprotected ModelAwareRepeater
_getRepeater
(String name, RepeaterDefinition repeaterDefinition) Retrieves the repeater with the given nameprotected Class
Retrieves the class of the managed repeatersprotected Class
Retrieves the class of the managed repeater entriesprotected boolean
_hasDifferences
(ViewItemAccessor viewItemAccessor, Map<String, Object> values, SynchronizationContext context) Check if there are differences between the given values and the current onesprotected boolean
_hasDifferencesInElement
(ViewElement viewElement, Map<String, Object> values, SynchronizationContext synchronizationContext) Check if there are differences between the given values and the given element's onesprotected boolean
_hasDifferencesInGroup
(ModelViewItemGroup modelViewItemGroup, Map<String, Object> values, SynchronizationContext synchronizationContext) Check if there are differences between the given values and the given group's onesdataToJSON
(String dataPath, DataContext context) Convert the data at the given path into a JSON objectdataToJSON
(ViewItemAccessor viewItemAccessor, DataContext context) Convert the data in the given view of the currentDataHolder
dataToJSONForEdition
(ViewItemAccessor viewItemAccessor, DataContext context) Convert the data in the given view in edition mode in the currentDataHolder
dataToMap
(ViewItemAccessor viewItemAccessor, DataContext context) Retrieves data of this DataHolder as a typed-values Map.void
dataToSAX
(ContentHandler contentHandler, String dataPath, DataContext context) Generates SAX events for the data at the given data path in the currentDataHolder
Do not generate any event if there is no values at the given pathvoid
dataToSAX
(ContentHandler contentHandler, ViewItemAccessor viewItemAccessor, DataContext context) Generates SAX events for the data in the given view in the currentDataHolder
void
dataToSAXForEdition
(ContentHandler contentHandler, ViewItemAccessor viewItemAccessor, DataContext context) Generates SAX events for the data in the given view in edition mode in the currentDataHolder
getComments
(String dataName) Retrieve the comments of the data with the given namegetComposite
(String compositePath) Retrieves the composite at the given pathRetrieves the names of data contained by this data holder Retrieves only the data at first level, does not check composite datagetDefinition
(String path) Retrieves the definition of the data at the given pathgetDifferences
(ViewItemAccessor viewItemAccessor, Map<String, Object> values) Get the collection of model items where there are differences between the given values and the current onesgetDifferences
(ViewItemAccessor viewItemAccessor, Map<String, Object> values, SynchronizationContext context) Get the collection of model items where there are differences between the given values and the current onesgetExternalComposite
(String compositePath) Retrieves the external composite at the given pathgetExternalRepeater
(String repeaterPath) Retrieves the external repeater at the given path<T> T
getExternalValue
(String dataPath) Retrieves the external value of the data at the given pathgetLocalComposite
(String compositePath) Retrieves the local composite at the given pathgetLocalRepeater
(String repeaterPath) Retrieves the local repeater at the given path<T> T
getLocalValue
(String dataPath) Retrieves the local value of the data at the given pathCollection<? extends ModelItemContainer>
getModel()
Retrieves the data holder's modelOptional<? extends IndexableDataHolder>
Retrieves the optional parent of the currentDataHolder
There can be no parent if the currentDataHolder
is the rootgetRepeater
(String repeaterPath) Retrieves the repeater at the given pathRetrieves the repository data used by thisDataHolder
Retrieves theDataHolder
that is the root of the current oneRetrieves the status of the externalizable data at the given path Warning: This method won't check that your data is externalizable.<T> T
Retrieves the value of the data at the given path<T> T
Retrieves the value of the data at the given path, or the default value The returned value is one of those ones, in the order: The value of the data if exists and is not empty The default value from the model if useDefaultFromModel istrue
and there is a default value defined by the model The given default valueboolean
hasComments
(String dataName) Checks if there is are comments on the data with the given nameboolean
hasDifferences
(ViewItemAccessor viewItemAccessor, Map<String, Object> values) Check if there are differences between the given values and the current onesboolean
hasDifferences
(ViewItemAccessor viewItemAccessor, Map<String, Object> values, SynchronizationContext context) Check if there are differences between the given values and the current onesboolean
hasExternalValue
(String dataPath) Checks if there is a non empty external value for the data at the given pathboolean
hasExternalValueOrEmpty
(String dataPath) Checks if there is an external value for the data at the given pathboolean
hasLocalValue
(String dataPath) Checks if there is a non empty local value for the data at the given pathboolean
hasLocalValueOrEmpty
(String dataPath) Checks if there is a local value for the data at the given pathboolean
Checks if there is a non empty value for the data at the given pathboolean
hasValueOrEmpty
(String dataPath) Checks if there is a value, even empty, for the data at the given pathMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface org.ametys.plugins.repository.data.holder.DataHolder
copyTo, copyTo, dataToJSON, dataToSAX
Methods inherited from interface org.ametys.plugins.repository.data.holder.ModelAwareDataHolder
commentsToSAX, dataToJSON, dataToJSON, dataToJSON, dataToMap, dataToMap, dataToMap, dataToSAX, dataToSAX, dataToSAX, getType, getValue, hasDefinition, isMultiple
-
Field Details
-
_repositoryData
Repository data to use to store data in the repository -
_parent
Parent of the currentDataHolder
-
_root
RootDataHolder
-
_itemContainers
Model containers to use to get information about definitions
-
-
Constructor Details
-
DefaultModelAwareDataHolder
Creates a default model aware data holder- Parameters:
repositoryData
- the repository data to useitemContainer
- the model container to use to get information about definitions. Must match the given repository data. A repository data can have several item containers. For example, a content can have several content types.
-
DefaultModelAwareDataHolder
public DefaultModelAwareDataHolder(RepositoryData repositoryData, ModelItemContainer itemContainer, Optional<? extends IndexableDataHolder> parent, Optional<? extends IndexableDataHolder> root) Creates a default model aware data holder- Parameters:
repositoryData
- the repository data to useitemContainer
- the model container to use to get information about definitions. Must match the given repository data. A repository data can have several item containers. For example, a content can have several content types.parent
- the optional parent of the createdDataHolder
, empty if the createdDataHolder
is the rootDataHolder
root
- the rootDataHolder
-
DefaultModelAwareDataHolder
public DefaultModelAwareDataHolder(RepositoryData repositoryData, Collection<? extends ModelItemContainer> itemContainers, Optional<? extends IndexableDataHolder> parent, Optional<? extends IndexableDataHolder> root) Creates a default model aware data holder- Parameters:
repositoryData
- the repository data to useitemContainers
- the model containers to use to get information about definitions. Must match the given repository data. A repository data can have several item containers. For example, a content can have several content types.parent
- the parent of the createdDataHolder
, empty if the createdDataHolder
is the rootDataHolder
root
- the rootDataHolder
-
-
Method Details
-
getComposite
public IndexableComposite getComposite(String compositePath) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException Description copied from interface:ModelAwareDataHolder
Retrieves the composite at the given path- Specified by:
getComposite
in interfaceDataHolder
- Specified by:
getComposite
in interfaceIndexableDataHolder
- Specified by:
getComposite
in interfaceModelAwareDataHolder
- Parameters:
compositePath
- path of the composite to retrieve- Returns:
- the composite or
null
if not exists or is empty - Throws:
IllegalArgumentException
- if the given composite path is null or emptyUndefinedItemPathException
- if the given composite path is not defined by the modelBadItemTypeException
- if the stored value at the given path is not a compositeBadDataPathCardinalityException
- if the definition of a part of the data path is multiple. Only the last part can be multiple
-
getLocalComposite
public IndexableComposite getLocalComposite(String compositePath) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException Description copied from interface:ModelAwareDataHolder
Retrieves the local composite at the given path- Specified by:
getLocalComposite
in interfaceIndexableDataHolder
- Specified by:
getLocalComposite
in interfaceModelAwareDataHolder
- Parameters:
compositePath
- path of the externalizable composite to retrieve- Returns:
- the composite or
null
if not exists or is empty - Throws:
IllegalArgumentException
- if the given composite path is null or emptyUndefinedItemPathException
- if the given composite path is not defined by the modelBadItemTypeException
- if the stored value at the given path is not a compositeBadDataPathCardinalityException
- if the definition of a part of the data path is multiple. Only the last part can be multiple
-
getExternalComposite
public IndexableComposite getExternalComposite(String compositePath) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException Description copied from interface:ModelAwareDataHolder
Retrieves the external composite at the given path- Specified by:
getExternalComposite
in interfaceIndexableDataHolder
- Specified by:
getExternalComposite
in interfaceModelAwareDataHolder
- Parameters:
compositePath
- path of the externalizable composite to retrieve- Returns:
- the composite or
null
if not exists or is empty - Throws:
IllegalArgumentException
- if the given composite path is null or emptyUndefinedItemPathException
- if the given composite path is not defined by the modelBadItemTypeException
- if the stored value at the given path is not a compositeBadDataPathCardinalityException
- if the definition of a part of the data path is multiple. Only the last part can be multiple
-
getRepeater
public IndexableRepeater getRepeater(String repeaterPath) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException Description copied from interface:ModelAwareDataHolder
Retrieves the repeater at the given path- Specified by:
getRepeater
in interfaceIndexableDataHolder
- Specified by:
getRepeater
in interfaceModelAwareDataHolder
- Parameters:
repeaterPath
- path of the repeater to retrieve- Returns:
- the repeater or
null
if not exists or is empty - Throws:
IllegalArgumentException
- if the given repeater path is null or emptyUndefinedItemPathException
- if the given repeater path is not defined by the modelBadItemTypeException
- if the stored value at the given path is not a repeaterBadDataPathCardinalityException
- if the definition of a part of the data path is multiple. Only the last part can be multiple
-
getLocalRepeater
public IndexableRepeater getLocalRepeater(String repeaterPath) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException Description copied from interface:ModelAwareDataHolder
Retrieves the local repeater at the given path- Specified by:
getLocalRepeater
in interfaceIndexableDataHolder
- Specified by:
getLocalRepeater
in interfaceModelAwareDataHolder
- Parameters:
repeaterPath
- path of the externalizable repeater to retrieve- Returns:
- the repeater or
null
if not exists or is empty - Throws:
IllegalArgumentException
- if the given repeater path is null or emptyUndefinedItemPathException
- if the given repeater path is not defined by the modelBadItemTypeException
- if the stored value at the given path is not a repeaterBadDataPathCardinalityException
- if the definition of a part of the data path is multiple. Only the last part can be multiple
-
getExternalRepeater
public IndexableRepeater getExternalRepeater(String repeaterPath) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException Description copied from interface:ModelAwareDataHolder
Retrieves the external repeater at the given path- Specified by:
getExternalRepeater
in interfaceIndexableDataHolder
- Specified by:
getExternalRepeater
in interfaceModelAwareDataHolder
- Parameters:
repeaterPath
- path of the externalizable repeater to retrieve- Returns:
- the repeater or
null
if not exists or is empty - Throws:
IllegalArgumentException
- if the given repeater path is null or emptyUndefinedItemPathException
- if the given repeater path is not defined by the modelBadItemTypeException
- if the stored value at the given path is not a repeaterBadDataPathCardinalityException
- if the definition of a part of the data path is multiple. Only the last part can be multiple
-
getValue
public <T> T getValue(String dataPath, boolean allowMultiValuedPathSegments) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException Description copied from interface:ModelAwareDataHolder
Retrieves the value of the data at the given path- Specified by:
getValue
in interfaceModelAwareDataHolder
- Type Parameters:
T
- type of the value to retrieve- Parameters:
dataPath
- path of the dataallowMultiValuedPathSegments
-true
to allow multi-valued segments in the path (not necessarily at the last segment),false
otherwise. Iftrue
, if there is no indicated entry for a repeater, the values of all the entries are retrieved Iftrue
and if there are multiple values, all data are retrieved in one array- Returns:
- the value of the data or
null
if allowMultiValuedPathSegments isfalse
and there is no non empty value. The object returned may be of a generic class defined by the storage (if the model is unknown). For example, an url may be returned as a String. - Throws:
IllegalArgumentException
- if the given data path is null or emptyUndefinedItemPathException
- if the given data path is not defined by the modelBadItemTypeException
- if the type defined by the model doesn't match the type of the stored valueBadDataPathCardinalityException
- if the managesMultiples boolean isfalse
and the definition of a part of the data path is multiple. Only the last part can be multiple
-
getLocalValue
public <T> T getLocalValue(String dataPath) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException Description copied from interface:ModelAwareDataHolder
Retrieves the local value of the data at the given path- Specified by:
getLocalValue
in interfaceModelAwareDataHolder
- Type Parameters:
T
- type of the value to retrieve- Parameters:
dataPath
- path of the externalizable data- Returns:
- the local value of the data or
null
if not exists or is empty. The object returned may be of a generic class defined by the storage (if the model is unknown). For example, an url may be returned as a String. - Throws:
IllegalArgumentException
- if the given data path is null or emptyUndefinedItemPathException
- if the given data path is not defined by the modelBadItemTypeException
- if the type defined by the model doesn't match the type of the stored valueBadDataPathCardinalityException
- if the definition of a part of the data path is multiple. Only the last part can be multiple
-
getExternalValue
public <T> T getExternalValue(String dataPath) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException Description copied from interface:ModelAwareDataHolder
Retrieves the external value of the data at the given path- Specified by:
getExternalValue
in interfaceModelAwareDataHolder
- Type Parameters:
T
- type of the value to retrieve- Parameters:
dataPath
- path of the externalizable data- Returns:
- the external value of the data or
null
if not exists or is empty. The object returned may be of a generic class defined by the storage (if the model is unknown). For example, an url may be returned as a String. - Throws:
IllegalArgumentException
- if the given data path is null or emptyUndefinedItemPathException
- if the given data path is not defined by the modelBadItemTypeException
- if the type defined by the model doesn't match the type of the stored valueBadDataPathCardinalityException
- if the definition of a part of the data path is multiple. Only the last part can be multiple
-
getStatus
public ExternalizableDataProvider.ExternalizableDataStatus getStatus(String dataPath) throws IllegalArgumentException, UndefinedItemPathException, BadDataPathCardinalityException Description copied from interface:ModelAwareDataHolder
Retrieves the status of the externalizable data at the given path Warning: This method won't check that your data is externalizable. But there is no sense to call it with a non externalizable data- Specified by:
getStatus
in interfaceModelAwareDataHolder
- Parameters:
dataPath
- path of the externalizable data- Returns:
- the status of the externalizable data at the given path
- Throws:
IllegalArgumentException
- if the given data path is null or emptyUndefinedItemPathException
- if the given data path is not defined by the modelBadDataPathCardinalityException
- if the definition of a part of the data path is multiple. Only the last part can be multiple
-
_getRepeaterEntryClass
Retrieves the class of the managed repeater entries- Returns:
- the class of the managed repeater entries
-
_getRepeaterClass
Retrieves the class of the managed repeaters- Returns:
- the class of the managed repeaters
-
_getCompositeClass
Retrieves the class of the managed composites- Returns:
- the class of the managed composites
-
getValue
public <T> T getValue(String dataPath, boolean useDefaultFromModel, T defaultValue) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException Description copied from interface:ModelAwareDataHolder
Retrieves the value of the data at the given path, or the default value The returned value is one of those ones, in the order:- The value of the data if exists and is not empty
- The default value from the model if useDefaultFromModel is
true
and there is a default value defined by the model - The given default value
- Specified by:
getValue
in interfaceModelAwareDataHolder
- Type Parameters:
T
- type of the value to retrieve- Parameters:
dataPath
- path of the datauseDefaultFromModel
- true to use the default value from the model, false to use the given default valuedefaultValue
- default value used if value is null and useDefaultFromModel is false, or if there is no default value on model- Returns:
- the value of the data at the given path
- Throws:
IllegalArgumentException
- if the given data path is null or emptyUndefinedItemPathException
- if the given data path is not defined by the modelBadItemTypeException
- if the type defined by the model doesn't match the type of the stored valueBadDataPathCardinalityException
- if the definition of a part of the data path is multiple. Only the last part can be multiple
-
_getComposite
protected ModelAwareComposite _getComposite(String name, CompositeDefinition compositeDefinition) throws BadItemTypeException Retrieves the composite with the given name- Parameters:
name
- name of the composite to retrievecompositeDefinition
- the definition of the composite to retrieve- Returns:
- the composite
- Throws:
BadItemTypeException
- if the value stored in the repository with the given name is not a composite
-
_getRepeater
protected ModelAwareRepeater _getRepeater(String name, RepeaterDefinition repeaterDefinition) throws BadItemTypeException Retrieves the repeater with the given name- Parameters:
name
- name of the repeater to retrieverepeaterDefinition
- the definition of the repeater to retrieve- Returns:
- the repeater
- Throws:
BadItemTypeException
- if the value stored in the repository with the given name is not a repeater
-
getComments
public List<DataComment> getComments(String dataName) throws IllegalArgumentException, UndefinedItemPathException Description copied from interface:ModelAwareDataHolder
Retrieve the comments of the data with the given name- Specified by:
getComments
in interfaceModelAwareDataHolder
- Parameters:
dataName
- name of the data- Returns:
- the comments of the data
- Throws:
IllegalArgumentException
- if the given data name is null or emptyUndefinedItemPathException
- if the given data name is not defined by the model
-
hasValue
public boolean hasValue(String dataPath) throws IllegalArgumentException, BadDataPathCardinalityException Description copied from interface:ModelAwareDataHolder
Checks if there is a non empty value for the data at the given path- Specified by:
hasValue
in interfaceDataHolder
- Specified by:
hasValue
in interfaceModelAwareDataHolder
- Parameters:
dataPath
- path of the data- Returns:
true
if the data at the given path is defined by the model, if there is a non empty value for the data and if the type of this value matches the type of the definition.false
otherwise- Throws:
IllegalArgumentException
- if the given data path is null or emptyBadDataPathCardinalityException
- if the definition of a part of the data path is multiple. Only the last part can be multiple
-
hasLocalValue
public boolean hasLocalValue(String dataPath) throws IllegalArgumentException, BadDataPathCardinalityException Description copied from interface:ModelAwareDataHolder
Checks if there is a non empty local value for the data at the given path- Specified by:
hasLocalValue
in interfaceModelAwareDataHolder
- Parameters:
dataPath
- path of the externalizable data- Returns:
true
if the data at the given path is defined by the model, if there is a non empty local value for the data and if the type of this value matches the type of the definition.false
otherwise- Throws:
IllegalArgumentException
- if the given data path is null or emptyBadDataPathCardinalityException
- if the definition of a part of the data path is multiple. Only the last part can be multiple
-
hasExternalValue
public boolean hasExternalValue(String dataPath) throws IllegalArgumentException, BadDataPathCardinalityException Description copied from interface:ModelAwareDataHolder
Checks if there is a non empty external value for the data at the given path- Specified by:
hasExternalValue
in interfaceModelAwareDataHolder
- Parameters:
dataPath
- path of the externalizable data- Returns:
true
if the data at the given path is defined by the model, if there is a non empty external value for the data and if the type of this value matches the type of the definition.false
otherwise- Throws:
IllegalArgumentException
- if the given data path is null or emptyBadDataPathCardinalityException
- if the definition of a part of the data path is multiple. Only the last part can be multiple
-
hasValueOrEmpty
public boolean hasValueOrEmpty(String dataPath) throws IllegalArgumentException, BadDataPathCardinalityException Description copied from interface:ModelAwareDataHolder
Checks if there is a value, even empty, for the data at the given path- Specified by:
hasValueOrEmpty
in interfaceDataHolder
- Specified by:
hasValueOrEmpty
in interfaceModelAwareDataHolder
- Parameters:
dataPath
- path of the data- Returns:
true
if the data at the given path is defined by the model, if there is a value for the data, even empty, and if the type of this value matches the type of the definition.false
otherwise- Throws:
IllegalArgumentException
- if the given data path is null or emptyBadDataPathCardinalityException
- if the definition of a part of the data path is multiple. Only the last part can be multiple
-
hasLocalValueOrEmpty
public boolean hasLocalValueOrEmpty(String dataPath) throws IllegalArgumentException, BadDataPathCardinalityException Description copied from interface:ModelAwareDataHolder
Checks if there is a local value for the data at the given path- Specified by:
hasLocalValueOrEmpty
in interfaceModelAwareDataHolder
- Parameters:
dataPath
- path of the externalizable data- Returns:
true
if the data at the given path is defined by the model, if there is a local value for the data, even empty, and if the type of this value matches the type of the definition.false
otherwise- Throws:
IllegalArgumentException
- if the given data path is null or emptyBadDataPathCardinalityException
- if the definition of a part of the data path is multiple. Only the last part can be multiple
-
hasExternalValueOrEmpty
public boolean hasExternalValueOrEmpty(String dataPath) throws IllegalArgumentException, BadDataPathCardinalityException Description copied from interface:ModelAwareDataHolder
Checks if there is an external value for the data at the given path- Specified by:
hasExternalValueOrEmpty
in interfaceModelAwareDataHolder
- Parameters:
dataPath
- path of the externalizable data- Returns:
true
if the data at the given path is defined by the model, if there is an external value for the data, even empty, and if the type of this value matches the type of the definition.false
otherwise- Throws:
IllegalArgumentException
- if the given data path is null or emptyBadDataPathCardinalityException
- if the definition of a part of the data path is multiple. Only the last part can be multiple
-
_getFinalDataName
protected String _getFinalDataName(String dataName, Optional<ExternalizableDataProvider.ExternalizableDataStatus> status) Retrieves the name of the data according to the given status- Parameters:
dataName
- the name of the datastatus
- the status- Returns:
- the final name of the data
-
hasComments
public boolean hasComments(String dataName) throws IllegalArgumentException, UndefinedItemPathException Description copied from interface:ModelAwareDataHolder
Checks if there is are comments on the data with the given name- Specified by:
hasComments
in interfaceModelAwareDataHolder
- Parameters:
dataName
- name of the data- Returns:
true
if there are comments on the data,false
otherwise- Throws:
IllegalArgumentException
- if the given data name is null or emptyUndefinedItemPathException
- if the given data name is not defined by the model
-
getModel
Description copied from interface:ModelAwareDataHolder
Retrieves the data holder's model- Specified by:
getModel
in interfaceModelAwareDataHolder
- Returns:
- the data holder's model
-
getDefinition
public ModelItem getDefinition(String path) throws IllegalArgumentException, UndefinedItemPathException Description copied from interface:ModelAwareDataHolder
Retrieves the definition of the data at the given path- Specified by:
getDefinition
in interfaceModelAwareDataHolder
- Parameters:
path
- path of the data. No matter if it is a definition or data path (with repeater entry positions)- Returns:
- the definition of the data
- Throws:
IllegalArgumentException
- if the given path is null or emptyUndefinedItemPathException
- if the given path is not defined by the model
-
getDataNames
Description copied from interface:ModelAwareDataHolder
Retrieves the names of data contained by this data holder Retrieves only the data at first level, does not check composite data- Specified by:
getDataNames
in interfaceDataHolder
- Specified by:
getDataNames
in interfaceModelAwareDataHolder
- Returns:
- the names of the data contained by this data holder and that are defined by the model
-
dataToSAX
public void dataToSAX(ContentHandler contentHandler, String dataPath, DataContext context) throws SAXException Description copied from interface:DataHolder
Generates SAX events for the data at the given data path in the currentDataHolder
Do not generate any event if there is no values at the given path- Specified by:
dataToSAX
in interfaceDataHolder
- Parameters:
contentHandler
- theContentHandler
that will receive the SAX eventsdataPath
- the path of the data to SAXcontext
- The context of the data to SAX- Throws:
SAXException
- if an error occurs during the SAX events generation
-
dataToSAX
public void dataToSAX(ContentHandler contentHandler, ViewItemAccessor viewItemAccessor, DataContext context) throws SAXException, BadItemTypeException Description copied from interface:ModelAwareDataHolder
Generates SAX events for the data in the given view in the currentDataHolder
- Specified by:
dataToSAX
in interfaceModelAwareDataHolder
- Parameters:
contentHandler
- theContentHandler
that will receive the SAX eventsviewItemAccessor
- theViewItemAccessor
referencing the items for which generate SAX eventscontext
- The context of the data to SAX- Throws:
SAXException
- if an error occurs during the SAX events generationBadItemTypeException
- if the saxed value's type does not matches the stored data
-
dataToSAXForEdition
public void dataToSAXForEdition(ContentHandler contentHandler, ViewItemAccessor viewItemAccessor, DataContext context) throws SAXException, BadItemTypeException Description copied from interface:ModelAwareDataHolder
Generates SAX events for the data in the given view in edition mode in the currentDataHolder
- Specified by:
dataToSAXForEdition
in interfaceModelAwareDataHolder
- Parameters:
contentHandler
- theContentHandler
that will receive the SAX eventsviewItemAccessor
- theViewItemAccessor
referencing the items for which generate SAX eventscontext
- The context of the data to SAX- Throws:
SAXException
- if an error occurs during the SAX events generationBadItemTypeException
- if the saxed value's type does not matches the stored data
-
dataToJSON
Description copied from interface:DataHolder
Convert the data at the given path into a JSON object- Specified by:
dataToJSON
in interfaceDataHolder
- Parameters:
dataPath
- the path of the data to convertcontext
- The context of the data to convert- Returns:
- The value as JSON
-
_getPropertysAmetysObject
protected ModelAwareDataAwareAmetysObject _getPropertysAmetysObject(String dataPath) throws UndefinedItemPathException Retrieves the ametys object containing the property at the given path- Parameters:
dataPath
- the path of the property- Returns:
- the ametys object containing the property
- Throws:
UndefinedItemPathException
- if the given path does not represent a property
-
dataToJSON
public Map<String,Object> dataToJSON(ViewItemAccessor viewItemAccessor, DataContext context) throws BadItemTypeException Description copied from interface:ModelAwareDataHolder
Convert the data in the given view of the currentDataHolder
- Specified by:
dataToJSON
in interfaceModelAwareDataHolder
- Parameters:
viewItemAccessor
- theViewItemAccessor
referencing the items to convertcontext
- The context of the data to convert- Returns:
- The data of the given view as JSON
- Throws:
BadItemTypeException
- if the value's type does not matches the stored data
-
dataToJSONForEdition
public Map<String,Object> dataToJSONForEdition(ViewItemAccessor viewItemAccessor, DataContext context) throws BadItemTypeException Description copied from interface:ModelAwareDataHolder
Convert the data in the given view in edition mode in the currentDataHolder
- Specified by:
dataToJSONForEdition
in interfaceModelAwareDataHolder
- Parameters:
viewItemAccessor
- theViewItemAccessor
referencing the items to convertcontext
- The context of the data to convert- Returns:
- The data of the given view as JSON
- Throws:
BadItemTypeException
- if the value's type does not matches the stored data
-
dataToMap
Description copied from interface:ModelAwareDataHolder
Retrieves data of this DataHolder as a typed-values Map.- Specified by:
dataToMap
in interfaceModelAwareDataHolder
- Parameters:
viewItemAccessor
- theViewItemAccessor
referencing the items to include in the resulting Mapcontext
- The context of the data- Returns:
- a Map containing all data.
-
hasDifferences
public boolean hasDifferences(ViewItemAccessor viewItemAccessor, Map<String, Object> values) throws UndefinedItemPathException, BadItemTypeExceptionDescription copied from interface:ModelAwareDataHolder
Check if there are differences between the given values and the current ones- Specified by:
hasDifferences
in interfaceModelAwareDataHolder
- Parameters:
viewItemAccessor
- TheViewItemAccessor
for all items to checkvalues
- the values to check- Returns:
true
if there are differences,false
otherwise- Throws:
UndefinedItemPathException
- if a key in the given Map refers to a data that is not defined by the modelBadItemTypeException
- if the type defined by the model of one of the Map's key doesn't match the corresponding value
-
hasDifferences
public boolean hasDifferences(ViewItemAccessor viewItemAccessor, Map<String, Object> values, SynchronizationContext context) throws UndefinedItemPathException, BadItemTypeExceptionDescription copied from interface:ModelAwareDataHolder
Check if there are differences between the given values and the current ones- Specified by:
hasDifferences
in interfaceModelAwareDataHolder
- Parameters:
viewItemAccessor
- TheViewItemAccessor
for all items to checkvalues
- the values to checkcontext
- the context of the synchronization- Returns:
true
if there are differences,false
otherwise- Throws:
UndefinedItemPathException
- if a key in the given Map refers to a data that is not defined by the modelBadItemTypeException
- if the type defined by the model of one of the Map's key doesn't match the corresponding value
-
_hasDifferences
protected boolean _hasDifferences(ViewItemAccessor viewItemAccessor, Map<String, Object> values, SynchronizationContext context) throws UndefinedItemPathException, BadItemTypeExceptionCheck if there are differences between the given values and the current ones- Parameters:
viewItemAccessor
- TheViewItemAccessor
for all items to checkvalues
- the values to checkcontext
- the context of the synchronization- Returns:
true
if there are differences,false
otherwise- Throws:
UndefinedItemPathException
- if a key in the given Map refers to a data that is not defined by the modelBadItemTypeException
- if the type defined by the model of one of the Map's key doesn't match the corresponding value
-
getDifferences
public Collection<ModelItem> getDifferences(ViewItemAccessor viewItemAccessor, Map<String, Object> values) throws UndefinedItemPathException, BadItemTypeExceptionDescription copied from interface:ModelAwareDataHolder
Get the collection of model items where there are differences between the given values and the current ones- Specified by:
getDifferences
in interfaceModelAwareDataHolder
- Parameters:
viewItemAccessor
- TheViewItemAccessor
for all items to checkvalues
- the values to check- Returns:
- a collection of model items with differences
- Throws:
UndefinedItemPathException
- if a key in the given Map refers to a data that is not defined by the modelBadItemTypeException
- if the type defined by the model of one of the Map's key doesn't match the corresponding value
-
getDifferences
public Collection<ModelItem> getDifferences(ViewItemAccessor viewItemAccessor, Map<String, Object> values, SynchronizationContext context) throws UndefinedItemPathException, BadItemTypeExceptionDescription copied from interface:ModelAwareDataHolder
Get the collection of model items where there are differences between the given values and the current ones- Specified by:
getDifferences
in interfaceModelAwareDataHolder
- Parameters:
viewItemAccessor
- TheViewItemAccessor
for all items to checkvalues
- the values to checkcontext
- the context of the synchronization- Returns:
- a collection of model items with differences
- Throws:
UndefinedItemPathException
- if a key in the given Map refers to a data that is not defined by the modelBadItemTypeException
- if the type defined by the model of one of the Map's key doesn't match the corresponding value
-
_getDifferences
protected Collection<ModelItem> _getDifferences(ViewItemAccessor viewItemAccessor, Map<String, Object> values, SynchronizationContext context) throws UndefinedItemPathException, BadItemTypeExceptionGet the collection of model items where there are differences between the given values and the current ones- Parameters:
viewItemAccessor
- TheViewItemAccessor
for all items to checkvalues
- the values to checkcontext
- the context of the synchronization- Returns:
- a collection of model items with differences
- Throws:
UndefinedItemPathException
- if a key in the given Map refers to a data that is not defined by the modelBadItemTypeException
- if the type defined by the model of one of the Map's key doesn't match the corresponding value
-
_hasDifferencesInGroup
protected boolean _hasDifferencesInGroup(ModelViewItemGroup modelViewItemGroup, Map<String, Object> values, SynchronizationContext synchronizationContext) throws UndefinedItemPathException, BadItemTypeExceptionCheck if there are differences between the given values and the given group's ones- Parameters:
modelViewItemGroup
- the groupvalues
- the values to checksynchronizationContext
- the context of the synchronization- Returns:
true
if there are differences,false
otherwise- Throws:
UndefinedItemPathException
- if a key in the given Map refers to a data that is not defined by the modelBadItemTypeException
- if the type defined by the model of one of the Map's key doesn't match the corresponding value
-
_getDifferencesInGroup
protected Collection<ModelItem> _getDifferencesInGroup(ModelViewItemGroup modelViewItemGroup, Map<String, Object> values, SynchronizationContext synchronizationContext) throws UndefinedItemPathException, BadItemTypeExceptionGet the collection of model items where there are differences between the given values and the given group's ones- Parameters:
modelViewItemGroup
- the groupvalues
- the values to checksynchronizationContext
- the context of the synchronization- Returns:
- a collection of model items with differences
- Throws:
UndefinedItemPathException
- if a key in the given Map refers to a data that is not defined by the modelBadItemTypeException
- if the type defined by the model of one of the Map's key doesn't match the corresponding value
-
_hasDifferencesInElement
protected boolean _hasDifferencesInElement(ViewElement viewElement, Map<String, Object> values, SynchronizationContext synchronizationContext) throws UndefinedItemPathException, BadItemTypeExceptionCheck if there are differences between the given values and the given element's ones- Parameters:
viewElement
- the elementvalues
- the values to checksynchronizationContext
- the context of the synchronization- Returns:
true
if there are differences,false
otherwise- Throws:
UndefinedItemPathException
- if a key in the given Map refers to a data that is not defined by the modelBadItemTypeException
- if the type defined by the model of one of the Map's key doesn't match the corresponding value
-
_checkElementDifferences
protected boolean _checkElementDifferences(ViewElement viewElement, SynchronizableValue value, ValueContext context) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException Check if there are differences between the given value and the given view element's value- Parameters:
viewElement
- the elementvalue
- the value to checkcontext
- context of the data to check- Returns:
true
if there are differences,false
otherwise- Throws:
IllegalArgumentException
- if the given data name is null or emptyUndefinedItemPathException
- if the given data name is not defined by the modelBadItemTypeException
- if the type defined by the model doesn't match the given value to set
-
_checkElementDifferencesInRemoveMode
protected boolean _checkElementDifferencesInRemoveMode(ViewElement viewElement, SynchronizableValue value, ValueContext context) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException Check if there are differences between the given value and the given view element's value- Parameters:
viewElement
- the elementvalue
- the value to checkcontext
- context of the data to check- Returns:
true
if there are differences,false
otherwise- Throws:
IllegalArgumentException
- if the given data name is null or emptyUndefinedItemPathException
- if the given data name is not defined by the modelBadItemTypeException
- if the type defined by the model doesn't match the given value to set
-
_checkStatusDifferences
protected boolean _checkStatusDifferences(ElementDefinition definition, SynchronizableValue value, SynchronizationContext synchronizationContext, boolean doValuesContainData) Check if the data's status will have to be changed- Parameters:
definition
- definition of the datavalue
- the valuesynchronizationContext
- the context of the synchronizationdoValuesContainData
-true
if the values contain the data,false
otherwise- Returns:
true
if the status has changed,false
otherwise
-
_createSynchronizationContextInstance
Creates an instance ofSynchronizationContext
- Type Parameters:
T
- the type of theSynchronizationContext
- Returns:
- the created
SynchronizationContext
-
getRepositoryData
Description copied from interface:DataHolder
Retrieves the repository data used by thisDataHolder
- Specified by:
getRepositoryData
in interfaceDataHolder
- Returns:
- the repository data used by this
DataHolder
-
getParentDataHolder
Description copied from interface:DataHolder
Retrieves the optional parent of the currentDataHolder
There can be no parent if the currentDataHolder
is the root- Specified by:
getParentDataHolder
in interfaceDataHolder
- Specified by:
getParentDataHolder
in interfaceIndexableDataHolder
- Specified by:
getParentDataHolder
in interfaceModelAwareDataHolder
- Returns:
- the parent of the current
DataHolder
-
getRootDataHolder
Description copied from interface:DataHolder
Retrieves theDataHolder
that is the root of the current one- Specified by:
getRootDataHolder
in interfaceDataHolder
- Specified by:
getRootDataHolder
in interfaceIndexableDataHolder
- Specified by:
getRootDataHolder
in interfaceModelAwareDataHolder
- Returns:
- the root
DataHolder
-
_checkDefinition
Check definition for data path- Parameters:
dataPath
- the data patherrorMsg
- the error message to throw
-
_checkDefinition
Check definition for data path- Parameters:
dataPath
- the data pathcheckStatusAvailable
-true
to check if the definition supports externalizable data statuserrorMsg
- the error message to throw
-