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;
*/
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();
* Returns list of all stream names
*/
public static Set<String> getStreamNames() {
- return listenersByStreamName.keySet();
+ return dataChangeListener.keySet();
}
/**
* @return {@link ListenerAdapter} specified by stream name.
*/
public static ListenerAdapter getListenerFor(final String streamName) {
- return listenersByStreamName.get(streamName);
+ return dataChangeListener.get(streamName);
}
/**
* @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();
}
* 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) {
}
try {
lock.lock();
- listenersByStreamName = new ConcurrentHashMap<>();
+ dataChangeListener = new ConcurrentHashMap<>();
} finally {
lock.unlock();
}
}
try {
lock.lock();
- listenersByStreamName.remove(listener.getStreamName());
+ dataChangeListener.remove(listener.getStreamName());
} finally {
lock.unlock();
}
}
+ /**
+ * 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<>();