/** * Check to ensure the class meets all the conditions necessary to enable change tracking * This could occur either if the class already has change tracking implemented or if the * class is capable of having change tracking woven based on the descriptor. */ protected boolean canChangeTrackingBeEnabled(ClassDescriptor descriptor, MetadataClass clz, boolean globalWeaveChangeTracking) { if (!globalWeaveChangeTracking) { return false; } // If the descriptor was configured to not use change tracking then disable it, also enable if configure explictly. if (descriptor.getObjectChangePolicyInternal() != null) { if (descriptor.getObjectChangePolicyInternal().isDeferredChangeDetectionPolicy()) { return false; } else if (descriptor.getObjectChangePolicyInternal().isObjectChangeTrackingPolicy()) { // Include object and attribute. return true; } } boolean canWeaveChangeTracking = descriptor.supportsChangeTracking(session.getProject()); if (!canWeaveChangeTracking) { log(SessionLog.CONFIG, CANNOT_WEAVE_CHANGETRACKING, new Object[]{descriptor.getJavaClassName()}); } return canWeaveChangeTracking; }
if (attributeValue == null) { Object container = containerPolicy.containerInstance(1); if ((this.getDescriptor().getObjectChangePolicy().isObjectChangeTrackingPolicy()) && ((clone != null) && (((ChangeTracker)clone)._persistence_getPropertyChangeListener() != null)) && (container instanceof CollectionChangeTracker)) { ((CollectionChangeTracker)container).setTrackedAttributeName(this.getAttributeName()); ((CollectionChangeTracker)container)._persistence_setPropertyChangeListener(((ChangeTracker)clone)._persistence_getPropertyChangeListener()); containerPolicy.addNextValueFromIteratorInto(valuesIterator, clone, clonedAttributeValue, this, unitOfWork, isExisting); if ((this.getDescriptor().getObjectChangePolicy().isObjectChangeTrackingPolicy()) && ((clone != null) && (((ChangeTracker)clone)._persistence_getPropertyChangeListener() != null)) && (clonedAttributeValue instanceof CollectionChangeTracker)) { ((CollectionChangeTracker)clonedAttributeValue).setTrackedAttributeName(this.getAttributeName()); ((CollectionChangeTracker)clonedAttributeValue)._persistence_setPropertyChangeListener(((ChangeTracker)clone)._persistence_getPropertyChangeListener());
if (attributeValue == null) { Object container = containerPolicy.containerInstance(1); if (cloningSession.isUnitOfWork() && (this.getDescriptor().getObjectChangePolicy().isObjectChangeTrackingPolicy()) && ((clone != null) && (((ChangeTracker)clone)._persistence_getPropertyChangeListener() != null)) && (container instanceof CollectionChangeTracker)) { ((CollectionChangeTracker)container).setTrackedAttributeName(this.getAttributeName()); ((CollectionChangeTracker)container)._persistence_setPropertyChangeListener(((ChangeTracker)clone)._persistence_getPropertyChangeListener()); containerPolicy.addNextValueFromIteratorInto(valuesIterator, clone, cacheKey, clonedAttributeValue, this, refreshCascade, cloningSession, isExisting, isFromSharedCache); if (cloningSession.isUnitOfWork() && (this.getDescriptor().getObjectChangePolicy().isObjectChangeTrackingPolicy()) && ((clone != null) && (((ChangeTracker)clone)._persistence_getPropertyChangeListener() != null)) && (clonedAttributeValue instanceof CollectionChangeTracker)) { ((CollectionChangeTracker)clonedAttributeValue).setTrackedAttributeName(this.getAttributeName()); ((CollectionChangeTracker)clonedAttributeValue)._persistence_setPropertyChangeListener(((ChangeTracker)clone)._persistence_getPropertyChangeListener());
if (attributeValue == null) { Object container = containerPolicy.containerInstance(1); if (cloningSession.isUnitOfWork() && (this.getDescriptor().getObjectChangePolicy().isObjectChangeTrackingPolicy()) && ((clone != null) && (((ChangeTracker)clone)._persistence_getPropertyChangeListener() != null)) && (container instanceof CollectionChangeTracker)) { ((CollectionChangeTracker)container).setTrackedAttributeName(this.getAttributeName()); ((CollectionChangeTracker)container)._persistence_setPropertyChangeListener(((ChangeTracker)clone)._persistence_getPropertyChangeListener()); containerPolicy.addNextValueFromIteratorInto(valuesIterator, clone, cacheKey, clonedAttributeValue, this, refreshCascade, cloningSession, isExisting, isFromSharedCache); if (cloningSession.isUnitOfWork() && (this.getDescriptor().getObjectChangePolicy().isObjectChangeTrackingPolicy()) && ((clone != null) && (((ChangeTracker)clone)._persistence_getPropertyChangeListener() != null)) && (clonedAttributeValue instanceof CollectionChangeTracker)) { ((CollectionChangeTracker)clonedAttributeValue).setTrackedAttributeName(this.getAttributeName()); ((CollectionChangeTracker)clonedAttributeValue)._persistence_setPropertyChangeListener(((ChangeTracker)clone)._persistence_getPropertyChangeListener());
/** * INTERNAL: * Merge changes from the source to the target object. This merge is only called when a changeSet for the target * does not exist or the target is uninitialized */ public void mergeIntoObject(Object target, boolean isTargetUnInitialized, Object source, MergeManager mergeManager) { // If merge into the unit of work, must only merge and raise the event is the value changed. if ((mergeManager.shouldMergeCloneIntoWorkingCopy() || mergeManager.shouldMergeCloneWithReferencesIntoWorkingCopy()) && this.descriptor.getObjectChangePolicy().isObjectChangeTrackingPolicy()) { // if it didn't change then there will be no event Object attributeValue = getAttributeValueFromObject(source); Object targetAttribute = getAttributeValueFromObject(target); if (!compareObjectValues(attributeValue, targetAttribute, mergeManager.getSession())) { setAttributeValueInObject(target, buildCloneValue(attributeValue, mergeManager.getSession())); //set the value first, if the owner is new ( or aggregate) the change set may be created directly //from the target. this.descriptor.getObjectChangePolicy().raiseInternalPropertyChangeEvent(target, getAttributeName(), targetAttribute, attributeValue); } } else { setAttributeValueInObject(target, buildCloneValue(getAttributeValueFromObject(source), mergeManager.getSession())); } }
if (this.descriptor.getObjectChangePolicy().isObjectChangeTrackingPolicy()) { setRealAttributeValueInObject(target, attributeValue); if (this.descriptor.getObjectChangePolicy().isObjectChangeTrackingPolicy()) { for (Enumeration keys = targetRow.keys(); keys.hasMoreElements(); ){ Object field = keys.nextElement();
/** * INTERNAL: * Merge changes from the source to the target object. This merge is only called when a changeSet for the target * does not exist or the target is uninitialized */ @Override public void mergeIntoObject(Object target, boolean isTargetUnInitialized, Object source, MergeManager mergeManager, AbstractSession targetSession) { // If merge into the unit of work, must only merge and raise the event is the value changed. if ((mergeManager.shouldMergeCloneIntoWorkingCopy() || mergeManager.shouldMergeCloneWithReferencesIntoWorkingCopy()) && !mergeManager.isForRefresh() && this.descriptor.getObjectChangePolicy().isObjectChangeTrackingPolicy()) { // if it didn't change then there will be no event Object attributeValue = getAttributeValueFromObject(source); Object targetAttribute = getAttributeValueFromObject(target); if (!compareObjectValues(attributeValue, targetAttribute, mergeManager.getSession())) { setAttributeValueInObject(target, buildCloneValue(attributeValue, mergeManager.getSession())); //set the value first, if the owner is new ( or aggregate) the change set may be created directly //from the target. this.descriptor.getObjectChangePolicy().raiseInternalPropertyChangeEvent(target, getAttributeName(), targetAttribute, attributeValue); } } else { setAttributeValueInObject(target, buildCloneValue(getAttributeValueFromObject(source), mergeManager.getSession())); } }
if (this.descriptor.getObjectChangePolicy().isObjectChangeTrackingPolicy()) { setRealAttributeValueInObject(target, attributeValue); if (this.descriptor.getObjectChangePolicy().isObjectChangeTrackingPolicy()) { for (Enumeration keys = targetRow.keys(); keys.hasMoreElements(); ){ Object field = keys.nextElement();
if (this.descriptor.getObjectChangePolicy().isObjectChangeTrackingPolicy()) { setRealAttributeValueInObject(target, attributeValue); if (this.descriptor.getObjectChangePolicy().isObjectChangeTrackingPolicy()) { for (Enumeration keys = targetRow.keys(); keys.hasMoreElements(); ){ Object field = keys.nextElement();
/** * INTERNAL: * Merge changes from the source to the target object. This merge is only called when a changeSet for the target * does not exist or the target is uninitialized */ @Override public void mergeIntoObject(Object target, boolean isTargetUnInitialized, Object source, MergeManager mergeManager, AbstractSession targetSession) { // If merge into the unit of work, must only merge and raise the event is the value changed. if ((mergeManager.shouldMergeCloneIntoWorkingCopy() || mergeManager.shouldMergeCloneWithReferencesIntoWorkingCopy()) && !mergeManager.isForRefresh() && this.descriptor.getObjectChangePolicy().isObjectChangeTrackingPolicy()) { // if it didn't change then there will be no event Object attributeValue = getAttributeValueFromObject(source); Object targetAttribute = getAttributeValueFromObject(target); if (!compareObjectValues(attributeValue, targetAttribute, mergeManager.getSession())) { setAttributeValueInObject(target, buildCloneValue(attributeValue, mergeManager.getSession())); //set the value first, if the owner is new ( or aggregate) the change set may be created directly //from the target. this.descriptor.getObjectChangePolicy().raiseInternalPropertyChangeEvent(target, getAttributeName(), targetAttribute, attributeValue); } } else { setAttributeValueInObject(target, buildCloneValue(getAttributeValueFromObject(source), mergeManager.getSession())); } }
if ((this.getDescriptor().getObjectChangePolicy().isObjectChangeTrackingPolicy()) && (target instanceof ChangeTracker) && (((ChangeTracker)target)._persistence_getPropertyChangeListener() != null)) { fireChangeEvents = true;
if ((this.getDescriptor().getObjectChangePolicy().isObjectChangeTrackingPolicy()) && (target instanceof ChangeTracker) && (((ChangeTracker)target)._persistence_getPropertyChangeListener() != null)) { fireChangeEvents = true;
if ((this.getDescriptor().getObjectChangePolicy().isObjectChangeTrackingPolicy()) && (target instanceof ChangeTracker) && (((ChangeTracker)target)._persistence_getPropertyChangeListener() != null)) { fireChangeEvents = true;
if ((this.mapping.getDescriptor().getObjectChangePolicy().isObjectChangeTrackingPolicy()) && (((ChangeTracker)clone)._persistence_getPropertyChangeListener() != null) && (container instanceof CollectionChangeTracker) ) {
if ((this.mapping.getDescriptor().getObjectChangePolicy().isObjectChangeTrackingPolicy()) && (((ChangeTracker)clone)._persistence_getPropertyChangeListener() != null) && (container instanceof CollectionChangeTracker) ) {
if (target == source && targetValue != valueOfSource && (this.descriptor.getObjectChangePolicy().isObjectChangeTrackingPolicy()) && (target instanceof ChangeTracker) && (((ChangeTracker)target)._persistence_getPropertyChangeListener() != null)) { ObjectChangeListener listener = (ObjectChangeListener)((ChangeTracker)target)._persistence_getPropertyChangeListener(); if (listener != null){ && this.descriptor.getObjectChangePolicy().isObjectChangeTrackingPolicy()) {
if ((this.mapping.getDescriptor().getObjectChangePolicy().isObjectChangeTrackingPolicy()) && (((ChangeTracker)clone)._persistence_getPropertyChangeListener() != null) && (container instanceof CollectionChangeTracker) ) {
if (target == source && targetValue != valueOfSource && (this.descriptor.getObjectChangePolicy().isObjectChangeTrackingPolicy()) && (target instanceof ChangeTracker) && (((ChangeTracker)target)._persistence_getPropertyChangeListener() != null)) { ObjectChangeListener listener = (ObjectChangeListener)((ChangeTracker)target)._persistence_getPropertyChangeListener(); if (listener != null){ && this.descriptor.getObjectChangePolicy().isObjectChangeTrackingPolicy()) {
&& this.descriptor.getObjectChangePolicy().isObjectChangeTrackingPolicy()) {
boolean fireCollectionChangeEvents = false; boolean firePropertyChangeEvent = false; if ((this.descriptor.getObjectChangePolicy().isObjectChangeTrackingPolicy()) && (target instanceof ChangeTracker) && (((ChangeTracker)target)._persistence_getPropertyChangeListener() != null)) { if(this.listOrderField == null) { fireCollectionChangeEvents = true;