Index: src/java/javax/jdo/listener/InstanceLifecycleEvent.java =================================================================== --- src/java/javax/jdo/listener/InstanceLifecycleEvent.java (revision 370868) +++ src/java/javax/jdo/listener/InstanceLifecycleEvent.java (working copy) @@ -97,15 +97,96 @@ } /** - * Returns the "other" object. - * @return the "other" object + * The source object of the Event. Although not deprecated, + * it is recommended that the the methods + * getPersistentInstance(boolean) and + * getDetachedInstance(boolean) be used instead. + * + * @return The persistent instance on any pre- callback except preAttach, + * or the detached instance for a postDetach or preAttach callback. + * + * @see #getPersistentInstance(boolean) + * @see #getDetachedInstance(boolean) + * @see "Section 12.15, Java Data Objects 2.0 Specification" + */ + public Object getSource() { + return super.getSource(); + } + + /** + * The target object of the Event. Although not deprecated, + * it is recommended that the the methods + * getPersistentInstance(boolean) and + * getDetachedInstance(boolean) be used instead. + * + * @return The detached instance for preDetach and postAttach, the persistent instance otherwises. + * * @since 2.0 + * @see #getPersistentInstance(boolean) + * @see #getDetachedInstance(boolean) + * @see "Section 12.15, Java Data Objects 2.0 Specification" */ public Object getTarget () { return target; } - + /** + * Returns the persistent instance involved in the event. + * + * @param isPreCallback true if the callback event is a pre- callback method, + * called before the triggering lifecycle event takes place; + * false if the the callback event is a post- callback method, + * called after the triggering lifecycle event took place. + * + * @return The persistent instance involved in the event, or null if there was none. + * + * @see "Section 12.15, Java Data Objects 2.0 Specification" + */ + public Object getPersistentInstance(boolean isPreCallback) { + switch (getEventType()) { + case DETACH: + return isPreCallback + ? getSource() // preDetach: source is persistent instance + : getTarget(); // postDetach: target is persistent instance + case ATTACH: + return isPreCallback + ? null // preAttach: no persistent instance yet + : getSource(); // postAttach: source is persistent instance + } + + // for all other events, source is persistent instance + return getSource(); + } + + /** + * Returns the detached instance involved in the event. + * + * @param isPreCallback true if the callback event is a pre- callback method, + * called before the triggering lifecycle event takes place; + * false if the the callback event is a post- callback method, + * called after the triggering lifecycle event took place. + * + * @return The detached instance involved in the event, or null if there was none. + * + * @see "Section 12.15, Java Data Objects 2.0 Specification" + */ + public Object getDetachedInstance(boolean isPreCallback) { + switch (getEventType()) { + case DETACH: + return isPreCallback + ? null // preDetach: no detached instance yet + : getSource(); // postDetach: source is detached instance + case ATTACH: + return isPreCallback + ? getSource() // preAttach: source is detached instance + : getTarget(); // postAttach: target is detached instance + } + + // for all other events, there is no detached instance + return null; + } + + /** * Serialization is not supported for InstanceLifecycleEvents. * param out the output stream * @since 2.0