Merge "Test of conversing of yang + xml files to json 2."
[controller.git] / opendaylight / md-sal / sal-dom-broker / src / main / java / org / opendaylight / controller / sal / dom / broker / ConsumerContextImpl.xtend
1 package org.opendaylight.controller.sal.dom.broker
2
3 import org.opendaylight.controller.sal.core.api.Broker.ConsumerSession
4 import org.opendaylight.controller.sal.core.api.BrokerService
5 import org.opendaylight.controller.sal.core.api.Consumer
6 import org.osgi.framework.BundleContext
7 import org.opendaylight.yangtools.yang.common.QName
8 import org.opendaylight.yangtools.yang.data.api.CompositeNode
9 import org.opendaylight.controller.sal.dom.broker.osgi.AbstractBrokerServiceProxy
10 import com.google.common.collect.ClassToInstanceMap
11 import com.google.common.collect.MutableClassToInstanceMap
12 import org.opendaylight.controller.sal.dom.broker.osgi.ProxyFactory
13
14 class ConsumerContextImpl implements ConsumerSession {
15
16     @Property
17     private val Consumer consumer;
18
19     @Property
20     private var BrokerImpl broker;
21
22     private val ClassToInstanceMap<BrokerService> instantiatedServices = MutableClassToInstanceMap.create();
23     private boolean closed = false;
24
25     private BundleContext context;
26
27     public new(Consumer consumer, BundleContext ctx) {
28         this._consumer = consumer;
29         this.context = ctx;
30     }
31
32     override rpc(QName rpc, CompositeNode input) {
33         return broker.invokeRpc(rpc, input);
34     }
35
36     override <T extends BrokerService> T getService(Class<T> service) {
37         val localProxy = instantiatedServices.getInstance(service);
38         if(localProxy != null) {
39             return localProxy;
40         }
41         val serviceRef = context.getServiceReference(service);
42         if(serviceRef == null) {
43             return null;
44         }
45         val serviceImpl = context.getService(serviceRef);
46         
47         
48         val ret = ProxyFactory.createProxy(serviceRef,serviceImpl);
49         if(ret != null) {
50             instantiatedServices.putInstance(service, ret);
51         }
52         return ret;
53     }
54
55     override close() {
56         val toStop = instantiatedServices.values();
57         this.closed = true;
58         for (BrokerService brokerService : toStop) {
59             if(brokerService instanceof AbstractBrokerServiceProxy<?>) {
60                 (brokerService as AutoCloseable).close();
61             } 
62         }
63         broker.consumerSessionClosed(this);
64     }
65
66     override isClosed() {
67         return closed;
68     }
69 }