X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fnetconf%2Fmdsal-netconf-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Fmdsal%2Fconnector%2FCurrentSchemaContext.java;h=1aa38eb80c0a1fab17ea8512cacce4bf83fd1fe7;hp=df671e8f4f2ab07fd38e31d7cda55c2736f04f8b;hb=7ab97f33c1d0c7da891337d8ec0b117555914115;hpb=d2d4cefa4d8d662554b7f2fc0b0dd568d0db1180 diff --git a/opendaylight/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/controller/netconf/mdsal/connector/CurrentSchemaContext.java b/opendaylight/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/controller/netconf/mdsal/connector/CurrentSchemaContext.java index df671e8f4f..1aa38eb80c 100644 --- a/opendaylight/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/controller/netconf/mdsal/connector/CurrentSchemaContext.java +++ b/opendaylight/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/controller/netconf/mdsal/connector/CurrentSchemaContext.java @@ -9,7 +9,12 @@ package org.opendaylight.controller.netconf.mdsal.connector; import com.google.common.base.Preconditions; +import com.google.common.collect.Sets; +import java.util.Collections; +import java.util.Set; import java.util.concurrent.atomic.AtomicReference; +import org.opendaylight.controller.netconf.api.Capability; +import org.opendaylight.controller.netconf.api.monitoring.CapabilityListener; import org.opendaylight.controller.sal.core.api.model.SchemaService; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.model.api.SchemaContext; @@ -18,6 +23,7 @@ import org.opendaylight.yangtools.yang.model.api.SchemaContextListener; public class CurrentSchemaContext implements SchemaContextListener, AutoCloseable { final AtomicReference currentContext = new AtomicReference(); private final ListenerRegistration schemaContextListenerListenerRegistration; + private final Set listeners = Collections.synchronizedSet(Sets.newHashSet()); public SchemaContext getCurrentContext() { Preconditions.checkState(currentContext.get() != null, "Current context not received"); @@ -31,11 +37,28 @@ public class CurrentSchemaContext implements SchemaContextListener, AutoCloseabl @Override public void onGlobalContextUpdated(final SchemaContext schemaContext) { currentContext.set(schemaContext); + // FIXME is notifying all the listeners from this callback wise ? + final Set addedCaps = MdsalNetconfOperationServiceFactory.transformCapabilities(currentContext.get()); + for (final CapabilityListener listener : listeners) { + listener.onCapabilitiesAdded(addedCaps); + } } @Override public void close() throws Exception { + listeners.clear(); schemaContextListenerListenerRegistration.close(); currentContext.set(null); } + + public AutoCloseable registerCapabilityListener(final CapabilityListener listener) { + listener.onCapabilitiesAdded(MdsalNetconfOperationServiceFactory.transformCapabilities(currentContext.get())); + listeners.add(listener); + return new AutoCloseable() { + @Override + public void close() throws Exception { + listeners.remove(listener); + } + }; + } } \ No newline at end of file