X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=opendaylight%2Fmd-sal%2Fsal-dom-broker%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fdom%2Fbroker%2FBrokerImpl.xtend;h=83dda5902dee4e6fd819debabcaecd12ca0413e8;hb=9f6f0ac9246e8161a7d35275042a255398c68eca;hp=bdd4491d016ac747bc17d8a7b10860e7f17c4eed;hpb=206b6688f5be750d1c66c7e6d5fd1d62511db2af;p=controller.git diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/BrokerImpl.xtend b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/BrokerImpl.xtend index bdd4491d01..83dda5902d 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/BrokerImpl.xtend +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/BrokerImpl.xtend @@ -7,26 +7,29 @@ */ package org.opendaylight.controller.sal.dom.broker; -import java.util.Collections -import java.util.HashMap -import java.util.HashSet -import java.util.Map -import java.util.Set -import java.util.concurrent.Callable -import java.util.concurrent.ExecutorService -import java.util.concurrent.Executors -import java.util.concurrent.Future -import org.opendaylight.controller.sal.core.api.Broker -import org.opendaylight.controller.sal.core.api.BrokerService -import org.opendaylight.controller.sal.core.api.Consumer -import org.opendaylight.controller.sal.core.api.Provider -import org.opendaylight.controller.sal.core.api.RpcImplementation -import org.opendaylight.controller.sal.core.spi.BrokerModule -import org.opendaylight.yangtools.yang.common.QName -import org.opendaylight.yangtools.yang.common.RpcResult -import org.opendaylight.yangtools.yang.data.api.CompositeNode -import org.osgi.framework.BundleContext -import org.slf4j.LoggerFactory +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import org.opendaylight.controller.sal.core.api.Broker; +import org.opendaylight.controller.sal.core.api.BrokerService; +import org.opendaylight.controller.sal.core.api.Consumer; +import org.opendaylight.controller.sal.core.api.Provider; +import org.opendaylight.controller.sal.core.api.RpcImplementation; +import org.opendaylight.controller.sal.core.spi.BrokerModule; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.RpcResult; +import org.opendaylight.yangtools.yang.data.api.CompositeNode; +import org.osgi.framework.BundleContext; +import org.slf4j.LoggerFactory; +import org.opendaylight.yangtools.concepts.ListenerRegistration +import org.opendaylight.controller.sal.core.api.RpcRegistrationListener +import org.opendaylight.controller.md.sal.common.impl.ListenerRegistry public class BrokerImpl implements Broker { private static val log = LoggerFactory.getLogger(BrokerImpl); @@ -39,6 +42,8 @@ public class BrokerImpl implements Broker { private val Map, BrokerModule> serviceProviders = Collections. synchronizedMap(new HashMap, BrokerModule>()); + + private val rpcRegistrationListeners = new ListenerRegistry(); // RPC Context private val Map rpcImpls = Collections.synchronizedMap( new HashMap()); @@ -96,12 +101,31 @@ public class BrokerImpl implements Broker { throw new IllegalStateException("Implementation for rpc " + rpcType + " is already registered."); } - //TODO: Add notification for availability of Rpc Implementation + rpcImpls.put(rpcType, implementation); + + + for(listener : rpcRegistrationListeners.listeners) { + try { + listener.instance.onRpcImplementationAdded(rpcType); + } catch (Exception e){ + log.error("Unhandled exception during invoking listener",e); + } + } } - protected def void removeRpcImplementation(QName rpcType) { - rpcImpls.remove(rpcType); + protected def void removeRpcImplementation(QName rpcType, RpcImplementation implToRemove) { + if(implToRemove == rpcImpls.get(rpcType)) { + rpcImpls.remove(rpcType); + } + + for(listener : rpcRegistrationListeners.listeners) { + try { + listener.instance.onRpcImplementationRemoved(rpcType); + } catch (Exception e){ + log.error("Unhandled exception during invoking listener",e); + } + } } protected def Future> invokeRpc(QName rpc, CompositeNode input) { @@ -147,4 +171,12 @@ public class BrokerImpl implements Broker { sessions.remove(consumerContextImpl); providerSessions.remove(consumerContextImpl); } + + protected def getSupportedRpcs() { + rpcImpls.keySet; + } + + def ListenerRegistration addRpcRegistrationListener(RpcRegistrationListener listener) { + rpcRegistrationListeners.register(listener); + } }