Rename DOMDataTreeChangeService
[mdsal.git] / dom / mdsal-dom-api / src / main / java / org / opendaylight / mdsal / dom / api / DOMDataBroker.java
index 6654fbdab5bd3fd46df5784281325e4c191b4759..34f822c3faa991c893519df6909f8f97b82e2cbc 100644 (file)
@@ -93,4 +93,42 @@ public interface DOMDataBroker extends DOMService<DOMDataBroker, DOMDataBroker.E
          */
         Registration registerCommitCohort(DOMDataTreeIdentifier path, DOMDataTreeCommitCohort cohort);
     }
+
+    /**
+     * An {@link Extension} which allows users to register for changes to a subtree.
+     */
+    interface DataTreeChangeExtension extends Extension {
+        /**
+         * Registers a {@link DOMDataTreeChangeListener} to receive notifications when data changes under a given path
+         * in the conceptual data tree.
+         *
+         * <p>
+         * You are able to register for notifications for any node or subtree which can be represented using
+         * {@link DOMDataTreeIdentifier}.
+         *
+         * <p>
+         * You are able to register for data change notifications for a subtree or leaf even if it does not exist. You
+         * will receive notification once that node is created.
+         *
+         * <p>
+         * If there is any pre-existing data in the data tree for the path for which you are registering, you will
+         * receive an initial data change event, which will contain all pre-existing data, marked as created.
+         *
+         * <p>
+         * This method returns a {@link Registration} object. To "unregister" your listener for changes call
+         * the {@link Registration#close()} method on the returned object.
+         *
+         * <p>
+         * You MUST explicitly unregister your listener when you no longer want to receive notifications. This is
+         * especially true in OSGi environments, where failure to do so during bundle shutdown can lead to stale
+         * listeners being still registered.
+         *
+         * @param treeId Data tree identifier of the subtree which should be watched for changes.
+         * @param listener Listener instance which is being registered
+         * @return A {@link Registration} object, which may be used to unregister your listener using
+         *         {@link Registration#close()} to stop delivery of change events.
+         * @throws NullPointerException if any of the arguments is {@code null}
+         */
+        Registration registerDataTreeChangeListener(DOMDataTreeIdentifier treeId, DOMDataTreeChangeListener listener);
+    }
 }