X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=netconf%2Fmdsal-netconf-notification%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fyang%2Fnetconf%2Fmdsal%2Fnotification%2FCapabilityChangeNotificationProducer.java;h=b3c6c97ea78c7fe30460c86a8705a2a040399dbc;hb=bb0a5647411830d544b19fb79c35b7e563d12079;hp=150bf6ba6c73266ab6ac35dd40e50aa39a8a97f7;hpb=fba597cbd487e78af0259fc5e5e431a746931163;p=netconf.git diff --git a/netconf/mdsal-netconf-notification/src/main/java/org/opendaylight/controller/config/yang/netconf/mdsal/notification/CapabilityChangeNotificationProducer.java b/netconf/mdsal-netconf-notification/src/main/java/org/opendaylight/controller/config/yang/netconf/mdsal/notification/CapabilityChangeNotificationProducer.java index 150bf6ba6c..b3c6c97ea7 100644 --- a/netconf/mdsal-netconf-notification/src/main/java/org/opendaylight/controller/config/yang/netconf/mdsal/notification/CapabilityChangeNotificationProducer.java +++ b/netconf/mdsal-netconf-notification/src/main/java/org/opendaylight/controller/config/yang/netconf/mdsal/notification/CapabilityChangeNotificationProducer.java @@ -15,31 +15,42 @@ import java.util.Collection; import java.util.Collections; import java.util.Set; import javax.annotation.Nonnull; +import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.DataObjectModification; import org.opendaylight.controller.md.sal.binding.api.DataTreeModification; import org.opendaylight.netconf.notifications.BaseNotificationPublisherRegistration; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri; +import org.opendaylight.netconf.notifications.NetconfNotificationCollector; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.NetconfState; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.Capabilities; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.NetconfCapabilityChangeBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.changed.by.parms.ChangedByBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.changed.by.parms.changed.by.server.or.user.ServerBuilder; +import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Listens on capabilities changes in data store and publishes them to base * netconf notification stream listener. */ -final class CapabilityChangeNotificationProducer extends OperationalDatastoreListener { +public final class CapabilityChangeNotificationProducer extends OperationalDatastoreListener + implements AutoCloseable { private static final InstanceIdentifier CAPABILITIES_INSTANCE_IDENTIFIER = InstanceIdentifier.create(NetconfState.class).child(Capabilities.class); + private static final Logger LOG = LoggerFactory.getLogger(CapabilityChangeNotificationProducer.class); + private final BaseNotificationPublisherRegistration baseNotificationPublisherRegistration; + private final ListenerRegistration capabilityChangeListenerRegistration; - public CapabilityChangeNotificationProducer(BaseNotificationPublisherRegistration baseNotificationPublisherRegistration) { + public CapabilityChangeNotificationProducer(final NetconfNotificationCollector netconfNotificationCollector, + final DataBroker dataBroker) { super(CAPABILITIES_INSTANCE_IDENTIFIER); - this.baseNotificationPublisherRegistration = baseNotificationPublisherRegistration; + this.baseNotificationPublisherRegistration = netconfNotificationCollector.registerBaseNotificationPublisher(); + this.capabilityChangeListenerRegistration = registerOnChanges(dataBroker); } @Override @@ -51,8 +62,10 @@ final class CapabilityChangeNotificationProducer extends OperationalDatastoreLis case WRITE: { final Capabilities dataAfter = rootNode.getDataAfter(); final Capabilities dataBefore = rootNode.getDataBefore(); - final Set before = dataBefore != null ? ImmutableSet.copyOf(dataBefore.getCapability()) : Collections.emptySet(); - final Set after = dataAfter != null ? ImmutableSet.copyOf(dataAfter.getCapability()) : Collections.emptySet(); + final Set before = dataBefore != null ? ImmutableSet.copyOf(dataBefore.getCapability()) : + Collections.emptySet(); + final Set after = dataAfter != null ? ImmutableSet.copyOf(dataAfter.getCapability()) : + Collections.emptySet(); final Set added = Sets.difference(after, before); final Set removed = Sets.difference(before, after); publishNotification(added, removed); @@ -66,6 +79,8 @@ final class CapabilityChangeNotificationProducer extends OperationalDatastoreLis } break; } + default: + LOG.debug("Received intentionally unhandled type: {}.", modificationType); } } @@ -73,11 +88,24 @@ final class CapabilityChangeNotificationProducer extends OperationalDatastoreLis private void publishNotification(Set added, Set removed) { final NetconfCapabilityChangeBuilder netconfCapabilityChangeBuilder = new NetconfCapabilityChangeBuilder(); - netconfCapabilityChangeBuilder.setChangedBy(new ChangedByBuilder().setServerOrUser(new ServerBuilder().setServer(true).build()).build()); + netconfCapabilityChangeBuilder.setChangedBy(new ChangedByBuilder().setServerOrUser(new ServerBuilder() + .setServer(true).build()).build()); netconfCapabilityChangeBuilder.setAddedCapability(ImmutableList.copyOf(added)); netconfCapabilityChangeBuilder.setDeletedCapability(ImmutableList.copyOf(removed)); // TODO modified should be computed ... but why ? - netconfCapabilityChangeBuilder.setModifiedCapability(Collections.emptyList()); + netconfCapabilityChangeBuilder.setModifiedCapability(Collections.emptyList()); baseNotificationPublisherRegistration.onCapabilityChanged(netconfCapabilityChangeBuilder.build()); } + + /** + * Invoked by blueprint. + */ + public void close() { + if (baseNotificationPublisherRegistration != null) { + baseNotificationPublisherRegistration.close(); + } + if (capabilityChangeListenerRegistration != null) { + capabilityChangeListenerRegistration.close(); + } + } }