/** * This method creates the object change set if necessary. It also creates/updates the change * record based on the new value. Object should check the if newValue and oldValue are identical. * If they are identical, do not create PropertyChangeEvent and call this method. */ public void internalPropertyChange(PropertyChangeEvent evt) { super.internalPropertyChange(evt); // Also need to raise the event in the parent, to create a change set for it. // Only raise the event in parent if something actually changed. if (this.objectChangeSet != null && this.parentListener != null) { if (evt.getSource() == owner) { this.parentListener.internalPropertyChange( new PropertyChangeEvent( evt.getSource(), parentAttributeName, evt.getOldValue(), evt.getNewValue())); } else { // the event's source is not the owner of this change tracking policy - this is a nested // aggregate change. this.parentListener.internalPropertyChange( new PropertyChangeEvent( owner, parentAttributeName, evt.getOldValue(), evt.getNewValue())); } } }