X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-binding-api%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fbinding%2Fapi%2FNotificationService.java;h=015988e3d951327a519a4474afc5bfe7be48ebfa;hb=a81d98f692b80c45bce3fe6a87e731abfb012a9f;hp=6e8bda56d89e84e5fe0a7920ebcdfd07c2c5b84e;hpb=f9aae7377704eed8a43c9a984f585165042ce5f7;p=controller.git diff --git a/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/NotificationService.java b/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/NotificationService.java index 6e8bda56d8..015988e3d9 100644 --- a/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/NotificationService.java +++ b/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/NotificationService.java @@ -7,28 +7,116 @@ */ package org.opendaylight.controller.sal.binding.api; -import org.opendaylight.yangtools.concepts.Registration; +import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.binding.Notification; +/** + * Notification broker which allows clients to subscribe for and publish YANG-modeled notifications. + * + *
+ * Two styles of listeners are supported: + *
{ModelName}Listener
interface,
+ * which has dispatch methods for each defined notification. Methods are invoked based on notification type (class).
+ *
+ * A generic listener implements the {@link NotificationListener} interface which has one callback method
+ * onNotification
that is invoked for any notification type the listener is subscribed to.
+ *
+ * A generic listener is subscribed using the {@link #registerNotificationListener(Class, NotificationListener)} + * method by which you specify the type of notification to receive. A generic listener may be registered for + * multiple notification types via multiple subscriptions. + *
+ * Generic listeners allow for a more flexible approach, allowing you to subscribe for just + * one type of notification from a YANG model. You could also have a general subscription + * for all notification in the system via + *
+ * service.registerNotificationListener(Notification.class, listener); + *+ * + *
+ * A dispatch listener implements a YANG-generated module interface {ModuleName}Listener
+ * which handles all the notifications defined in the YANG model. Each notification type translates to
+ * a specific method of the form on{NotificationType}
on the generated interface.
+ * The generated interface also extends the
+ * {@link org.opendaylight.yangtools.yang.binding.NotificationListener} interface and implementations
+ * are registered using {@link #registerNotificationListener(org.opendaylight.yangtools.yang.binding.NotificationListener)}
+ * method.
+ *
+ *
+ * Lets assume we have following YANG model:
+ *
+ * {@code
+ * module example {
+ * ...
+ *
+ * notification start {
+ * ...
+ * }
+ *
+ * notification stop {
+ * ...
+ * }
+ * }
+ * }
+ *
+ * The generated interface will be:
+ * {@code
+ * public interface ExampleListener extends NotificationListener {
+ * void onStart(Start notification);
+ * void onStop(Stop notification);
+ * }
+ * }
+ * The following defines an implementation of the generated interface:
+ * {@code
+ * public class MyExampleListener implements ExampleListener {
+ * public void onStart(Start notification) {
+ * // do something
+ * }
+ *
+ * public void onStop(Stop notification) {
+ * // do something
+ * }
+ * }
+ * }
+ * The implementation is registered as follows:
+ * {@code
+ * MyExampleListener listener = new MyExampleListener();
+ * ListenerRegistrationonStart
method will be invoked when someone publishes a Start
notification and
+ * the onStop
method will be invoked when someone publishes a Stop
notification.
+ *
+ * @deprecated Please use {@link org.opendaylight.controller.md.sal.binding.api.NotificationService} instead.
+ */
+@Deprecated
public interface NotificationService extends BindingAwareService {
/**
- * Register a generic listener for specified notification type only.
+ * Registers a generic listener implementation for a specified notification type.
*
- * @param notificationType
- * @param listener
- * @return Registration for listener. To unregister listener invoke {@link Registration#close()} method.
+ * @param notificationType the YANG-generated interface of the notification type.
+ * @param listener the listener implementation that will receive notifications.
+ * @return a {@link ListenerRegistration} instance that should be used to unregister the listener
+ * by invoking the {@link ListenerRegistration#close()} method when no longer needed.
*/
-