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=3723c70e8c371115e44b1bf5f0bbeaa9e7da225a;hpb=6b64494fd8e4654a298312afb4b8e6e827b75d5d;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 3723c70e8c..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,11 +7,116 @@ */ package org.opendaylight.controller.sal.binding.api; +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: + *

+ * + *

Generic Listener

+ *

+ * 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);
+ * 
+ * + *

Dispatch 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. + * + *

Dispatch Listener Example

+ *

+ * 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(); + * ListenerRegistration reg = service.registerNotificationListener( listener ); + * } + * The onStart 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 { + /** + * Registers a generic listener implementation for a specified notification type. + * + * @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. + */ + ListenerRegistration> registerNotificationListener( + Class notificationType, NotificationListener listener); - void addNotificationListener(Class notificationType, NotificationListener listener); - - void removeNotificationListener(Class notificationType, NotificationListener listener); + /** + * Registers a listener which implements a YANG-generated notification interface derived from + * {@link org.opendaylight.yangtools.yang.binding.NotificationListener}. + * The listener is registered for all notifications present in the implemented interface. + * + * @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. + */ + ListenerRegistration registerNotificationListener( + org.opendaylight.yangtools.yang.binding.NotificationListener listener); }