X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-dom-broker%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fdom%2Fbroker%2FProviderContextImpl.xtend;h=cf5d220943142ad83c948299aeef3222d882b136;hb=6668a20ff21282576d2d408d9b1ce4cf9ba0c9ac;hp=11f68d6e04fb41a64c26d6a4a0a92833390f6e1b;hpb=a251833f27fd00040904e2df316cd707c8129d1e;p=controller.git diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/ProviderContextImpl.xtend b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/ProviderContextImpl.xtend index 11f68d6e04..cf5d220943 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/ProviderContextImpl.xtend +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/ProviderContextImpl.xtend @@ -2,19 +2,22 @@ package org.opendaylight.controller.sal.dom.broker import org.opendaylight.controller.sal.core.api.Broker.ProviderSession import org.opendaylight.controller.sal.core.api.Provider -import org.opendaylight.yangtools.yang.common.QName import org.opendaylight.controller.sal.core.api.RpcImplementation +import org.opendaylight.yangtools.yang.common.QName import org.osgi.framework.BundleContext -import static java.util.Collections.* -import java.util.Collections -import java.util.HashMap +import org.opendaylight.controller.sal.core.api.Broker.RpcRegistration +import org.opendaylight.controller.sal.core.api.RpcRegistrationListener +import org.opendaylight.yangtools.concepts.Registration + +import java.util.Set +import java.util.HashSet class ProviderContextImpl extends ConsumerContextImpl implements ProviderSession { @Property private val Provider provider; - private val rpcImpls = Collections.synchronizedMap(new HashMap()); + private val Set> registrations = new HashSet(); new(Provider provider, BundleContext ctx) { super(null, ctx); @@ -22,35 +25,61 @@ class ProviderContextImpl extends ConsumerContextImpl implements ProviderSession } override addRpcImplementation(QName rpcType, RpcImplementation implementation) throws IllegalArgumentException { - if(rpcType == null) { - throw new IllegalArgumentException("rpcType must not be null"); - } - if(implementation == null) { - throw new IllegalArgumentException("Implementation must not be null"); - } - broker.addRpcImplementation(rpcType, implementation); - rpcImpls.put(rpcType, implementation); - //FIXME: Return registration - return null; + val origReg = broker.router.addRpcImplementation(rpcType, implementation); + val newReg = new RpcRegistrationWrapper(origReg); + registrations.add(newReg); + return newReg; } - def removeRpcImplementation(QName rpcType, RpcImplementation implToRemove) throws IllegalArgumentException { - val localImpl = rpcImpls.get(rpcType); - if(localImpl != implToRemove) { - throw new IllegalStateException( - "Implementation was not registered in this session"); - } - - broker.removeRpcImplementation(rpcType, implToRemove); - rpcImpls.remove(rpcType); + protected def removeRpcImplementation(RpcRegistrationWrapper implToRemove) throws IllegalArgumentException { + registrations.remove(implToRemove); } + override close() { + + for (reg : registrations) { + reg.close() + } + super.close + } + override addMountedRpcImplementation(QName rpcType, RpcImplementation implementation) { throw new UnsupportedOperationException("TODO: auto-generated method stub") } - + override addRoutedRpcImplementation(QName rpcType, RpcImplementation implementation) { throw new UnsupportedOperationException("TODO: auto-generated method stub") } - + + override getSupportedRpcs() { + broker.router.supportedRpcs; + } + + override addRpcRegistrationListener(RpcRegistrationListener listener) { + broker.router.addRpcRegistrationListener(listener); + } } + +class RpcRegistrationWrapper implements RpcRegistration { + + + @Property + val RpcRegistration delegate + + new(RpcRegistration delegate) { + _delegate = delegate + } + + override getInstance() { + delegate.instance + } + + override close() { + delegate.close + } + + override getType() { + delegate.type + } +} +