X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-dom-broker%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fdom%2Fbroker%2FConsumerContextImpl.java;h=e96b242720e88bbabe918cbde127af6eb0b3d5e8;hp=fa81bc9040849c6b198187c4d846de308bfbe685;hb=1f6daaf007e78df276604baa4c515a50037a649d;hpb=ec82a960337ba51c2e896863a668dcf8fbcfcb6b diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/ConsumerContextImpl.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/ConsumerContextImpl.java index fa81bc9040..e96b242720 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/ConsumerContextImpl.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/ConsumerContextImpl.java @@ -20,9 +20,9 @@ import org.opendaylight.controller.sal.dom.broker.osgi.ProxyFactory; 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.osgi.framework.ServiceReference; +import com.google.common.base.Optional; +import com.google.common.base.Preconditions; import com.google.common.collect.ClassToInstanceMap; import com.google.common.collect.MutableClassToInstanceMap; @@ -30,41 +30,39 @@ class ConsumerContextImpl implements ConsumerSession { private final ClassToInstanceMap instantiatedServices = MutableClassToInstanceMap .create(); - private final BundleContext context; private final Consumer consumer; private BrokerImpl broker = null; @GuardedBy("this") private boolean closed = false; - public ConsumerContextImpl(final Consumer consumer, final BundleContext ctx) { - this.consumer = consumer; - this.context = ctx; + public ConsumerContextImpl(final Consumer provider, final BrokerImpl brokerImpl) { + broker = brokerImpl; + consumer = provider; } @Override public Future> rpc(final QName rpc, final CompositeNode input) { + checkNotClosed(); return broker.invokeRpcAsync(rpc, input); } @Override public T getService(final Class service) { + checkNotClosed(); final T localProxy = instantiatedServices.getInstance(service); if (localProxy != null) { return localProxy; } - final ServiceReference serviceRef = context - .getServiceReference(service); - if (serviceRef == null) { - return null; - } - final T serviceImpl = context.getService(serviceRef); - final T ret = ProxyFactory.createProxy(serviceRef, serviceImpl); - if (ret != null) { + final Optional serviceImpl = broker.getGlobalService(service); + if(serviceImpl.isPresent()) { + final T ret = ProxyFactory.createProxy(null,serviceImpl.get()); instantiatedServices.putInstance(service, ret); + return ret; + } else { + return null; } - return ret; } @Override @@ -83,6 +81,7 @@ class ConsumerContextImpl implements ConsumerSession { } } broker.consumerSessionClosed(this); + broker = null; } @Override @@ -93,22 +92,19 @@ class ConsumerContextImpl implements ConsumerSession { /** * @return the broker */ - public BrokerImpl getBroker() { + protected final BrokerImpl getBrokerChecked() { + checkNotClosed(); return broker; } - /** - * @param broker - * the broker to set - */ - public void setBroker(final BrokerImpl broker) { - this.broker = broker; - } - /** * @return the _consumer */ public Consumer getConsumer() { return consumer; } + + protected final void checkNotClosed() { + Preconditions.checkState(!closed, "Session is closed."); + } }