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=0e0088f62a0a8c9eedf2c6dab28988ddbaa8de93;hp=fa81bc9040849c6b198187c4d846de308bfbe685;hb=3f7ac86f0548d587e88ba43e03ec25cc83eed6cf;hpb=8a52609ed4f230b72c0608632f14d2c607e36e06 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..0e0088f62a 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 @@ -7,108 +7,88 @@ */ package org.opendaylight.controller.sal.dom.broker; +import com.google.common.base.Optional; +import com.google.common.base.Preconditions; +import com.google.common.collect.ClassToInstanceMap; +import com.google.common.collect.MutableClassToInstanceMap; import java.util.Collection; -import java.util.concurrent.Future; - -import javax.annotation.concurrent.GuardedBy; - +import java.util.concurrent.atomic.AtomicBoolean; import org.opendaylight.controller.sal.core.api.Broker.ConsumerSession; import org.opendaylight.controller.sal.core.api.BrokerService; import org.opendaylight.controller.sal.core.api.Consumer; import org.opendaylight.controller.sal.dom.broker.osgi.AbstractBrokerServiceProxy; 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.collect.ClassToInstanceMap; -import com.google.common.collect.MutableClassToInstanceMap; +@Deprecated class ConsumerContextImpl implements ConsumerSession { - private final ClassToInstanceMap instantiatedServices = MutableClassToInstanceMap - .create(); - private final BundleContext context; + private final ClassToInstanceMap instantiatedServices = MutableClassToInstanceMap.create(); 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; - } + private final BrokerImpl broker; + private final AtomicBoolean closed = new AtomicBoolean(false); - @Override - public Future> rpc(final QName rpc, - final CompositeNode input) { - return broker.invokeRpcAsync(rpc, input); + ConsumerContextImpl(final Consumer provider, final BrokerImpl brokerImpl) { + broker = brokerImpl; + consumer = provider; } @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 public void close() { - synchronized (this) { - if (closed) { - return; - } - this.closed = true; - } - - Collection toStop = instantiatedServices.values(); - for (BrokerService brokerService : toStop) { - if (brokerService instanceof AbstractBrokerServiceProxy) { - ((AbstractBrokerServiceProxy) brokerService).close(); + if (closed.compareAndSet(false, true)) { + Collection toStop = instantiatedServices.values(); + for (BrokerService brokerService : toStop) { + if (brokerService instanceof AbstractBrokerServiceProxy) { + ((AbstractBrokerServiceProxy) brokerService).close(); + } } + broker.consumerSessionClosed(this); } - broker.consumerSessionClosed(this); } + @Override - public synchronized boolean isClosed() { - return closed; + public boolean isClosed() { + return closed.get(); } /** + * Gets broker. + * * @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; - } - - /** + * Gets consumer. + * * @return the _consumer */ public Consumer getConsumer() { return consumer; } + + protected final void checkNotClosed() { + Preconditions.checkState(!closed.get(), "Session is closed."); + } }