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;
private final ClassToInstanceMap<BrokerService> 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<RpcResult<CompositeNode>> rpc(final QName rpc,
final CompositeNode input) {
+ checkNotClosed();
return broker.invokeRpcAsync(rpc, input);
}
@Override
public <T extends BrokerService> T getService(final Class<T> service) {
+ checkNotClosed();
final T localProxy = instantiatedServices.getInstance(service);
if (localProxy != null) {
return localProxy;
}
- final ServiceReference<T> 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<T> 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
}
}
broker.consumerSessionClosed(this);
+ broker = null;
}
@Override
/**
* @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.");
+ }
}