Bug 6995 - Change event notification subscription usability PART1
[netconf.git] / restconf / sal-rest-connector / src / main / java / org / opendaylight / netconf / sal / streams / listeners / Notificator.java
index 0bd38652b766634f4b28088a4210d0c005beb2e7..c3746df5974f754cda8a1d8fd6ffd803354d977e 100644 (file)
@@ -14,7 +14,9 @@ import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
+import org.opendaylight.yang.gen.v1.urn.sal.restconf.event.subscription.rev140708.NotificationOutputTypeGrouping.NotificationOutputType;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
+import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -25,8 +27,9 @@ import org.slf4j.LoggerFactory;
  */
 public class Notificator {
 
-    private static Map<String, ListenerAdapter> listenersByStreamName = new ConcurrentHashMap<>();
-    private static Map<String, List<NotificationListenerAdapter>> notificationListenersByStreamName = new ConcurrentHashMap<>();
+    private static Map<String, ListenerAdapter> dataChangeListener = new ConcurrentHashMap<>();
+    private static Map<String, List<NotificationListenerAdapter>> notificationListenersByStreamName =
+            new ConcurrentHashMap<>();
 
     private static final Logger LOG = LoggerFactory.getLogger(Notificator.class);
     private static final Lock lock = new ReentrantLock();
@@ -38,7 +41,7 @@ public class Notificator {
      * Returns list of all stream names
      */
     public static Set<String> getStreamNames() {
-        return listenersByStreamName.keySet();
+        return dataChangeListener.keySet();
     }
 
     /**
@@ -49,7 +52,7 @@ public class Notificator {
      * @return {@link ListenerAdapter} specified by stream name.
      */
     public static ListenerAdapter getListenerFor(final String streamName) {
-        return listenersByStreamName.get(streamName);
+        return dataChangeListener.get(streamName);
     }
 
     /**
@@ -59,23 +62,28 @@ public class Notificator {
      * @return True if the listener exist, false otherwise.
      */
     public static boolean existListenerFor(final String streamName) {
-        return listenersByStreamName.containsKey(streamName);
+        return dataChangeListener.containsKey(streamName);
     }
 
     /**
-     * Creates new {@link ListenerAdapter} listener from {@link YangInstanceIdentifier} path and stream name.
+     * Creates new {@link ListenerAdapter} listener from
+     * {@link YangInstanceIdentifier} path and stream name.
      *
      * @param path
      *            Path to data in data repository.
      * @param streamName
      *            The name of the stream.
-     * @return New {@link ListenerAdapter} listener from {@link YangInstanceIdentifier} path and stream name.
+     * @param outputType
+     *            - Spcific type of output for notifications - XML or JSON
+     * @return New {@link ListenerAdapter} listener from
+     *         {@link YangInstanceIdentifier} path and stream name.
      */
-    public static ListenerAdapter createListener(final YangInstanceIdentifier path, final String streamName) {
-        final ListenerAdapter listener = new ListenerAdapter(path, streamName);
+    public static ListenerAdapter createListener(final YangInstanceIdentifier path, final String streamName,
+            final NotificationOutputType outputType) {
+        final ListenerAdapter listener = new ListenerAdapter(path, streamName, outputType);
         try {
             lock.lock();
-            listenersByStreamName.put(streamName, listener);
+            dataChangeListener.put(streamName, listener);
         } finally {
             lock.unlock();
         }
@@ -108,7 +116,7 @@ public class Notificator {
      * Removes all listeners.
      */
     public static void removeAllListeners() {
-        for (final ListenerAdapter listener : listenersByStreamName.values()) {
+        for (final ListenerAdapter listener : dataChangeListener.values()) {
             try {
                 listener.close();
             } catch (final Exception e) {
@@ -117,7 +125,7 @@ public class Notificator {
         }
         try {
             lock.lock();
-            listenersByStreamName = new ConcurrentHashMap<>();
+            dataChangeListener = new ConcurrentHashMap<>();
         } finally {
             lock.unlock();
         }
@@ -150,7 +158,7 @@ public class Notificator {
             }
             try {
                 lock.lock();
-                listenersByStreamName.remove(listener.getStreamName());
+                dataChangeListener.remove(listener.getStreamName());
             } finally {
                 lock.unlock();
             }
@@ -169,6 +177,17 @@ public class Notificator {
 
     }
 
+    /**
+     * Prepare listener for notification ({@link NotificationDefinition})
+     *
+     * @param paths
+     *            - paths of notifications
+     * @param streamName
+     *            - name of stream (generated by paths)
+     * @param outputType
+     *            - type of output for onNotification - XML or JSON
+     * @return List of {@link NotificationListenerAdapter} by paths
+     */
     public static List<NotificationListenerAdapter> createNotificationListener(final List<SchemaPath> paths,
             final String streamName, final String outputType) {
         final List<NotificationListenerAdapter> listListeners = new ArrayList<>();