1 package org.opendaylight.controller.sal.streams.listeners;
4 import java.util.concurrent.ConcurrentHashMap;
5 import java.util.concurrent.locks.Lock;
6 import java.util.concurrent.locks.ReentrantLock;
8 import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier;
10 public class Notificator {
12 private static Map<String, ListenerAdapter> listenersByStreamName = new ConcurrentHashMap<>();
13 private static Map<InstanceIdentifier, ListenerAdapter> listenersByInstanceIdentifier = new ConcurrentHashMap<>();
14 private static final Lock lock = new ReentrantLock();
16 private Notificator() {
19 public static ListenerAdapter getListenerFor(String streamName) {
20 return listenersByStreamName.get(streamName);
23 public static ListenerAdapter getListenerFor(InstanceIdentifier path) {
24 return listenersByInstanceIdentifier.get(path);
27 public static boolean existListenerFor(InstanceIdentifier path) {
28 return listenersByInstanceIdentifier.containsKey(path);
31 public static ListenerAdapter createListener(InstanceIdentifier path, String streamName) {
32 ListenerAdapter listener = new ListenerAdapter(path, streamName);
34 listenersByInstanceIdentifier.put(path, listener);
35 listenersByStreamName.put(streamName, listener);
40 public static void removeListener(InstanceIdentifier path) {
41 ListenerAdapter listener = listenersByInstanceIdentifier.get(path);
42 deleteListener(listener);
45 public static String createStreamNameFromUri(String uri) {
50 if (result.startsWith("/")) {
51 result = result.substring(1);
53 if (result.endsWith("/")) {
54 result = result.substring(0, result.length());
59 public static void removeAllListeners() {
60 for (ListenerAdapter listener : listenersByInstanceIdentifier.values()) {
63 } catch (Exception e) {
67 listenersByStreamName = new ConcurrentHashMap<>();
68 listenersByInstanceIdentifier = new ConcurrentHashMap<>();
72 public static void removeListenerIfNoSubscriberExists(ListenerAdapter listener) {
73 if (!listener.hasSubscribers()) {
74 deleteListener(listener);
78 private static void deleteListener(ListenerAdapter listener) {
79 if (listener != null) {
82 } catch (Exception e) {
85 listenersByInstanceIdentifier.remove(listener.getPath());
86 listenersByStreamName.remove(listener).getStreamName();