X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=binding%2Fmdsal-binding-api%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fmdsal%2Fbinding%2Fapi%2FNotificationService.java;h=6ff74ca34159dd8a8d2b5ff8e8b9b2f28500b282;hb=7ecf19a3c98c17b9f2d82b32fa9932f594e5a7ac;hp=8d49fb5e5db3f074c0340ed8b537b5b98fc337e4;hpb=a10c289bba4f28edb60fd555ee6d0f69cadd5c5f;p=mdsal.git
diff --git a/binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/NotificationService.java b/binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/NotificationService.java
index 8d49fb5e5d..6ff74ca341 100644
--- a/binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/NotificationService.java
+++ b/binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/NotificationService.java
@@ -7,8 +7,13 @@
*/
package org.opendaylight.mdsal.binding.api;
+import com.google.common.util.concurrent.MoreExecutors;
+import java.util.EventListener;
+import java.util.concurrent.Executor;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
+import org.opendaylight.yangtools.yang.binding.Notification;
import org.opendaylight.yangtools.yang.binding.NotificationListener;
/**
@@ -88,10 +93,58 @@ public interface NotificationService extends BindingService {
* {@link NotificationListener}. The listener is registered for all notifications present in
* the implemented interface.
*
- *
+ * @param NotificationListener 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.
*/
@NonNull ListenerRegistration registerNotificationListener(@NonNull T listener);
+
+ /**
+ * Registers a {@link Listener} to receive callbacks for {@link Notification}s of a particular type.
+ *
+ * @param Notification type
+ * @param type Notification type class
+ * @param listener The listener implementation that will receive notifications
+ * @param executor Executor to use for invoking the listener's methods
+ * @return a {@link Registration} instance that should be used to unregister the listener by invoking the
+ * {@link Registration#close()} method when no longer needed
+ */
+ @NonNull Registration registerListener(Class type, Listener listener,
+ Executor executor);
+
+ /**
+ * Registers a {@link Listener} to receive callbacks for {@link Notification}s of a particular type.
+ *
+ * @implSpec
+ * This method is equivalent to {@code registerListener(type, listener, MoreExecutors.directExecutor())}, i.e.
+ * the listener will be invoked on some implementation-specific thread.
+ *
+ * @param Notification type
+ * @param type Notification type class
+ * @param listener The listener implementation that will receive notifications
+ * @return a {@link Registration} instance that should be used to unregister the listener by invoking the
+ * {@link Registration#close()} method when no longer needed
+ */
+ default @NonNull Registration registerListener(final Class type,
+ final Listener listener) {
+ return registerListener(type, listener, MoreExecutors.directExecutor());
+ }
+
+ /**
+ * Interface for listeners on global (YANG 1.0) notifications. Such notifications are identified by their generated
+ * interface which extends {@link Notification}. Each listener instance can listen to only a single notification
+ * type.
+ *
+ * @param N Notification type
+ */
+ @FunctionalInterface
+ interface Listener extends EventListener {
+ /**
+ * Process a global notification.
+ *
+ * @param notification Notification body
+ */
+ void onNotification(@NonNull N notification);
+ }
}