Module org.eclipse.persistence.core
Class ContainerPolicy
java.lang.Object
org.eclipse.persistence.internal.queries.ContainerPolicy
- All Implemented Interfaces:
Serializable
,Cloneable
,CoreContainerPolicy<AbstractSession>
- Direct Known Subclasses:
CursorPolicy
,InterfaceContainerPolicy
public abstract class ContainerPolicy
extends Object
implements CoreContainerPolicy<AbstractSession>, Cloneable, Serializable
Purpose: Used to support collections in read queries.
Responsibilities: Map the results into the appropriate collection instance. Generically support special collections like cursored stream and virtual collection.
- Since:
- TOPLink/Java 1.2
- See Also:
-
Field Summary
Modifier and TypeFieldDescriptionprotected Constructor
protected static Class
<? extends Collection> Allow the default collection class to be set.protected ClassDescriptor
The descriptor is used to wrap and unwrap objects using the wrapper policy. -
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
addAdditionalFieldsToQuery
(ReadQuery selectionQuery, Expression baseExpression) INTERNAL: Called when the selection query is being initialized to add any required additional fields to the query.boolean
addAll
(List elements, Object container, AbstractSession session, List<AbstractRecord> rows, DataReadQuery query, CacheKey parentCacheKey, boolean isTargetProtected) INTERNAL: This is used for ordered List containers to add all of the elements to the collection in the order of the index field in the row.boolean
addAll
(List elements, Object container, AbstractSession session, List<AbstractRecord> dbRows, ObjectBuildingQuery query, CacheKey parentCacheKey, boolean isTargetProtected) INTERNAL: This is used for ordered List containers to add all of the elements to the collection in the order of the index field in the row.void
addFieldsForMapKey
(AbstractRecord joinRow) INTERNAL: Called when the insert query is being initialized to ensure the fields for the key are in the insert queryboolean
addInto
(Object key, Object element, Object container, AbstractSession session) INTERNAL: Add element to container.boolean
addInto
(Object element, Object container, AbstractSession session) INTERNAL: Add element to container.boolean
addInto
(Object element, Object container, AbstractSession session, AbstractRecord row, DataReadQuery query, CacheKey parentCacheKey, boolean isTargetProtected) INTERNAL: This is used for adding to a direct map or direct collection from the database.boolean
addInto
(Object element, Object container, AbstractSession session, AbstractRecord dbRow, ObjectBuildingQuery query, CacheKey parentCacheKey, boolean isTargetProtected) INTERNAL: Add element to container.void
addNestedJoinsQueriesForMapKey
(JoinedAttributeManager joinManager, ObjectLevelReadQuery query, AbstractSession session) INTERNAL: Used for joining.void
addNextValueFromIteratorInto
(Object valuesIterator, Object parent, CacheKey parentCacheKey, Object toCollection, CollectionMapping mapping, Integer refreshCascade, AbstractSession cloningSession, boolean isExisting, boolean isFromSharedCache) INTERNAL: This method is used to add the next value from an iterator built using ContainerPolicy's iteratorFor() method into the toCollection.void
buildChangeSetForNewObjectInCollection
(Object object, ClassDescriptor referenceDescriptor, UnitOfWorkChangeSet uowChangeSet, AbstractSession session) buildCloneForKey
(Object key, Object parent, CacheKey parentCacheKey, Integer refreshCascade, AbstractSession cloningSession, boolean isExisting, boolean isCacheCheckComplete) Build a clone for the key of a Map represented by this container policy if necessary.buildCollectionEntry
(Object objectAdded, ObjectChangeSet changeSet) INTERNAL: Return an object representing an entry in the collection represented by this container policy This method will be overridden to allow MapContainerPolicy to return a construct that contains the key and the valuebuildContainerFromVector
(Vector vector, AbstractSession session) INTERNAL: Return a container populated with the contents of the specified Vector.static ContainerPolicy
INTERNAL: Return the appropriate container policy for the default container class.buildKey
(AbstractRecord row, ObjectBuildingQuery query, CacheKey parentCacheKey, AbstractSession session, boolean isTargetProtected) Extract the key for the map from the provided row overridden by subclasses that deal with map keysbuildKeyFromJoinedRow
(AbstractRecord row, JoinedAttributeManager joinManager, ObjectBuildingQuery query, CacheKey parentCacheKey, AbstractSession session, boolean isTargetProtected) Extract the key for the map from the provided row overridden by subclasses that deal with map keysstatic ContainerPolicy
buildPolicyFor
(Class<?> concreteContainerClass) INTERNAL: Return the appropriate container policy for the specified concrete container class.static ContainerPolicy
buildPolicyFor
(Class<?> concreteContainerClass, boolean hasOrdering) INTERNAL: Return the appropriate container policy for the specified concrete container class.Object[]
buildReferencesPKList
(Object container, AbstractSession session) INTERNAL: This method will access the target relationship and create a list of information to rebuild the collection.INTERNAL: This Certain key mappings favor different types of selection query.void
cascadeDiscoverAndPersistUnregisteredNewObjects
(Object object, Map newObjects, Map unregisteredExistingObjects, Map visitedObjects, UnitOfWorkImpl uow, Set cascadeErrors) INTERNAL: Cascade DiscoverAndPersistUnregisteredNewObjects to any mappings managed by the container policy.void
cascadePerformRemoveIfRequired
(Object object, UnitOfWorkImpl uow, Map visitedObjects) INTERNAL: Cascade performRemove to any mappings managed by the container policy.void
cascadeRegisterNewIfRequired
(Object object, UnitOfWorkImpl uow, Map visitedObjects) INTERNAL: Cascade registerNew to any mappings managed by the container policy.void
INTERNAL: Remove all the elements from the specified container.clone()
INTERNAL: Return a clone of the specified container.protected void
collectObjectForNewCollection
(Map originalKeyValues, Map cloneKeyValues, Object newCollection, CollectionChangeRecord changeRecord, AbstractSession session, ClassDescriptor referenceDescriptor) INTERNAL: Iterate over the list of new objects and create change sets for them This method is overridden by subclasses to handle map keysvoid
compareCollectionsForChange
(Object oldCollection, Object newCollection, CollectionChangeRecord changeRecord, AbstractSession session, ClassDescriptor referenceDescriptor) INTERNAL: This method is used to calculate the differences between two collections.boolean
compareKeys
(Object sourceKey, AbstractSession session) INTERNAL: Return true if keys are the same in the source as the backup.concatenateContainers
(Object firstContainer, Object secondContainer, AbstractSession session) INTERNAL: Build a new container, add the contents of each of the specified containers to it, and return it.INTERNAL: Return an instance of the container class.containerInstance
(int initialCapacity) INTERNAL: Return an instance of the container class with the specified initial capacity.protected boolean
INTERNAL: Return whether element exists in container.boolean
contains
(Object element, Object container, AbstractSession session) INTERNAL: Check if the object is contained in the collection.void
convertClassNamesToClasses
(ClassLoader classLoader) INTERNAL: Convert all the class-name-based settings in this ContainerPolicy to actual class-based settings This method is implemented by subclasses as necessary.static void
copyMapDataToRow
(Map mappingData, AbstractRecord databaseRow) INTERNAL: convenience method to copy the keys and values from a Map into an AbstractRecordabstract CollectionChangeEvent
createChangeEvent
(Object collectionOwner, String propertyName, Object collectionChanged, Object elementChanged, int changeType, Integer index, boolean isChangeApplied) INTERNAL: Creates a CollectionChangeEvent for the containerprotected void
createChangeSetForKeys
(Map originalKeyValues, CollectionChangeRecord changeRecord, AbstractSession session, ClassDescriptor referenceDescriptor) INTERNAL: Create change sets that contain map keys.createWrappedObjectFromExistingWrappedObject
(Object wrappedObject, Object parent, ClassDescriptor referenceDescriptor, MergeManager mergeManager, AbstractSession targetSession) INTERNAL: This method will actually potentially wrap an object in two ways.void
deleteWrappedObject
(Object objectDeleted, AbstractSession session) INTERNAL: Delete the passed object This may be overridden by subclasses to deal with composite objectsboolean
INTERNAL: Return if the policy is equal to the other.execute()
INTERNAL: This can be used by collection such as cursored stream to gain control over execution.getAdditionalFieldsForJoin
(CollectionMapping baseMapping) INTERNAL: Return any additional fields required by the policy for a fetch join.INTERNAL: Return any tables that will be required when this mapping is used as part of a join query.getChangeValuesFrom
(Map map) INTERNAL: Used to create an iterator on a the Map object passed to CollectionChangeRecord.addRemoveChange() to access the values to be removed.getCloneDataFromChangeSet
(ObjectChangeSet changeSet) INTERNAL: Used when objects are added or removed during an update.protected Constructor
INTERNAL: Return the size constructor if available.Class
<?> INTERNAL: Return the class used for the container.INTERNAL: Used by the MWstatic Class
<?> ADVANCED: Return the default collection class.INTERNAL: Return the reference descriptor for the map key if it existsINTERNAL: Used for wrapping and unwrapping with the wrapper policy.INTERNAL: Return the fields that make up the identity of the key if this mapping is a list This method will be overridden by subclasses.getKeyMappingDataForWriteQuery
(Object object, AbstractSession session) INTERNAL: Add any non-Foreign-key data from an Object describe by a MapKeyMapping to a database row This is typically used in write queries to ensure all the data stored in the collection table is included in the query.INTERNAL: Get the selection criteria for the map key This will be overridden by container policies that allow mapsINTERNAL: Return the type of the map key, this will be overridden by container policies that allow maps.boolean
INTERNAL: Used for wrapping and unwrapping with the wrapper policy.int
hashCode()
abstract boolean
INTERNAL: Return whether the iterator has more objects.boolean
hasOrder()
INTERNAL: Returns true if the collection has ordervoid
initialize
(AbstractSession session, DatabaseTable keyTable) INTERNAL: Provide a hook to allow initialization of Container Policy partsvoid
INTERNAL: Find the size constructor.boolean
boolean
boolean
boolean
boolean
INTERNAL: Return whether the container is empty.boolean
boolean
INTERNAL: Return if the map key this container policy represents is a OneToOne.boolean
boolean
boolean
boolean
boolean
isValidContainer
(Object container) INTERNAL: Return whether the specified object is of a valid container type.boolean
isValidContainerType
(Class<?> containerType) INTERNAL: Return whether the specified type is a valid container type.void
iterateOnMapKey
(DescriptorIterator iterator, Object element) INTERNAL: Used in Descriptor Iteration to iterate on map keys.abstract Object
iteratorFor
(Object container) INTERNAL: Return an iterator for the given container.keyFrom
(Object element, AbstractSession session) INTERNAL: Return the key for the specified element..keyFromEntry
(Object entry) Get the key from the passed in Map.Entry This method will be overridden by ContainerPolicies that allows maps.keyFromIterator
(Object iterator) mergeCascadeParts
(ObjectChangeSet objectChanges, MergeManager mergeManager, AbstractSession targetSession) INTERNAL: Merge changes from the source to the target object.protected void
mergeChanges
(CollectionChangeRecord changeRecord, Object valueOfTarget, boolean shouldMergeCascadeParts, MergeManager mergeManager, AbstractSession targetSession) INTERNAL: Merge changes from the source to the target object.void
mergeChanges
(CollectionChangeRecord changeRecord, Object valueOfTarget, boolean shouldMergeCascadeParts, MergeManager mergeManager, AbstractSession targetSession, boolean isSynchronizeOnMerge) INTERNAL: Merge changes from the source to the target object.protected abstract Object
INTERNAL: Return the next object on the queue.next
(Object iterator, AbstractSession session) INTERNAL: Return the next object from the iterator.INTERNAL: Return the next object on the queue.nextEntry
(Object iterator, AbstractSession session) INTERNAL: Return the next object on the queue.boolean
This can be used by collection such as cursored stream to gain control over execution.void
postCalculateChanges
(Object key, Object value, ClassDescriptor referenceDescriptor, DatabaseMapping mapping, UnitOfWorkImpl uow) INTERNAL: Add the provided object to the deleted objects list on the commit manager.void
postCalculateChanges
(ObjectChangeSet ocs, ClassDescriptor referenceDescriptor, DatabaseMapping mapping, UnitOfWorkImpl uow) INTERNAL: Add the provided object to the deleted objects list on the commit manager.void
postInitialize
(AbstractSession session) INTERNAL: Some subclasses need to post initialize mappings associated with themvoid
prepare
(DatabaseQuery query, AbstractSession session) Prepare and validate.void
Prepare and validate.void
INTERNAL: This method is used to check the key mapping to ensure that it does not write to a field that is written by another mapping.boolean
INTERNAL: Returns false.void
propogatePostDelete
(DeleteObjectQuery query, Object object) INTERNAL: Propagate the postDeleteEvent to any additional objects the query is aware of This method will be overridden by subclasses that deal MapKeysvoid
propogatePostInsert
(WriteObjectQuery query, Object object) INTERNAL: Propagate the postDeleteEvent to any additional objects the query is aware of This method will be overridden by subclasses that deal MapKeysvoid
propogatePostUpdate
(WriteObjectQuery query, Object object) INTERNAL: Propagate the postDeleteEvent to any additional objects the query is aware of This method will be overridden by subclasses that deal MapKeysvoid
propogatePreDelete
(DeleteObjectQuery query, Object object) INTERNAL: Propagate the postDeleteEvent to any additional objects the query is aware of This method will be overridden by subclasses that deal MapKeysvoid
propogatePreInsert
(WriteObjectQuery query, Object object) INTERNAL: Propagate the postDeleteEvent to any additional objects the query is aware of This method will be overridden by subclasses that deal MapKeysvoid
propogatePreUpdate
(WriteObjectQuery query, Object object) INTERNAL: Propagate the postDeleteEvent to any additional objects the query is aware of This method will be overridden by subclasses that deal MapKeysvoid
recordAddToCollectionInChangeRecord
(ObjectChangeSet changeSetToAdd, CollectionChangeRecord collectionChangeRecord) This method is used to bridge the behavior between Attribute Change Tracking and deferred change tracking with respect to adding the same instance multiple times.void
recordPrivateOwnedRemovals
(Object object, ClassDescriptor referenceDescriptor, UnitOfWorkImpl uow) INTERNAL: Add the provided object to the deleted objects list on the commit manager.void
recordRemoveFromCollectionInChangeRecord
(ObjectChangeSet changeSetToRemove, CollectionChangeRecord collectionChangeRecord) This method is used to bridge the behavior between Attribute Change Tracking and deferred change tracking with respect to adding the same instance multiple times.void
recordUpdateToCollectionInChangeRecord
(CollectionChangeEvent event, ObjectChangeSet changeSet, CollectionChangeRecord collectionChangeRecord) This method is used to bridge the behavior between Attribute Change Tracking and deferred change tracking with respect to adding the same instance multiple times.This can be used by collection such as cursored stream to gain control over execution.protected boolean
removeFrom
(Object key, Object element, Object container) INTERNAL: Remove element from container.boolean
removeFrom
(Object key, Object element, Object container, AbstractSession session) INTERNAL: Remove the object from the collection.boolean
removeFrom
(Object element, Object container, AbstractSession session) INTERNAL: Remove the object from the collection.boolean
INTERNAL: Returns whether this ContainerPolicy should requires data modification events when objects are added or deleted during updateprotected void
setConstructor
(Constructor constructor) INTERNAL: Set the size constructor if available.void
setContainerClass
(Class<?> containerClass) INTERNAL: Set the class used for the container.void
setContainerClassName
(String containerClassName) INTERNAL: Used by the MWstatic void
setDefaultContainerClass
(Class<? extends Collection> collectionClass) ADVANCED: Allow the default collection class to be set.void
setElementDescriptor
(ClassDescriptor elementDescriptor) INTERNAL: Used for wrapping and unwrapping with the wrapper policy.void
setKeyName
(String instanceVariableName, Class<?> elementClass) INTERNAL: Sets the key name to be used to generate the key in a Map type container class.void
setKeyName
(String instanceVariableName, String elementClassName) INTERNAL: It is illegal to send this message to this receiver.boolean
INTERNAL: Indicates whether addAll method should be called to add entire collection, or it's possible to call addInto multiple times instead.boolean
INTERNAL: Return whether data for a map key must be included on a Delete data modification event This will be overridden by subclasses that handle maps.boolean
INTERNAL: Certain types of container policies require an extra update statement after a relationship is inserted.int
INTERNAL: Return the size of container.toString()
protected Object
unwrapElement
(Object object) INTERNAL: MapContainerPolicy's iterator iterates on the Entries of a Map.unwrapIteratorResult
(Object object) INTERNAL: Depending on the container, the entries returned of iteration using the ContainerPolicy.iteratorFor() method may be wrapped.void
updateChangeRecordForSelfMerge
(ChangeRecord changeRecord, Object source, Object target, ForeignReferenceMapping mapping, UnitOfWorkChangeSet parentUOWChangeSet, UnitOfWorkImpl unitOfWork) INTERNAL: Update a ChangeRecord to replace the ChangeSet for the old entity with the changeSet for the new Entity.int
updateJoinedMappingIndexesForMapKey
(Map<DatabaseMapping, Object> indexList, int index) INTERNAL: Update the joined mapping indices This method is a no-op, but will be overridden by subclassesvalueFromPKList
(Object[] pks, AbstractRecord foreignKeys, ForeignReferenceMapping mapping, AbstractSession session) INTERNAL: This method is used to load a relationship from a list of PKs.vectorFor
(Object container, AbstractSession session) INTERNAL: Return a Vector populated with the contents of container.
-
Field Details
-
defaultContainerClass
Allow the default collection class to be set. -
elementDescriptor
The descriptor is used to wrap and unwrap objects using the wrapper policy. -
constructor
-
-
Constructor Details
-
ContainerPolicy
protected ContainerPolicy()Default constructor.
-
-
Method Details
-
getDefaultContainerClass
ADVANCED: Return the default collection class. -
setDefaultContainerClass
ADVANCED: Allow the default collection class to be set. -
addAdditionalFieldsToQuery
INTERNAL: Called when the selection query is being initialized to add any required additional fields to the query. By default, there are not additional fields required but this method is overridden by subclasses.- See Also:
-
addFieldsForMapKey
INTERNAL: Called when the insert query is being initialized to ensure the fields for the key are in the insert query- See Also:
-
addInto
INTERNAL: Add element to container. This is used to add to a collection independent of JDK 1.1 and 1.2. The session may be required to wrap for the wrapper policy. Return whether the container changed- Specified by:
addInto
in interfaceCoreContainerPolicy<AbstractSession>
-
addInto
public boolean addInto(Object element, Object container, AbstractSession session, AbstractRecord dbRow, ObjectBuildingQuery query, CacheKey parentCacheKey, boolean isTargetProtected) INTERNAL: Add element to container. This is used to add to a collection independent of type. The session may be required to wrap for the wrapper policy. The row may be required by subclasses, such as MappedKeyMap. Return whether the container changed. -
addAll
public boolean addAll(List elements, Object container, AbstractSession session, List<AbstractRecord> dbRows, ObjectBuildingQuery query, CacheKey parentCacheKey, boolean isTargetProtected) INTERNAL: This is used for ordered List containers to add all of the elements to the collection in the order of the index field in the row. This is currently only used by OrderListContainerPolicy, so this is just a stub. The passing of the query is to allow future compatibility with Maps (ordered Map). -
addInto
public boolean addInto(Object element, Object container, AbstractSession session, AbstractRecord row, DataReadQuery query, CacheKey parentCacheKey, boolean isTargetProtected) INTERNAL: This is used for adding to a direct map or direct collection from the database. The row data may also be requires, as in the case of indexed ordered lists, or direct maps. -
addAll
public boolean addAll(List elements, Object container, AbstractSession session, List<AbstractRecord> rows, DataReadQuery query, CacheKey parentCacheKey, boolean isTargetProtected) INTERNAL: This is used for ordered List containers to add all of the elements to the collection in the order of the index field in the row. This is currently only used by OrderListContainerPolicy, so this is just a stub. The passing of the query is to allow future compatibility with Maps (ordered Map). -
addInto
INTERNAL: Add element to container. This is used to add to a collection independent of type. The session may be required to wrap for the wrapper policy. Return whether the container changed.- Specified by:
addInto
in interfaceCoreContainerPolicy<AbstractSession>
-
addNestedJoinsQueriesForMapKey
public void addNestedJoinsQueriesForMapKey(JoinedAttributeManager joinManager, ObjectLevelReadQuery query, AbstractSession session) INTERNAL: Used for joining. Add any queries necessary for joining to the join manager This method will be overridden by subclasses that handle map keys -
addNextValueFromIteratorInto
public void addNextValueFromIteratorInto(Object valuesIterator, Object parent, CacheKey parentCacheKey, Object toCollection, CollectionMapping mapping, Integer refreshCascade, AbstractSession cloningSession, boolean isExisting, boolean isFromSharedCache) INTERNAL: This method is used to add the next value from an iterator built using ContainerPolicy's iteratorFor() method into the toCollection. This method is overridden by subclasses to provide extended functionality for map keys- See Also:
-
buildCloneForKey
public Object buildCloneForKey(Object key, Object parent, CacheKey parentCacheKey, Integer refreshCascade, AbstractSession cloningSession, boolean isExisting, boolean isCacheCheckComplete) Build a clone for the key of a Map represented by this container policy if necessary. By default, the key is not cloned since in standard EclipseLink Mappings it will not be an Entity -
buildCollectionEntry
INTERNAL: Return an object representing an entry in the collection represented by this container policy This method will be overridden to allow MapContainerPolicy to return a construct that contains the key and the value- See Also:
-
buildContainerFromVector
INTERNAL: Return a container populated with the contents of the specified Vector. -
buildKey
public Object buildKey(AbstractRecord row, ObjectBuildingQuery query, CacheKey parentCacheKey, AbstractSession session, boolean isTargetProtected) Extract the key for the map from the provided row overridden by subclasses that deal with map keys -
buildReferencesPKList
INTERNAL: This method will access the target relationship and create a list of information to rebuild the collection. This method is used in combination with the CachedValueHolder to store references to PK's to be loaded from a cache instead of a query.- See Also:
-
buildKeyFromJoinedRow
public Object buildKeyFromJoinedRow(AbstractRecord row, JoinedAttributeManager joinManager, ObjectBuildingQuery query, CacheKey parentCacheKey, AbstractSession session, boolean isTargetProtected) Extract the key for the map from the provided row overridden by subclasses that deal with map keys -
buildDefaultPolicy
INTERNAL: Return the appropriate container policy for the default container class. -
buildPolicyFor
INTERNAL: Return the appropriate container policy for the specified concrete container class. -
buildPolicyFor
INTERNAL: Return the appropriate container policy for the specified concrete container class. -
buildSelectionQueryForDirectCollectionMapping
INTERNAL: This Certain key mappings favor different types of selection query. Return the appropriate type of selectionQuery -
clear
INTERNAL: Remove all the elements from the specified container. Valid only for certain subclasses.- Specified by:
clear
in interfaceCoreContainerPolicy<AbstractSession>
-
createChangeEvent
public abstract CollectionChangeEvent createChangeEvent(Object collectionOwner, String propertyName, Object collectionChanged, Object elementChanged, int changeType, Integer index, boolean isChangeApplied) INTERNAL: Creates a CollectionChangeEvent for the container -
equals
INTERNAL: Return if the policy is equal to the other. By default if they are the same class, they are considered equal. This is used for query parse caching. -
hashCode
public int hashCode() -
cascadeDiscoverAndPersistUnregisteredNewObjects
public void cascadeDiscoverAndPersistUnregisteredNewObjects(Object object, Map newObjects, Map unregisteredExistingObjects, Map visitedObjects, UnitOfWorkImpl uow, Set cascadeErrors) INTERNAL: Cascade DiscoverAndPersistUnregisteredNewObjects to any mappings managed by the container policy. Be default, this is a no-op, but will be overridden by subclasses -
cascadePerformRemoveIfRequired
INTERNAL: Cascade performRemove to any mappings managed by the container policy. Be default, this is a no-op, but will be overridden by subclasses -
cascadeRegisterNewIfRequired
INTERNAL: Cascade registerNew to any mappings managed by the container policy. Be default, this is a no-op, but will be overridden by subclasses -
clone
-
clone
-
cloneFor
INTERNAL: Return a clone of the specified container. Can only be called for select subclasses. -
createChangeSetForKeys
protected void createChangeSetForKeys(Map originalKeyValues, CollectionChangeRecord changeRecord, AbstractSession session, ClassDescriptor referenceDescriptor) INTERNAL: Create change sets that contain map keys. This method will be overridden by subclasses that handle map keys -
collectObjectForNewCollection
protected void collectObjectForNewCollection(Map originalKeyValues, Map cloneKeyValues, Object newCollection, CollectionChangeRecord changeRecord, AbstractSession session, ClassDescriptor referenceDescriptor) INTERNAL: Iterate over the list of new objects and create change sets for them This method is overridden by subclasses to handle map keys -
compareCollectionsForChange
public void compareCollectionsForChange(Object oldCollection, Object newCollection, CollectionChangeRecord changeRecord, AbstractSession session, ClassDescriptor referenceDescriptor) INTERNAL: This method is used to calculate the differences between two collections. -
buildChangeSetForNewObjectInCollection
public void buildChangeSetForNewObjectInCollection(Object object, ClassDescriptor referenceDescriptor, UnitOfWorkChangeSet uowChangeSet, AbstractSession session) -
compareKeys
INTERNAL: Return true if keys are the same in the source as the backup. False otherwise in the case of readonly compare against the original For non map container policies return true always, because these policies have no concepts of Keys -
concatenateContainers
public Object concatenateContainers(Object firstContainer, Object secondContainer, AbstractSession session) INTERNAL: Build a new container, add the contents of each of the specified containers to it, and return it. Both of the containers must use the same container policy (namely, this one). -
containerInstance
INTERNAL: Return an instance of the container class. Null should never be returned. A ValidationException is thrown on error.- Specified by:
containerInstance
in interfaceCoreContainerPolicy<AbstractSession>
-
containerInstance
INTERNAL: Return an instance of the container class with the specified initial capacity. Null should never be returned. A ValidationException is thrown on error.- Specified by:
containerInstance
in interfaceCoreContainerPolicy<AbstractSession>
-
contains
INTERNAL: Return whether element exists in container. -
contains
INTERNAL: Check if the object is contained in the collection. This is used to check contains in a collection independent of JDK 1.1 and 1.2. The session may be required to unwrap for the wrapper policy.- Specified by:
contains
in interfaceCoreContainerPolicy<AbstractSession>
-
convertClassNamesToClasses
INTERNAL: Convert all the class-name-based settings in this ContainerPolicy to actual class-based settings This method is implemented by subclasses as necessary. -
createWrappedObjectFromExistingWrappedObject
public Object createWrappedObjectFromExistingWrappedObject(Object wrappedObject, Object parent, ClassDescriptor referenceDescriptor, MergeManager mergeManager, AbstractSession targetSession) INTERNAL: This method will actually potentially wrap an object in two ways. It will first wrap the object based on the referenceDescriptor's wrapper policy. It will also potentially do some wrapping based on what is required by the container policy.- Parameters:
parent
- if this is an aggregate, the owner of the aggregate- See Also:
-
deleteWrappedObject
INTERNAL: Delete the passed object This may be overridden by subclasses to deal with composite objects- See Also:
-
execute
INTERNAL: This can be used by collection such as cursored stream to gain control over execution. -
getAdditionalTablesForJoinQuery
INTERNAL: Return any tables that will be required when this mapping is used as part of a join query. -
getAdditionalFieldsForJoin
INTERNAL: Return any additional fields required by the policy for a fetch join. This method will be overridden by ContainerPolicies that handle map keys. -
getChangeValuesFrom
INTERNAL: Used to create an iterator on a the Map object passed to CollectionChangeRecord.addRemoveChange() to access the values to be removed. In the case of some container policies the values will actually be the keys. -
getCloneDataFromChangeSet
INTERNAL: Used when objects are added or removed during an update. This method returns either the clone from the ChangeSet or a packaged version of it that contains things like map keys. -
getConstructor
INTERNAL: Return the size constructor if available. -
getContainerClass
INTERNAL: Return the class used for the container. -
getContainerClassName
INTERNAL: Used by the MW -
getDescriptorForMapKey
INTERNAL: Return the reference descriptor for the map key if it exists -
getElementDescriptor
INTERNAL: Used for wrapping and unwrapping with the wrapper policy. -
getIdentityFieldsForMapKey
INTERNAL: Return the fields that make up the identity of the key if this mapping is a list This method will be overridden by subclasses. -
getKeyMappingDataForWriteQuery
INTERNAL: Add any non-Foreign-key data from an Object describe by a MapKeyMapping to a database row This is typically used in write queries to ensure all the data stored in the collection table is included in the query. -
getKeySelectionCriteria
INTERNAL: Get the selection criteria for the map key This will be overridden by container policies that allow maps -
getKeyType
INTERNAL: Return the type of the map key, this will be overridden by container policies that allow maps. -
hasElementDescriptor
public boolean hasElementDescriptor()INTERNAL: Used for wrapping and unwrapping with the wrapper policy. -
hasNext
INTERNAL: Return whether the iterator has more objects. The iterator is the one returned from #iteratorFor(). Valid for some subclasses only.- Specified by:
hasNext
in interfaceCoreContainerPolicy<AbstractSession>
- See Also:
-
hasOrder
public boolean hasOrder()INTERNAL: Returns true if the collection has order -
initialize
INTERNAL: Provide a hook to allow initialization of Container Policy parts -
initializeConstructor
public void initializeConstructor()INTERNAL: Find the size constructor. Providing a size is important for performance. -
isCollectionPolicy
public boolean isCollectionPolicy() -
isCursoredStreamPolicy
public boolean isCursoredStreamPolicy() -
isScrollableCursorPolicy
public boolean isScrollableCursorPolicy() -
isCursorPolicy
public boolean isCursorPolicy() -
isDirectMapPolicy
public boolean isDirectMapPolicy() -
isEmpty
INTERNAL: Return whether the container is empty.- Specified by:
isEmpty
in interfaceCoreContainerPolicy<AbstractSession>
-
isListPolicy
public boolean isListPolicy()- Specified by:
isListPolicy
in interfaceCoreContainerPolicy<AbstractSession>
-
isOrderedListPolicy
public boolean isOrderedListPolicy() -
isMapPolicy
public boolean isMapPolicy() -
isMappedKeyMapPolicy
public boolean isMappedKeyMapPolicy() -
isMapKeyObject
public boolean isMapKeyObject()INTERNAL: Return if the map key this container policy represents is a OneToOne. -
isValidContainer
INTERNAL: Return whether the specified object is of a valid container type.- See Also:
-
isValidContainerType
INTERNAL: Return whether the specified type is a valid container type. -
iterateOnMapKey
INTERNAL: Used in Descriptor Iteration to iterate on map keys. This method is a no-op here, but will be overridden by subclasses -
iteratorFor
INTERNAL: Return an iterator for the given container. This iterator can then be used as a parameter to #hasNext() and #next().- Specified by:
iteratorFor
in interfaceCoreContainerPolicy<AbstractSession>
- See Also:
-
keyFrom
INTERNAL: Return the key for the specified element.. -
keyFromEntry
Get the key from the passed in Map.Entry This method will be overridden by ContainerPolicies that allows maps. -
keyFromIterator
-
mergeCascadeParts
public Object mergeCascadeParts(ObjectChangeSet objectChanges, MergeManager mergeManager, AbstractSession targetSession) INTERNAL: Merge changes from the source to the target object. Because this is a collection mapping, values are added to or removed from the collection based on the change set. -
mergeChanges
public void mergeChanges(CollectionChangeRecord changeRecord, Object valueOfTarget, boolean shouldMergeCascadeParts, MergeManager mergeManager, AbstractSession targetSession, boolean isSynchronizeOnMerge) INTERNAL: Merge changes from the source to the target object. Because this is a collection mapping, values are added to or removed from the collection based on the change set. Synchronize if system property is specified. If not, default to clone the target collection. No need to synchronize if the collection is new. -
mergeChanges
protected void mergeChanges(CollectionChangeRecord changeRecord, Object valueOfTarget, boolean shouldMergeCascadeParts, MergeManager mergeManager, AbstractSession targetSession) INTERNAL: Merge changes from the source to the target object. Because this is a collection mapping, values are added to or removed from the collection based on the change set. -
next
INTERNAL: Return the next object on the queue. The iterator is the one returned from #iteratorFor(). Valid for some subclasses only.- See Also:
-
next
INTERNAL: Return the next object from the iterator. This is used to stream over a collection independent of JDK 1.1 and 1.2. The session may be required to unwrap for the wrapper policy.- Specified by:
next
in interfaceCoreContainerPolicy<AbstractSession>
-
nextEntry
INTERNAL: Return the next object on the queue. The iterator is the one returned from #iteratorFor(). In the case of a Map, this will return a MapEntry to allow use of the key- Specified by:
nextEntry
in interfaceCoreContainerPolicy<AbstractSession>
- See Also:
-
nextEntry
INTERNAL: Return the next object on the queue. The iterator is the one returned from #iteratorFor(). In the case of a Map, this will return a MapEntry to allow use of the key- Specified by:
nextEntry
in interfaceCoreContainerPolicy<AbstractSession>
- See Also:
-
overridesRead
public boolean overridesRead()This can be used by collection such as cursored stream to gain control over execution. -
postInitialize
INTERNAL: Some subclasses need to post initialize mappings associated with them -
postCalculateChanges
public void postCalculateChanges(ObjectChangeSet ocs, ClassDescriptor referenceDescriptor, DatabaseMapping mapping, UnitOfWorkImpl uow) INTERNAL: Add the provided object to the deleted objects list on the commit manager. This may be overridden by subclasses to process a composite object- See Also:
-
postCalculateChanges
public void postCalculateChanges(Object key, Object value, ClassDescriptor referenceDescriptor, DatabaseMapping mapping, UnitOfWorkImpl uow) INTERNAL: Add the provided object to the deleted objects list on the commit manager. This may be overridden by subclasses to process a composite object. -
recordPrivateOwnedRemovals
public void recordPrivateOwnedRemovals(Object object, ClassDescriptor referenceDescriptor, UnitOfWorkImpl uow) INTERNAL: Add the provided object to the deleted objects list on the commit manager. This may be overridden by subclasses to process a composite object. -
prepare
Prepare and validate. Allow subclasses to override.- Throws:
QueryException
-
prepareForExecution
Prepare and validate. Allow subclasses to override.- Throws:
QueryException
-
processAdditionalWritableMapKeyFields
INTERNAL: This method is used to check the key mapping to ensure that it does not write to a field that is written by another mapping. This method will be overridden by subclasses that deal MapKeys -
propogatePostDelete
INTERNAL: Propagate the postDeleteEvent to any additional objects the query is aware of This method will be overridden by subclasses that deal MapKeys -
propogatePostInsert
INTERNAL: Propagate the postDeleteEvent to any additional objects the query is aware of This method will be overridden by subclasses that deal MapKeys -
propogatePostUpdate
INTERNAL: Propagate the postDeleteEvent to any additional objects the query is aware of This method will be overridden by subclasses that deal MapKeys -
propogatePreDelete
INTERNAL: Propagate the postDeleteEvent to any additional objects the query is aware of This method will be overridden by subclasses that deal MapKeys -
propogatePreInsert
INTERNAL: Propagate the postDeleteEvent to any additional objects the query is aware of This method will be overridden by subclasses that deal MapKeys -
propogatePreUpdate
INTERNAL: Propagate the postDeleteEvent to any additional objects the query is aware of This method will be overridden by subclasses that deal MapKeys -
propagatesEventsToCollection
public boolean propagatesEventsToCollection()INTERNAL: Returns false. Most container policies do not need to propagate events within the collections This will be overridden by subclasses -
recordAddToCollectionInChangeRecord
public void recordAddToCollectionInChangeRecord(ObjectChangeSet changeSetToAdd, CollectionChangeRecord collectionChangeRecord) This method is used to bridge the behavior between Attribute Change Tracking and deferred change tracking with respect to adding the same instance multiple times. Each ContainerPolicy type will implement specific behavior for the collection type it is wrapping. These methods are only valid for collections containing object references -
recordRemoveFromCollectionInChangeRecord
public void recordRemoveFromCollectionInChangeRecord(ObjectChangeSet changeSetToRemove, CollectionChangeRecord collectionChangeRecord) This method is used to bridge the behavior between Attribute Change Tracking and deferred change tracking with respect to adding the same instance multiple times. Each ContainerPolicy type will implement specific behavior for the collection type it is wrapping. These methods are only valid for collections containing object references -
recordUpdateToCollectionInChangeRecord
public void recordUpdateToCollectionInChangeRecord(CollectionChangeEvent event, ObjectChangeSet changeSet, CollectionChangeRecord collectionChangeRecord) This method is used to bridge the behavior between Attribute Change Tracking and deferred change tracking with respect to adding the same instance multiple times. Each ContainerPolicy type will implement specific behavior for the collection type it is wrapping. These methods are only valid for collections containing object references -
remoteExecute
This can be used by collection such as cursored stream to gain control over execution. -
removeFrom
INTERNAL: Remove element from container. Valid for some subclasses only. -
removeFrom
INTERNAL: Remove the object from the collection. This is used to remove from a collection independent of JDK 1.1 and 1.2. The session may be required to unwrap for the wrapper policy. -
removeFrom
INTERNAL: Remove the object from the collection. This is used to remove from a collection independent of JDK 1.1 and 1.2. The session may be required to unwrap for the wrapper policy.- Specified by:
removeFrom
in interfaceCoreContainerPolicy<AbstractSession>
-
requiresDataModificationEvents
public boolean requiresDataModificationEvents()INTERNAL: Returns whether this ContainerPolicy should requires data modification events when objects are added or deleted during update -
setConstructor
INTERNAL: Set the size constructor if available. -
setContainerClass
INTERNAL: Set the class used for the container.- Specified by:
setContainerClass
in interfaceCoreContainerPolicy<AbstractSession>
-
setContainerClassName
INTERNAL: Used by the MW -
setElementDescriptor
INTERNAL: Used for wrapping and unwrapping with the wrapper policy. -
setKeyName
INTERNAL: It is illegal to send this message to this receiver. Try one of my subclasses. Throws an exception.- See Also:
-
setKeyName
INTERNAL: Sets the key name to be used to generate the key in a Map type container class. The key name, may be the name of a field or method. An instance of the class is provided in the case when the descriptor is being built in code. -
shouldAddAll
public boolean shouldAddAll()INTERNAL: Indicates whether addAll method should be called to add entire collection, or it's possible to call addInto multiple times instead. -
shouldIncludeKeyInDeleteEvent
public boolean shouldIncludeKeyInDeleteEvent()INTERNAL: Return whether data for a map key must be included on a Delete data modification event This will be overridden by subclasses that handle maps. -
shouldUpdateForeignKeysPostInsert
public boolean shouldUpdateForeignKeysPostInsert()INTERNAL: Certain types of container policies require an extra update statement after a relationship is inserted. Return whether this update statement is required. -
sizeFor
INTERNAL: Return the size of container.- Specified by:
sizeFor
in interfaceCoreContainerPolicy<AbstractSession>
-
toString
-
toStringInfo
-
updateJoinedMappingIndexesForMapKey
INTERNAL: Update the joined mapping indices This method is a no-op, but will be overridden by subclasses -
updateChangeRecordForSelfMerge
public void updateChangeRecordForSelfMerge(ChangeRecord changeRecord, Object source, Object target, ForeignReferenceMapping mapping, UnitOfWorkChangeSet parentUOWChangeSet, UnitOfWorkImpl unitOfWork) INTERNAL: Update a ChangeRecord to replace the ChangeSet for the old entity with the changeSet for the new Entity. This is used when an Entity is merged into itself and the Entity reference new or detached entities. -
unwrapElement
INTERNAL: MapContainerPolicy's iterator iterates on the Entries of a Map. This method returns the object from the iterator- See Also:
-
unwrapIteratorResult
INTERNAL: Depending on the container, the entries returned of iteration using the ContainerPolicy.iteratorFor() method may be wrapped. This method unwraps the values.- See Also:
-
valueFromPKList
public Object valueFromPKList(Object[] pks, AbstractRecord foreignKeys, ForeignReferenceMapping mapping, AbstractSession session) INTERNAL: This method is used to load a relationship from a list of PKs. This list may be available if the relationship has been cached. -
vectorFor
INTERNAL: Return a Vector populated with the contents of container. Added for bug 2766379, must implement a version of vectorFor that handles wrapped objects.- Specified by:
vectorFor
in interfaceCoreContainerPolicy<AbstractSession>
-
copyMapDataToRow
INTERNAL: convenience method to copy the keys and values from a Map into an AbstractRecord- Parameters:
mappingData
- a Map containing a database field as the key and the value of that field as the value
-