/** * INTERNAL: * Build a clone of the given element in a unitOfWork * @param element * @param unitOfWork * @param isExisting * @return */ public Object buildElementClone(Object attributeValue, Object parent, UnitOfWorkImpl unitOfWork, boolean isExisting){ Object aggregateClone = buildClonePart(attributeValue, unitOfWork, isExisting); if (aggregateClone != null) { ClassDescriptor descriptor = getReferenceDescriptor(aggregateClone, unitOfWork); descriptor.getObjectChangePolicy().setAggregateChangeListener(parent, aggregateClone, unitOfWork, descriptor, getAttributeName()); } return aggregateClone; }
/** * INTERNAL: * If required, get the targetVersion of the source object from the merge manager. * * Used with MapKeyContainerPolicy to abstract getting the target version of a source key * @return */ public Object getTargetVersionOfSourceObject(Object object, Object parent, MergeManager mergeManager){ if (mergeManager.getSession().isUnitOfWork()){ UnitOfWorkImpl uow = (UnitOfWorkImpl)mergeManager.getSession(); Object aggregateObject = buildClonePart(object, uow, uow.isOriginalNewObject(parent)); return aggregateObject; } return object; }
/** * INTERNAL: * If required, get the targetVersion of the source object from the merge manager. * * Used with MapKeyContainerPolicy to abstract getting the target version of a source key * @return */ @Override public Object getTargetVersionOfSourceObject(Object object, Object parent, MergeManager mergeManager, AbstractSession targetSession){ if (mergeManager.getSession().isUnitOfWork()){ UnitOfWorkImpl uow = (UnitOfWorkImpl)mergeManager.getSession(); Object aggregateObject = buildClonePart(object, parent, null, null, targetSession, uow.isOriginalNewObject(parent)); return aggregateObject; } return object; }
/** * INTERNAL: * If required, get the targetVersion of the source object from the merge manager. * * Used with MapKeyContainerPolicy to abstract getting the target version of a source key * @return */ @Override public Object getTargetVersionOfSourceObject(Object object, Object parent, MergeManager mergeManager, AbstractSession targetSession){ if (mergeManager.getSession().isUnitOfWork()){ UnitOfWorkImpl uow = (UnitOfWorkImpl)mergeManager.getSession(); Object aggregateObject = buildClonePart(object, parent, null, null, targetSession, uow.isOriginalNewObject(parent)); return aggregateObject; } return object; }
/** * INTERNAL: * Clone the attribute from the original and assign it to the clone. */ public void buildClone(Object original, Object clone, UnitOfWorkImpl unitOfWork) { Object attributeValue = getAttributeValueFromObject(original); Object aggregateClone = buildClonePart(original, attributeValue, unitOfWork); if (aggregateClone != null) { ClassDescriptor descriptor = getReferenceDescriptor(aggregateClone, unitOfWork); descriptor.getObjectChangePolicy().setAggregateChangeListener(clone, aggregateClone, unitOfWork, descriptor, getAttributeName()); } setAttributeValueInObject(clone, aggregateClone); }
/** * INTERNAL: * Build a clone of the given element in a unitOfWork * @param attributeValue * @param parent * @param parentCacheKey * @param refreshCascade * @param cloningSession * @param isExisting * @param isFromSharedCache * @return */ @Override public Object buildElementClone(Object attributeValue, Object parent, CacheKey parentCacheKey, Integer refreshCascade, AbstractSession cloningSession, boolean isExisting, boolean isFromSharedCache){ Object aggregateClone = buildClonePart(attributeValue, parent, parentCacheKey, refreshCascade, cloningSession, !isExisting); if (aggregateClone != null && cloningSession.isUnitOfWork()) { ClassDescriptor descriptor = getReferenceDescriptor(aggregateClone, cloningSession); descriptor.getObjectChangePolicy().setAggregateChangeListener(parent, aggregateClone, (UnitOfWorkImpl)cloningSession, descriptor, getAttributeName()); } return aggregateClone; }
/** * INTERNAL: * Build a clone of the given element in a unitOfWork * @param attributeValue * @param parent * @param parentCacheKey * @param refreshCascade * @param cloningSession * @param isExisting * @param isFromSharedCache * @return */ @Override public Object buildElementClone(Object attributeValue, Object parent, CacheKey parentCacheKey, Integer refreshCascade, AbstractSession cloningSession, boolean isExisting, boolean isFromSharedCache){ Object aggregateClone = buildClonePart(attributeValue, parent, parentCacheKey, refreshCascade, cloningSession, !isExisting); if (aggregateClone != null && cloningSession.isUnitOfWork()) { ClassDescriptor descriptor = getReferenceDescriptor(aggregateClone, cloningSession); descriptor.getObjectChangePolicy().setAggregateChangeListener(parent, aggregateClone, (UnitOfWorkImpl)cloningSession, descriptor, getAttributeName()); } return aggregateClone; }
/** * INTERNAL: * Clone the attribute from the original and assign it to the clone. */ @Override public void buildClone(Object original, CacheKey cacheKey, Object clone, Integer refreshCascade, AbstractSession cloningSession) { Object attributeValue = getAttributeValueFromObject(original); Object aggregateClone = buildClonePart(original, clone, cacheKey, attributeValue, refreshCascade, cloningSession); if (aggregateClone != null && cloningSession.isUnitOfWork()) { ClassDescriptor descriptor = getReferenceDescriptor(aggregateClone, cloningSession); descriptor.getObjectChangePolicy().setAggregateChangeListener(clone, aggregateClone, (UnitOfWorkImpl)cloningSession, descriptor, getAttributeName()); } setAttributeValueInObject(clone, aggregateClone); }
/** * INTERNAL: * Clone the attribute from the original and assign it to the clone. */ @Override public void buildClone(Object original, CacheKey cacheKey, Object clone, Integer refreshCascade, AbstractSession cloningSession) { Object attributeValue = getAttributeValueFromObject(original); Object aggregateClone = buildClonePart(original, clone, cacheKey, attributeValue, refreshCascade, cloningSession); if (aggregateClone != null && cloningSession.isUnitOfWork()) { ClassDescriptor descriptor = getReferenceDescriptor(aggregateClone, cloningSession); descriptor.getObjectChangePolicy().setAggregateChangeListener(clone, aggregateClone, (UnitOfWorkImpl)cloningSession, descriptor, getAttributeName()); } setAttributeValueInObject(clone, aggregateClone); }