/** * PUBLIC: * Return this objects ObjectChangePolicy. */ public ObjectChangePolicy getObjectChangePolicy() { // part of fix for 4410581: project xml must save change policy // if no change-policy XML element, field is null: lazy-init to default if (changePolicy == null) { changePolicy = new DeferredChangeDetectionPolicy(); } return changePolicy; }
/** * INTERNAL: * This method is used to revert an object within the unit of work * @param cloneMapping may not be the same as what is in the uow */ public void revertChanges(Object clone, ClassDescriptor descriptor, UnitOfWorkImpl uow, Map cloneMapping, boolean forRefresh) { cloneMapping.put(clone, buildBackupClone(clone, descriptor.getObjectBuilder(), uow)); clearChanges(clone, uow, descriptor, forRefresh); }
/** * INTERNAL: * PERF: Calculate change for the new object, avoids check for new since already know. */ public ObjectChangeSet calculateChangesForNewObject(Object clone, UnitOfWorkChangeSet changeSet, UnitOfWorkImpl unitOfWork, ClassDescriptor descriptor, boolean shouldRaiseEvent) { return calculateChanges(clone, null, true, changeSet, unitOfWork, descriptor, shouldRaiseEvent); }
/** * INTERNAL: * Create ObjectChangeSet */ public ObjectChangeSet createObjectChangeSet(Object clone, Object backUp, org.eclipse.persistence.internal.sessions.UnitOfWorkChangeSet changeSet, boolean isNew, AbstractSession session, ClassDescriptor descriptor) { return this.createObjectChangeSetThroughComparison(clone, backUp, changeSet, isNew, session, descriptor); }
/** * 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) { // If new just re-build the backup clone, otherwise use MergeManager (should be a special merge though, not the default constructor like it is...) if (objectChangeSet.isNew()) { uow.getCloneMapping().put(clone, descriptor.getObjectBuilder().buildBackupClone(clone, uow)); } else { MergeManager mergeManager = new MergeManager(uow); mergeManager.setCascadePolicy(MergeManager.NO_CASCADE); descriptor.getObjectBuilder().mergeChangesIntoObject(backupClone, objectChangeSet, clone, mergeManager); } } clearChanges(clone, uow, descriptor); }
ObjectChangeSet changes = createObjectChangeSet(clone, backUp, changeSet, isNew, unitOfWork, descriptor); if(changes.hasChanges() && descriptor.hasMappingsPostCalculateChanges() && ! changes.isNew() && ! unitOfWork.getCommitManager().isActive() && !unitOfWork.isNestedUnitOfWork()) {
/** * INTERNAL: * Create ObjectChangeSet */ public ObjectChangeSet createObjectChangeSet(Object clone, Object backUp, org.eclipse.persistence.internal.sessions.UnitOfWorkChangeSet changeSet, boolean isNew, AbstractSession session, ClassDescriptor descriptor) { return this.createObjectChangeSetThroughComparison(clone, backUp, changeSet, isNew, session, descriptor); }
/** * 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) { // If new just re-build the backup clone, otherwise use MergeManager (should be a special merge though, not the default constructor like it is...) if (objectChangeSet.isNew()) { uow.getCloneMapping().put(clone, descriptor.getObjectBuilder().buildBackupClone(clone, uow)); } else { MergeManager mergeManager = new MergeManager(uow); mergeManager.setCascadePolicy(MergeManager.NO_CASCADE); descriptor.getObjectBuilder().mergeChangesIntoObject(backupClone, objectChangeSet, clone, mergeManager, mergeManager.getSession()); } } clearChanges(clone, uow, descriptor, false); }
ObjectChangeSet changes = createObjectChangeSet(clone, backUp, changeSet, isNew, unitOfWork, descriptor); if(changes.hasChanges() && descriptor.hasMappingsPostCalculateChanges() && ! changes.isNew() && ! unitOfWork.getCommitManager().isActive() && !unitOfWork.isNestedUnitOfWork()) {
/** * PUBLIC: * Return this objects ObjectChangePolicy. */ public ObjectChangePolicy getObjectChangePolicy() { // part of fix for 4410581: project xml must save change policy // if no change-policy XML element, field is null: lazy-init to default if (changePolicy == null) { changePolicy = new DeferredChangeDetectionPolicy(); } return changePolicy; }
/** * INTERNAL: * This method is used to revert an object within the unit of work * @param cloneMapping may not be the same as what is in the uow */ public void revertChanges(Object clone, ClassDescriptor descriptor, UnitOfWorkImpl uow, Map cloneMapping) { cloneMapping.put(clone, buildBackupClone(clone, descriptor.getObjectBuilder(), uow)); clearChanges(clone, uow, descriptor); }
/** * INTERNAL: * PERF: Calculate change for the new object, avoids check for new since already know. */ public ObjectChangeSet calculateChangesForNewObject(Object clone, UnitOfWorkChangeSet changeSet, UnitOfWorkImpl unitOfWork, ClassDescriptor descriptor, boolean shouldRaiseEvent) { return calculateChanges(clone, null, true, changeSet, unitOfWork, descriptor, shouldRaiseEvent); }
/** * INTERNAL: * Create ObjectChangeSet */ public ObjectChangeSet createObjectChangeSet(Object clone, Object backUp, org.eclipse.persistence.internal.sessions.UnitOfWorkChangeSet changeSet, boolean isNew, AbstractSession session, ClassDescriptor descriptor) { return this.createObjectChangeSetThroughComparison(clone, backUp, changeSet, isNew, session, descriptor); }
/** * 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) { // If new just re-build the backup clone, otherwise use MergeManager (should be a special merge though, not the default constructor like it is...) if (objectChangeSet.isNew()) { uow.getCloneMapping().put(clone, descriptor.getObjectBuilder().buildBackupClone(clone, uow)); } else { MergeManager mergeManager = new MergeManager(uow); mergeManager.setCascadePolicy(MergeManager.NO_CASCADE); descriptor.getObjectBuilder().mergeChangesIntoObject(backupClone, objectChangeSet, clone, mergeManager, mergeManager.getSession()); } } clearChanges(clone, uow, descriptor, false); }
ObjectChangeSet changes = createObjectChangeSet(clone, backUp, changeSet, isNew, unitOfWork, descriptor); if (changes.hasChanges()) { if (descriptor.hasMappingsPostCalculateChanges() && ! changes.isNew() && ! unitOfWork.getCommitManager().isActive() && !unitOfWork.isNestedUnitOfWork()) {
/** * PUBLIC: * Return this objects ObjectChangePolicy. */ public ObjectChangePolicy getObjectChangePolicy() { // part of fix for 4410581: project xml must save change policy // if no change-policy XML element, field is null: lazy-init to default if (changePolicy == null) { changePolicy = new DeferredChangeDetectionPolicy(); } return changePolicy; }
/** * INTERNAL: * This method is used to revert an object within the unit of work * @param cloneMapping may not be the same as what is in the uow */ public void revertChanges(Object clone, ClassDescriptor descriptor, UnitOfWorkImpl uow, Map cloneMapping, boolean forRefresh) { cloneMapping.put(clone, buildBackupClone(clone, descriptor.getObjectBuilder(), uow)); clearChanges(clone, uow, descriptor, forRefresh); }
/** * INTERNAL: * PERF: Calculate change for the new object, avoids check for new since already know. */ public ObjectChangeSet calculateChangesForNewObject(Object clone, UnitOfWorkChangeSet changeSet, UnitOfWorkImpl unitOfWork, ClassDescriptor descriptor, boolean shouldRaiseEvent) { return calculateChanges(clone, null, true, changeSet, unitOfWork, descriptor, shouldRaiseEvent); }
/** * INTERNAL: */ public void process(MetadataDescriptor descriptor) { // Set the change tracking flag on the Metadata Descriptor. descriptor.setHasChangeTracking(); // Process the change tracking metadata. ClassDescriptor classDescriptor = descriptor.getClassDescriptor(); if (m_type == null || m_type.equals(ChangeTrackingType.AUTO.name())) { // By setting the policy to null, this will unset any global // settings. EclipseLink will then determine the change tracking // policy at runtime. classDescriptor.setObjectChangePolicy(null); } else if (m_type.equals(ChangeTrackingType.ATTRIBUTE.name())) { classDescriptor.setObjectChangePolicy(new AttributeChangeTrackingPolicy()); } else if (m_type.equals(ChangeTrackingType.OBJECT.name())) { classDescriptor.setObjectChangePolicy(new ObjectChangeTrackingPolicy()); } else if (m_type.equals(ChangeTrackingType.DEFERRED.name())) { classDescriptor.setObjectChangePolicy(new DeferredChangeDetectionPolicy()); } }
/** * INTERNAL: * PERF: Calculate change for the new object, avoids check for new since already know. */ public ObjectChangeSet calculateChangesForExistingObject(Object clone, UnitOfWorkChangeSet changeSet, UnitOfWorkImpl unitOfWork, ClassDescriptor descriptor, boolean shouldRaiseEvent) { return calculateChanges(clone, unitOfWork.getBackupClone(clone, descriptor), false, changeSet, unitOfWork, descriptor, shouldRaiseEvent); }