X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=netconf%2Fmessagebus-netconf%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fnetconf%2Fmessagebus%2Feventsources%2Fnetconf%2FNetconfEventSourceManager.java;h=6360136b9fd3f401cf1b6c2e2f0b558ebb8f705a;hb=47c1b8e3d9835d336c79d6b4ca4e61417a05039e;hp=516c595ef7e98a8e3f17d97100e6cb5088180d0d;hpb=2276e0acefe29ea23e89d9295b4774a61b3c69e2;p=netconf.git diff --git a/netconf/messagebus-netconf/src/main/java/org/opendaylight/netconf/messagebus/eventsources/netconf/NetconfEventSourceManager.java b/netconf/messagebus-netconf/src/main/java/org/opendaylight/netconf/messagebus/eventsources/netconf/NetconfEventSourceManager.java index 516c595ef7..6360136b9f 100644 --- a/netconf/messagebus-netconf/src/main/java/org/opendaylight/netconf/messagebus/eventsources/netconf/NetconfEventSourceManager.java +++ b/netconf/messagebus-netconf/src/main/java/org/opendaylight/netconf/messagebus/eventsources/netconf/NetconfEventSourceManager.java @@ -9,12 +9,14 @@ package org.opendaylight.netconf.messagebus.eventsources.netconf; import com.google.common.base.Preconditions; +import java.util.Collection; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.binding.api.DataChangeListener; -import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope; -import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent; +import org.opendaylight.controller.md.sal.binding.api.DataObjectModification; +import org.opendaylight.controller.md.sal.binding.api.DataTreeChangeListener; +import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier; +import org.opendaylight.controller.md.sal.binding.api.DataTreeModification; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; import org.opendaylight.controller.md.sal.dom.api.DOMNotificationPublishService; @@ -27,7 +29,6 @@ import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology. import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; import org.opendaylight.yangtools.concepts.ListenerRegistration; -import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -36,7 +37,7 @@ import org.slf4j.LoggerFactory; * NetconfEventSourceManager implements DataChangeListener. On topology changes, it manages creation, * updating and removing registrations of event sources. */ -public final class NetconfEventSourceManager implements DataChangeListener, AutoCloseable { +public final class NetconfEventSourceManager implements DataTreeChangeListener, AutoCloseable { private static final Logger LOG = LoggerFactory.getLogger(NetconfEventSourceManager.class); private static final TopologyKey NETCONF_TOPOLOGY_KEY = new TopologyKey( @@ -49,7 +50,7 @@ public final class NetconfEventSourceManager implements DataChangeListener, Auto new ConcurrentHashMap<>(); private final DOMNotificationPublishService publishService; private final DOMMountPointService domMounts; - private ListenerRegistration listenerRegistration; + private ListenerRegistration listenerRegistration; private final EventSourceRegistry eventSourceRegistry; private final DataBroker dataBroker; @@ -72,35 +73,29 @@ public final class NetconfEventSourceManager implements DataChangeListener, Auto */ public void initialize() { Preconditions.checkNotNull(dataBroker); - listenerRegistration = dataBroker - .registerDataChangeListener(LogicalDatastoreType.OPERATIONAL, NETCONF_DEVICE_PATH, this, - DataChangeScope.SUBTREE); + listenerRegistration = dataBroker.registerDataTreeChangeListener(new DataTreeIdentifier<>( + LogicalDatastoreType.OPERATIONAL, NETCONF_DEVICE_PATH), this); LOG.info("NetconfEventSourceManager initialized."); } @Override - public void onDataChanged(final AsyncDataChangeEvent, DataObject> event) { - - LOG.debug("[DataChangeEvent, DataObject>: {}]", event); - for (final Map.Entry, DataObject> changeEntry : event.getCreatedData().entrySet()) { - if (changeEntry.getValue() instanceof Node) { - nodeCreated(changeEntry.getKey(), (Node) changeEntry.getValue()); + public void onDataTreeChanged(Collection> changes) { + for (DataTreeModification change: changes) { + LOG.debug("DataTreeModification: {}", change); + final DataObjectModification rootNode = change.getRootNode(); + final InstanceIdentifier identifier = change.getRootPath().getRootIdentifier(); + switch (rootNode.getModificationType()) { + case WRITE: + case SUBTREE_MODIFIED: + nodeCreated(identifier, rootNode.getDataAfter()); + break; + case DELETE: + nodeRemoved(identifier); + break; + default: + break; } } - - for (final Map.Entry, DataObject> changeEntry : event.getUpdatedData().entrySet()) { - if (changeEntry.getValue() instanceof Node) { - nodeUpdated(changeEntry.getKey(), (Node) changeEntry.getValue()); - } - } - - for (InstanceIdentifier removePath : event.getRemovedPaths()) { - DataObject removeObject = event.getOriginalData().get(removePath); - if (removeObject instanceof Node) { - nodeRemoved(removePath); - } - } - } private void nodeCreated(final InstanceIdentifier key, final Node node) { @@ -119,22 +114,6 @@ public final class NetconfEventSourceManager implements DataChangeListener, Auto } } - private void nodeUpdated(final InstanceIdentifier key, final Node node) { - Preconditions.checkNotNull(key); - if (!validateNode(node)) { - LOG.warn("NodeUpdated event : Node [{}] is null or not valid.", key.toString()); - return; - } - - LOG.info("Netconf event source [{}] is updating...", key.toString()); - NetconfEventSourceRegistration nesr = registrationMap.get(key); - if (nesr != null) { - nesr.updateStatus(); - } else { - nodeCreated(key, node); - } - } - private void nodeRemoved(final InstanceIdentifier key) { Preconditions.checkNotNull(key); LOG.info("Netconf event source [{}] is removing...", key.toString()); @@ -188,5 +167,4 @@ public final class NetconfEventSourceManager implements DataChangeListener, Auto } registrationMap.clear(); } - -} \ No newline at end of file +}