*/
package org.opendaylight.netconf.messagebus.eventsources.netconf;
-import java.util.ArrayList;
+import java.time.Instant;
+import java.util.HashSet;
+import java.util.Optional;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.messagebus.eventaggregator.rev141202.TopicId;
import org.opendaylight.yangtools.yang.model.api.SchemaPath;
import org.slf4j.Logger;
/**
* Notification topic registration.
*/
-public abstract class NotificationTopicRegistration implements AutoCloseable {
+@Deprecated(forRemoval = true)
+abstract class NotificationTopicRegistration implements AutoCloseable {
private static final Logger LOG = LoggerFactory.getLogger(NotificationTopicRegistration.class);
public enum NotificationSourceType {
NetconfDeviceStream,
- ConnectionStatusChange;
+ ConnectionStatusChange
}
private boolean active;
private final String sourceName;
private final String notificationUrnPrefix;
private boolean replaySupported;
+ private Instant lastEventTime;
+ protected final ConcurrentHashMap<SchemaPath, Set<TopicId>> notificationTopicMap = new ConcurrentHashMap<>();
- protected NotificationTopicRegistration(NotificationSourceType notificationSourceType, String sourceName,
- String notificationUrnPrefix) {
+ protected NotificationTopicRegistration(final NotificationSourceType notificationSourceType,
+ final String sourceName, final String notificationUrnPrefix) {
this.notificationSourceType = notificationSourceType;
this.sourceName = sourceName;
this.notificationUrnPrefix = notificationUrnPrefix;
return active;
}
- protected void setActive(boolean active) {
+ protected void setActive(final boolean active) {
this.active = active;
}
return notificationUrnPrefix;
}
+ /**
+ * Returns registered topics for given notification path.
+ *
+ * @param notificationPath path
+ * @return topicIds
+ */
+ Set<TopicId> getTopicsForNotification(final SchemaPath notificationPath) {
+ final Set<TopicId> topicIds = notificationTopicMap.get(notificationPath);
+ return topicIds != null ? topicIds : new HashSet<>();
+ }
+
/**
* Checks, if notification is from namespace belonging to this registration.
+ *
* @param notificationPath path
* @return true, if notification belongs to registration namespace
*/
- public boolean checkNotificationPath(SchemaPath notificationPath) {
+ boolean checkNotificationPath(final SchemaPath notificationPath) {
if (notificationPath == null) {
return false;
}
String nameSpace = notificationPath.getLastComponent().getNamespace().toString();
LOG.debug("CheckNotification - name space {} - NotificationUrnPrefix {}", nameSpace,
- getNotificationUrnPrefix());
+ getNotificationUrnPrefix());
return nameSpace.startsWith(getNotificationUrnPrefix());
}
+ Optional<Instant> getLastEventTime() {
+ return Optional.ofNullable(lastEventTime);
+ }
+
+ void setLastEventTime(final Instant lastEventTime) {
+ this.lastEventTime = lastEventTime;
+ }
+
abstract void activateNotificationSource();
abstract void deActivateNotificationSource();
/**
* Registers associated event source notification to topic.
+ *
* @param notificationPath notification path
- * @param topicId topic id
+ * @param topicId topic id
* @return true, if successful
*/
abstract boolean registerNotificationTopic(SchemaPath notificationPath, TopicId topicId);
/**
* Registers associated event source notification to topic.
+ *
* @param topicId topic id
- * @return true, if successful
*/
abstract void unRegisterNotificationTopic(TopicId topicId);
- /**
- * Returns registered topics for given path.
- * @param notificationPath path
- * @return topicIds
- */
- abstract ArrayList<TopicId> getNotificationTopicIds(SchemaPath notificationPath);
-
public boolean isReplaySupported() {
return replaySupported;
}
- protected void setReplaySupported(boolean replaySupported) {
+ protected void setReplaySupported(final boolean replaySupported) {
this.replaySupported = replaySupported;
}