/** * INTERNAL: * Clear changes in the ChangeListener of the clone */ public void updateWithChanges(Object clone, ObjectChangeSet objectChangeSet, UnitOfWorkImpl uow, ClassDescriptor descriptor) { if (objectChangeSet == null) { return; } Object backupClone = uow.getCloneMapping().get(clone); if (backupClone != null) { MergeManager mergeManager = new MergeManager(uow); mergeManager.setCascadePolicy(MergeManager.NO_CASCADE); descriptor.getObjectBuilder().mergeChangesIntoObject(backupClone, objectChangeSet, clone, mergeManager); } clearChanges(clone, uow, descriptor); }
/** * INTERNAL: * Revert the object's attributes from the parent. * This uses merging to merge the object changes. */ public Object revertObject(Object clone, int cascadeDepth) { if (clone == null) { return null; } //CR#2272 logDebugMessage(clone, "revert"); ClassDescriptor descriptor = getDescriptor(clone); ObjectBuilder builder = descriptor.getObjectBuilder(); Object implementation = builder.unwrapObject(clone, this); MergeManager manager = new MergeManager(this); manager.mergeOriginalIntoWorkingCopy(); manager.setCascadePolicy(cascadeDepth); try { manager.mergeChanges(implementation, null); } catch (RuntimeException exception) { return handleException(exception); } return clone; }
/** * INTERNAL: * Merge the attributes of the clone into the unit of work copy. */ public Object mergeClone(Object rmiClone, int cascadeDepth) { if (rmiClone == null) { return null; } //CR#2272 logDebugMessage(rmiClone, "merge_clone"); startOperationProfile(SessionProfiler.Merge); ObjectBuilder builder = getDescriptor(rmiClone).getObjectBuilder(); Object implementation = builder.unwrapObject(rmiClone, this); MergeManager manager = new MergeManager(this); manager.mergeCloneIntoWorkingCopy(); manager.setCascadePolicy(cascadeDepth); Object merged = null; try { merged = manager.mergeChanges(implementation, null); } catch (RuntimeException exception) { merged = handleException(exception); } endOperationProfile(SessionProfiler.Merge); return merged; }
Object implementation = builder.unwrapObject(rmiClone, this); MergeManager manager = new MergeManager(this); manager.mergeCloneWithReferencesIntoWorkingCopy(); manager.setCascadePolicy(cascadePolicy);
MergeManager manager = new MergeManager(this); manager.mergeOriginalIntoWorkingCopy(); manager.cascadeAllParts();
if (manager == null){ manager = new MergeManager(this);
setMergeManager(new MergeManager(this));
setMergeManager(new MergeManager(this));