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