/** * INTERNAL: * Cascade perform delete through mappings that require the cascade */ @Override public void cascadePerformRemoveIfRequired(Object object, UnitOfWorkImpl uow, Map visitedObjects){ Object cloneAttribute = null; cloneAttribute = getAttributeValueFromObject(object); if ( cloneAttribute == null ) { return; } ContainerPolicy cp = getContainerPolicy(); Object cloneObjectCollection = null; cloneObjectCollection = getRealCollectionAttributeValueFromObject(object, uow); Object cloneIter = cp.iteratorFor(cloneObjectCollection); while (cp.hasNext(cloneIter)) { Object objectToCascadeOn = cp.next(cloneIter, uow); if (objectToCascadeOn != null && (!visitedObjects.containsKey(objectToCascadeOn)) ) { visitedObjects.put(objectToCascadeOn, objectToCascadeOn); ObjectBuilder builder = getReferenceDescriptor(objectToCascadeOn.getClass(), uow).getObjectBuilder(); builder.cascadePerformRemove(objectToCascadeOn, uow, visitedObjects); } } }
/** * INTERNAL: * Cascade registerNew for Create through mappings that require the cascade */ public void cascadeRegisterNewIfRequired(Object object, UnitOfWorkImpl uow, Map visitedObjects){ //aggregate objects are not registered but their mappings should be. Object cloneAttribute = null; cloneAttribute = getAttributeValueFromObject(object); if ( cloneAttribute == null ) { return; } ObjectBuilder builder = null; ContainerPolicy cp = getContainerPolicy(); Object cloneObjectCollection = null; cloneObjectCollection = getRealCollectionAttributeValueFromObject(object, uow); Object cloneIter = cp.iteratorFor(cloneObjectCollection); while (cp.hasNext(cloneIter)) { Object nextObject = cp.next(cloneIter, uow); if (nextObject != null && (! visitedObjects.containsKey(nextObject)) ) { visitedObjects.put(nextObject, nextObject); builder = getReferenceDescriptor(nextObject.getClass(), uow).getObjectBuilder(); builder.cascadeRegisterNewForCreate(nextObject, uow, visitedObjects); } } }
/** * INTERNAL: * Cascade registerNew for Create through mappings that require the cascade */ @Override public void cascadeRegisterNewIfRequired(Object object, UnitOfWorkImpl uow, Map visitedObjects){ //aggregate objects are not registered but their mappings should be. Object cloneAttribute = null; cloneAttribute = getAttributeValueFromObject(object); if ( cloneAttribute == null ) { return; } ObjectBuilder builder = null; ContainerPolicy cp = getContainerPolicy(); Object cloneObjectCollection = null; cloneObjectCollection = getRealCollectionAttributeValueFromObject(object, uow); Object cloneIter = cp.iteratorFor(cloneObjectCollection); while (cp.hasNext(cloneIter)) { Object nextObject = cp.next(cloneIter, uow); if (nextObject != null && (! visitedObjects.containsKey(nextObject)) ) { visitedObjects.put(nextObject, nextObject); builder = getReferenceDescriptor(nextObject.getClass(), uow).getObjectBuilder(); builder.cascadeRegisterNewForCreate(nextObject, uow, visitedObjects); } } }
/** * INTERNAL: * Cascade perform delete through mappings that require the cascade */ public void cascadePerformRemoveIfRequired(Object object, UnitOfWorkImpl uow, Map visitedObjects){ Object cloneAttribute = null; cloneAttribute = getAttributeValueFromObject(object); if ( cloneAttribute == null ) { return; } ContainerPolicy cp = getContainerPolicy(); Object cloneObjectCollection = null; cloneObjectCollection = getRealCollectionAttributeValueFromObject(object, uow); Object cloneIter = cp.iteratorFor(cloneObjectCollection); while (cp.hasNext(cloneIter)) { Object objectToCascadeOn = cp.next(cloneIter, uow); if (objectToCascadeOn != null && (!visitedObjects.containsKey(objectToCascadeOn)) ) { visitedObjects.put(objectToCascadeOn, objectToCascadeOn); ObjectBuilder builder = getReferenceDescriptor(objectToCascadeOn.getClass(), uow).getObjectBuilder(); builder.cascadePerformRemove(objectToCascadeOn, uow, visitedObjects); } } }
/** * INTERNAL: * Cascade perform delete through mappings that require the cascade */ @Override public void cascadePerformRemoveIfRequired(Object object, UnitOfWorkImpl uow, Map visitedObjects){ Object cloneAttribute = null; cloneAttribute = getAttributeValueFromObject(object); if ( cloneAttribute == null ) { return; } ContainerPolicy cp = getContainerPolicy(); Object cloneObjectCollection = null; cloneObjectCollection = getRealCollectionAttributeValueFromObject(object, uow); Object cloneIter = cp.iteratorFor(cloneObjectCollection); while (cp.hasNext(cloneIter)) { Object objectToCascadeOn = cp.next(cloneIter, uow); if (objectToCascadeOn != null && (!visitedObjects.containsKey(objectToCascadeOn)) ) { visitedObjects.put(objectToCascadeOn, objectToCascadeOn); ObjectBuilder builder = getReferenceDescriptor(objectToCascadeOn.getClass(), uow).getObjectBuilder(); builder.cascadePerformRemove(objectToCascadeOn, uow, visitedObjects); } } }
/** * INTERNAL: * Cascade registerNew for Create through mappings that require the cascade */ @Override public void cascadeRegisterNewIfRequired(Object object, UnitOfWorkImpl uow, Map visitedObjects){ //aggregate objects are not registered but their mappings should be. Object cloneAttribute = null; cloneAttribute = getAttributeValueFromObject(object); if ( cloneAttribute == null ) { return; } ObjectBuilder builder = null; ContainerPolicy cp = getContainerPolicy(); Object cloneObjectCollection = null; cloneObjectCollection = getRealCollectionAttributeValueFromObject(object, uow); Object cloneIter = cp.iteratorFor(cloneObjectCollection); while (cp.hasNext(cloneIter)) { Object nextObject = cp.next(cloneIter, uow); if (nextObject != null && (! visitedObjects.containsKey(nextObject)) ) { visitedObjects.put(nextObject, nextObject); builder = getReferenceDescriptor(nextObject.getClass(), uow).getObjectBuilder(); builder.cascadeRegisterNewForCreate(nextObject, uow, visitedObjects); } } }
/** * INTERNAL: * Cascade discover and persist new objects during commit. */ @Override public void cascadeDiscoverAndPersistUnregisteredNewObjects(Object object, Map newObjects, Map unregisteredExistingObjects, Map visitedObjects, UnitOfWorkImpl uow, Set cascadeErrors) { Object cloneAttribute = getAttributeValueFromObject(object); if (cloneAttribute == null ) { return; } ContainerPolicy containerPolicy = getContainerPolicy(); Object cloneObjectCollection = getRealCollectionAttributeValueFromObject(object, uow); Object iterator = containerPolicy.iteratorFor(cloneObjectCollection); while (containerPolicy.hasNext(iterator)) { Object nextObject = containerPolicy.next(iterator, uow); if (nextObject != null) { ObjectBuilder builder = getReferenceDescriptor(nextObject.getClass(), uow).getObjectBuilder(); builder.cascadeDiscoverAndPersistUnregisteredNewObjects(nextObject, newObjects, unregisteredExistingObjects, visitedObjects, uow, cascadeErrors); } } }
/** * INTERNAL: * Cascade discover and persist new objects during commit. */ public void cascadeDiscoverAndPersistUnregisteredNewObjects(Object object, Map newObjects, Map unregisteredExistingObjects, Map visitedObjects, UnitOfWorkImpl uow) { Object cloneAttribute = getAttributeValueFromObject(object); if (cloneAttribute == null ) { return; } ContainerPolicy containerPolicy = getContainerPolicy(); Object cloneObjectCollection = getRealCollectionAttributeValueFromObject(object, uow); Object iterator = containerPolicy.iteratorFor(cloneObjectCollection); while (containerPolicy.hasNext(iterator)) { Object nextObject = containerPolicy.next(iterator, uow); if (nextObject != null) { ObjectBuilder builder = getReferenceDescriptor(nextObject.getClass(), uow).getObjectBuilder(); builder.cascadeDiscoverAndPersistUnregisteredNewObjects(nextObject, newObjects, unregisteredExistingObjects, visitedObjects, uow); } } }
/** * INTERNAL: * Cascade discover and persist new objects during commit. */ @Override public void cascadeDiscoverAndPersistUnregisteredNewObjects(Object object, Map newObjects, Map unregisteredExistingObjects, Map visitedObjects, UnitOfWorkImpl uow, Set cascadeErrors) { Object cloneAttribute = getAttributeValueFromObject(object); if (cloneAttribute == null ) { return; } ContainerPolicy containerPolicy = getContainerPolicy(); Object cloneObjectCollection = getRealCollectionAttributeValueFromObject(object, uow); Object iterator = containerPolicy.iteratorFor(cloneObjectCollection); while (containerPolicy.hasNext(iterator)) { Object nextObject = containerPolicy.next(iterator, uow); if (nextObject != null) { ObjectBuilder builder = getReferenceDescriptor(nextObject.getClass(), uow).getObjectBuilder(); builder.cascadeDiscoverAndPersistUnregisteredNewObjects(nextObject, newObjects, unregisteredExistingObjects, visitedObjects, uow, cascadeErrors); } } }
/** * INTERNAL: * Compare the attributes belonging to this mapping for the objects. */ public boolean compareObjects(Object object1, Object object2, AbstractSession session) { Object firstCollection = getRealCollectionAttributeValueFromObject(object1, session); Object secondCollection = getRealCollectionAttributeValueFromObject(object2, session); ContainerPolicy containerPolicy = getContainerPolicy(); if (containerPolicy.sizeFor(firstCollection) != containerPolicy.sizeFor(secondCollection)) { return false; } if (containerPolicy.sizeFor(firstCollection) == 0) { return true; } Object iterFirst = containerPolicy.iteratorFor(firstCollection); Object iterSecond = containerPolicy.iteratorFor(secondCollection); //loop through the elements in both collections and compare elements at the //same index. This ensures that a change to order registers as a change. while (containerPolicy.hasNext(iterFirst)) { //fetch the next object from the first iterator. Object firstAggregateObject = containerPolicy.next(iterFirst, session); Object secondAggregateObject = containerPolicy.next(iterSecond, session); //fetch the next object from the second iterator. //matched object found, break to outer FOR loop if (!getReferenceDescriptor().getObjectBuilder().compareObjects(firstAggregateObject, secondAggregateObject, session)) { return false; } } return true; }
Object cloneCollection = null; cloneCollection = getRealCollectionAttributeValueFromObject(clone, session); backupCollection = getRealCollectionAttributeValueFromObject(backup, session); return convertToChangeRecord(getRealCollectionAttributeValueFromObject(clone, session), owner, session);
/** * INTERNAL: * Merge changes from the source to the target object. * Simply replace the entire target collection. */ public void mergeIntoObject(Object target, boolean isTargetUnInitialized, Object source, MergeManager mergeManager) { if (!mergeManager.shouldCascadeReferences()) { // This is only going to happen on mergeClone, and we should not attempt to merge the reference return; } ContainerPolicy containerPolicy = getContainerPolicy(); Object valueOfSource = getRealCollectionAttributeValueFromObject(source, mergeManager.getSession()); Object valueOfTarget = containerPolicy.containerInstance(containerPolicy.sizeFor(valueOfSource)); for (Object sourceValuesIterator = containerPolicy.iteratorFor(valueOfSource); containerPolicy.hasNext(sourceValuesIterator);) { Object sourceValue = containerPolicy.next(sourceValuesIterator, mergeManager.getSession()); //CR#2896 - TW Object originalValue = getReferenceDescriptor(sourceValue.getClass(), mergeManager.getSession()).getObjectBuilder().buildNewInstance(); getReferenceDescriptor(sourceValue.getClass(), mergeManager.getSession()).getObjectBuilder().mergeIntoObject(originalValue, true, sourceValue, mergeManager); containerPolicy.addInto(originalValue, valueOfTarget, mergeManager.getSession()); } // Must re-set variable to allow for set method to re-morph changes if the collection is not being stored directly. setRealAttributeValueInObject(target, valueOfTarget); }