Class DataContextImpl
- All Implemented Interfaces:
DataContext
,DataContextChanges
,DataContextInternal
DataContext
which saves data to DataManager
.-
Nested Class Summary
Modifier and TypeClassDescriptionprotected class
protected class
Nested classes/interfaces inherited from interface io.jmix.flowui.model.DataContext
DataContext.ChangeEvent, DataContext.PostSaveEvent, DataContext.PreSaveEvent
-
Field Summary
Modifier and TypeFieldDescriptionprotected DataManager
protected boolean
protected Map<Object,
Map<String, DataContextImpl.EmbeddedPropertyChangeListener>> protected EntityReferencesNormalizer
protected EntityStates
protected EntitySystemStateSupport
protected EventHub
protected Metadata
protected MetadataTools
protected DataContextInternal
protected DataContextImpl.PropertyChangeListener
protected Function<SaveContext,
Set<Object>> protected StandardSerialization
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionaddChangeListener
(Consumer<DataContext.ChangeEvent> listener) Adds a listener toDataContext.ChangeEvent
.addPostSaveListener
(Consumer<DataContext.PostSaveEvent> listener) Adds a listener toDataContext.PostSaveEvent
.addPreSaveListener
(Consumer<DataContext.PreSaveEvent> listener) Adds a listener toDataContext.PreSaveEvent
.protected void
cleanupContextAfterRemoveEntity
(DataContextInternal context, Object removedEntity) void
clear()
Evicts all tracked entities.boolean
Returns true if the context contains the given entity (distinguished by its class and id).protected Object
copyEntity
(Object srcEntity) protected void
copySystemState
(Object srcEntity, Object dstEntity) <T> T
Creates an entity instance and merges it into the context.createObservableList
(Object notifiedEntity) createObservableList
(List<Object> list, Object notifiedEntity) createObservableSet
(Object notifiedEntity) protected ObservableSet<Object>
createObservableSet
(Set<Object> set, Object notifiedEntity) protected boolean
entityHasReference
(Object entity, Object refEntity) void
Removes the entity from the context so the context stops tracking it.void
Clears the lists of created/modified/deleted entities and evicts these entities.protected List
filterSavedInstances
(Set<Object> instances) <T> T
Returns an entity instance by its class and id.<T> T
find
(T entity) Returns the instance of entity with the same id if it exists in this context.protected void
fireChangeListener
(Object entity) getAll()
protected MetaClass
getEntityMetaClass
(Object entity) Returns an immutable set of entities registered as modified.Returns a parent context, if any.protected String
getPrimaryKeyPropertyName
(Object entity) Returns an immutable set of entities registered for removal.Returns a function which will be used to save data instead of standard implementation.boolean
Returns true if the context has detected changes in the tracked entities.protected Object
internalMerge
(Object entity, Map<Object, Object> mergedMap, boolean isRoot, MergeOptions options) boolean
isModified
(Object entity) Returns true if the context has detected changes in the given entity.boolean
Returns true if the context has registered removal of the given entity.protected Object
merge
(Collection entities) Merge the given entities into the context.merge
(Collection entities, MergeOptions options) Merge the given entities into the context.<T> T
merge
(T entity) Same asDataContext.merge(Object, MergeOptions)
with default options.<T> T
merge
(T entity, MergeOptions options) Merge the given entity into the context.protected void
mergeLazyLoadingState
(Object srcEntity, Object dstEntity) protected void
mergeList
(List<Object> list, Object managedEntity, MetaProperty property, boolean replace, MergeOptions options, Map<Object, Object> mergedMap) protected EntitySet
mergeSaved
(Set<Object> saved) protected void
mergeSet
(Set<Object> set, Object managedEntity, MetaProperty property, boolean replace, MergeOptions options, Map<Object, Object> mergedMap) protected void
mergeState
(Object srcEntity, Object dstEntity, Map<Object, Object> mergedMap, boolean isRoot, MergeOptions options) protected void
mergeSystemState
(Object srcEntity, Object dstEntity, boolean isRoot, MergeOptions options) protected void
protected String
printEntity
(Object entity, int level, Set<Object> visited) protected String
printObject
(Object object) void
Removes the entity from the context and registers it as deleted.protected void
removeFromCollections
(Object entityToRemove) protected void
removeListeners
(Object entity) save()
Saves changed and removed instances using DataManager or a custom save delegate.void
setModified
(Object entity, boolean modified) Registers or unregisters the given entity as modified.void
setParent
(DataContext parentContext) Sets the parent context.protected void
setPropertyValue
(Object entity, MetaProperty property, Object value) protected void
setPropertyValue
(Object entity, MetaProperty property, Object value, boolean checkEquals) void
setSaveDelegate
(Function<SaveContext, Set<Object>> delegate) Sets a function which will be used to save data instead of standard implementation.protected void
updateFetchPlans
(SaveContext saveContext) protected Collection<Object>
wrapLazyValueIntoObservableCollection
(Collection<Object> collection, Object notifiedEntity)
-
Field Details
-
metadata
-
metadataTools
-
entityStates
-
dataManager
-
entitySystemStateSupport
-
entityReferencesNormalizer
-
standardSerialization
-
events
-
-
modifiedInstances
-
removedInstances
-
propertyChangeListener
-
disableListeners
protected boolean disableListeners -
parentContext
-
saveDelegate
-
embeddedPropertyListeners
protected Map<Object,Map<String, embeddedPropertyListenersDataContextImpl.EmbeddedPropertyChangeListener>> -
nullIdEntitiesMap
-
-
Constructor Details
-
DataContextImpl
public DataContextImpl()
-
-
Method Details
-
getParent
Description copied from interface:DataContext
Returns a parent context, if any. If the parent context is set,DataContext.save()
method merges the changed instances to it instead of sending them to DataManager or a custom save delegate.- Specified by:
getParent
in interfaceDataContext
-
setParent
Description copied from interface:DataContext
Sets the parent context. If the parent context is set,DataContext.save()
method merges the changed instances to it instead of sending them to DataManager or a custom save delegate.- Specified by:
setParent
in interfaceDataContext
-
addChangeListener
Description copied from interface:DataContext
Adds a listener toDataContext.ChangeEvent
.- Specified by:
addChangeListener
in interfaceDataContext
-
fireChangeListener
-
find
Description copied from interface:DataContext
Returns an entity instance by its class and id.- Specified by:
find
in interfaceDataContext
- Returns:
- entity instance or null if there is no such entity in the context
-
find
@Nullable public <T> T find(T entity) Description copied from interface:DataContext
Returns the instance of entity with the same id if it exists in this context.- Specified by:
find
in interfaceDataContext
- Returns:
- entity instance or null if there is no such entity in the context
-
contains
Description copied from interface:DataContext
Returns true if the context contains the given entity (distinguished by its class and id).- Specified by:
contains
in interfaceDataContext
-
merge
Description copied from interface:DataContext
Merge the given entity into the context. The whole object graph with all references will be merged.If an entity with the same identifier already exists in the context, the passed entity state is copied into it and the existing instance is returned. Otherwise, a copy of the passed instance is registered in the context and returned.
If the given instance is new and the context doesn't contain an instance with the same identifier, the context will save the new instance on
DataContext.save()
. Otherwise, even if some attributes of the merged instance are changed as a result of copying the state of the passed instance, the merged instance will not be saved. Such modifications are considered as a result of loading more fresh state from the database.WARNING: use the returned value because it is always a different object instance. The only case when you get the same instance is if the input was previously returned from the same context as a result of
DataContext.find(Class, Object)
ormerge()
.- Specified by:
merge
in interfaceDataContext
- Parameters:
entity
- instance to mergeoptions
- merge options- Returns:
- the instance which is tracked by the context
-
merge
public <T> T merge(T entity) Description copied from interface:DataContext
Same asDataContext.merge(Object, MergeOptions)
with default options.- Specified by:
merge
in interfaceDataContext
-
merge
Description copied from interface:DataContext
Merge the given entities into the context. The whole object graph for each element of the collection with all references will be merged.Same as
DataContext.merge(Object)
but for a collection of instances.- Specified by:
merge
in interfaceDataContext
- Returns:
- set of instances tracked by the context
-
merge
Description copied from interface:DataContext
Merge the given entities into the context. The whole object graph for each element of the collection with all references will be merged.Same as
DataContext.merge(Object, MergeOptions)
but for a collection of instances.- Specified by:
merge
in interfaceDataContext
- Returns:
- set of instances tracked by the context
-
internalMerge
-
makeKey
-
copyEntity
-
mergeState
-
setPropertyValue
-
setPropertyValue
protected void setPropertyValue(Object entity, MetaProperty property, @Nullable Object value, boolean checkEquals) -
copySystemState
-
mergeSystemState
protected void mergeSystemState(Object srcEntity, Object dstEntity, boolean isRoot, MergeOptions options) -
mergeLazyLoadingState
-
mergeList
protected void mergeList(List<Object> list, Object managedEntity, MetaProperty property, boolean replace, MergeOptions options, Map<Object, Object> mergedMap) -
mergeSet
protected void mergeSet(Set<Object> set, Object managedEntity, MetaProperty property, boolean replace, MergeOptions options, Map<Object, Object> mergedMap) -
wrapLazyValueIntoObservableCollection
protected Collection<Object> wrapLazyValueIntoObservableCollection(Collection<Object> collection, Object notifiedEntity) -
createObservableList
-
createObservableList
-
createObservableSet
-
createObservableSet
-
remove
Description copied from interface:DataContext
Removes the entity from the context and registers it as deleted. The entity will be removed from the data store upon subsequent call toDataContext.save()
.If the given entity is not in the context, nothing happens.
- Specified by:
remove
in interfaceDataContext
-
removeFromCollections
-
evict
Description copied from interface:DataContext
Removes the entity from the context so the context stops tracking it.If the given entity is not in the context, nothing happens.
- Specified by:
evict
in interfaceDataContext
-
evictModified
public void evictModified()Description copied from interface:DataContext
Clears the lists of created/modified/deleted entities and evicts these entities.- Specified by:
evictModified
in interfaceDataContext
-
clear
public void clear()Description copied from interface:DataContext
Evicts all tracked entities.- Specified by:
clear
in interfaceDataContext
- See Also:
-
create
Description copied from interface:DataContext
Creates an entity instance and merges it into the context.Same as:
Foo foo = dataContext.merge(metadata.create(Foo.class));
- Specified by:
create
in interfaceDataContext
- Parameters:
entityClass
- entity class- Returns:
- a new instance which is tracked by the context
-
removeListeners
-
hasChanges
public boolean hasChanges()Description copied from interface:DataContext
Returns true if the context has detected changes in the tracked entities.- Specified by:
hasChanges
in interfaceDataContext
-
isModified
Description copied from interface:DataContext
Returns true if the context has detected changes in the given entity.- Specified by:
isModified
in interfaceDataContext
-
setModified
Description copied from interface:DataContext
Registers or unregisters the given entity as modified.- Specified by:
setModified
in interfaceDataContext
- Parameters:
entity
- entity instance which is already merged into the contextmodified
- true to register or false to unregister
-
getModified
Description copied from interface:DataContext
Returns an immutable set of entities registered as modified.- Specified by:
getModified
in interfaceDataContext
-
isRemoved
Description copied from interface:DataContext
Returns true if the context has registered removal of the given entity.- Specified by:
isRemoved
in interfaceDataContext
-
getRemoved
Description copied from interface:DataContext
Returns an immutable set of entities registered for removal.- Specified by:
getRemoved
in interfaceDataContext
-
save
Description copied from interface:DataContext
Saves changed and removed instances using DataManager or a custom save delegate. After successful save, the context contains updated instances returned from the backend code.- Specified by:
save
in interfaceDataContext
- Returns:
- set of saved and merged back to the context instances. Does not contain removed instances.
- See Also:
-
addPreSaveListener
Description copied from interface:DataContext
Adds a listener toDataContext.PreSaveEvent
.You can also add an event listener declaratively using a controller method annotated with
Subscribe
:@Subscribe(target = Target.DATA_CONTEXT) protected void onPreSave(DataContext.PreSaveEvent event) { // handle event here }
- Specified by:
addPreSaveListener
in interfaceDataContext
- Parameters:
listener
- listener- Returns:
- subscription
-
addPostSaveListener
Description copied from interface:DataContext
Adds a listener toDataContext.PostSaveEvent
.You can also add an event listener declaratively using a controller method annotated with
Subscribe
:@Subscribe(target = Target.DATA_CONTEXT) protected void onPostSave(DataContext.PostSaveEvent event) { // handle event here }
- Specified by:
addPostSaveListener
in interfaceDataContext
- Parameters:
listener
- listener- Returns:
- subscription
-
getSaveDelegate
Description copied from interface:DataContext
Returns a function which will be used to save data instead of standard implementation.- Specified by:
getSaveDelegate
in interfaceDataContext
-
setSaveDelegate
Description copied from interface:DataContext
Sets a function which will be used to save data instead of standard implementation.- Specified by:
setSaveDelegate
in interfaceDataContext
-
performSave
-
saveToDataManager
-
filterSavedInstances
-
updateFetchPlans
-
isolate
-
saveToParentContext
-
cleanupContextAfterRemoveEntity
-
entityHasReference
-
mergeSaved
-
getAll
-
modified
-
printContent
-
printEntity
-
printObject
-
getModifiedInstances
- Specified by:
getModifiedInstances
in interfaceDataContextChanges
- Returns:
- mutable set of entities registered as modified
-
getRemovedInstances
- Specified by:
getRemovedInstances
in interfaceDataContextChanges
- Returns:
- mutable set of entities registered as removed
-
getEntityMetaClass
-
getPrimaryKeyPropertyName
-