Migrate OSGI compendium reference
[controller.git] / opendaylight / md-sal / sal-binding-api / src / main / java / org / opendaylight / controller / sal / binding / api / NotificationProviderService.java
index 86c9eebecd0b9b17b78c957e7ef30ecead94a0a5..ac2bb6477696cd25083edecf7ff2a74de0b381ab 100644 (file)
@@ -7,9 +7,67 @@
  */
 package org.opendaylight.controller.sal.binding.api;
 
+import java.util.EventListener;
+import java.util.concurrent.ExecutorService;
+import org.opendaylight.controller.md.sal.common.api.notify.NotificationPublishService;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.yang.binding.Notification;
 
-public interface NotificationProviderService extends NotificationService {
+/**
+ * Interface for a notification service that provides publish/subscribe capabilities for YANG
+ * modeled notifications. This interface is a combination of the {@link NotificationService} and
+ * {@link NotificationPublishService} interfaces.
+ *
+ * @deprecated Please use {@link org.opendaylight.mdsal.binding.api.NotificationPublishService}.
+ */
+@Deprecated(forRemoval = true)
+public interface NotificationProviderService extends NotificationService, NotificationPublishService<Notification> {
+
+    @Override
+    void publish(Notification notification);
+
+    @Override
+    void publish(Notification notification, ExecutorService executor);
+
+    /**
+     * Registers a listener to be notified about notification subscriptions. This
+     * enables a component to know when there is a notification listener subscribed
+     * for a particular notification type.
+     *
+     * <p>
+     * On registration of this listener, the
+     * {@link NotificationInterestListener#onNotificationSubscribtion(Class)} method
+     * will be invoked for every notification type that currently has a notification listener
+     * subscribed.
+     *
+     * @param interestListener the listener that will be notified when subscriptions
+     *                         for new notification types occur.
+     * @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<NotificationInterestListener> registerInterestListener(
+            NotificationInterestListener interestListener);
+
+    /**
+     * Interface for a listener interested in being notified about notification subscriptions.
+     */
+    interface NotificationInterestListener extends EventListener {
 
-    void notify(Notification notification);
+        /**
+         * Callback that is invoked when a notification listener subscribes for a particular notification type.
+         *
+         * <p>
+         * This method is only called for the first subscription that occurs for a
+         * particular notification type. Subsequent subscriptions for the same
+         * notification type do not trigger invocation of this method.
+         *
+         * <p>
+         * <b>Note:</b>This callback is delivered from thread not owned by this listener,
+         * all processing should be as fast as possible and implementations should
+         * not do any blocking calls or block this thread.
+         *
+         * @param notificationType the notification type for the subscription that occurred.
+         */
+        void onNotificationSubscribtion(Class<? extends Notification> notificationType);
+    }
 }