Merge "Fixed northbound references to SAL"
[controller.git] / opendaylight / md-sal / compatibility / sal-compatibility / src / main / java / org / opendaylight / controller / sal / compatibility / ComponentActivator.xtend
1 package org.opendaylight.controller.sal.compatibility
2
3 import org.opendaylight.controller.sal.core.ComponentActivatorAbstractBase
4 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey
5 import org.opendaylight.controller.sal.core.Node
6 import org.opendaylight.controller.sal.core.NodeConnector
7 import static org.opendaylight.controller.sal.compatibility.NodeMapping.*
8 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey
9 import org.apache.felix.dm.Component
10 import java.util.Arrays
11 import java.util.Dictionary
12 import java.util.Hashtable
13 import org.opendaylight.controller.sal.utils.GlobalConstants
14 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker
15 import org.opendaylight.controller.sal.flowprogrammer.IPluginInFlowProgrammerService
16 import org.opendaylight.controller.sal.inventory.IPluginInInventoryService
17 import org.opendaylight.controller.sal.reader.IPluginInReadService
18 import org.opendaylight.controller.sal.flowprogrammer.IPluginOutFlowProgrammerService
19 import org.opendaylight.controller.sal.binding.api.BindingAwareConsumer
20 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ConsumerContext
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalFlowService
22 import org.opendaylight.controller.sal.binding.api.NotificationService
23 import org.opendaylight.controller.sal.binding.api.data.DataBrokerService
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.OpendaylightFlowStatisticsService
25 import org.opendaylight.controller.sal.packet.IPluginOutDataPacketService
26 import org.osgi.framework.BundleContext
27 import org.opendaylight.controller.sal.reader.IPluginOutReadService
28 import org.opendaylight.controller.sal.inventory.IPluginOutInventoryService
29 import org.opendaylight.controller.sal.discovery.IDiscoveryService
30 import org.opendaylight.controller.sal.topology.IPluginOutTopologyService
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.topology.discovery.rev130819.FlowTopologyDiscoveryService
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.table.statistics.rev131215.OpendaylightFlowTableStatisticsService
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.OpendaylightPortStatisticsService
34 import org.opendaylight.controller.sal.binding.api.data.DataProviderService
35
36 class ComponentActivator extends ComponentActivatorAbstractBase implements BindingAwareConsumer {
37
38     private BundleContext context;
39
40     @Property
41     FlowProgrammerAdapter flow = new FlowProgrammerAdapter;
42
43     @Property
44     InventoryAndReadAdapter inventory = new InventoryAndReadAdapter;
45
46     @Property
47     DataPacketAdapter dataPacket = new DataPacketAdapter;
48
49     @Property
50     org.opendaylight.controller.sal.utils.INodeFactory nodeFactory = new MDSalNodeFactory
51
52     @Property
53     org.opendaylight.controller.sal.utils.INodeConnectorFactory nodeConnectorFactory = new MDSalNodeConnectorFactory
54
55
56     override protected init() {
57         Node.NodeIDType.registerIDType(MD_SAL_TYPE, String);
58         NodeConnector.NodeConnectorIDType.registerIDType(MD_SAL_TYPE, String, MD_SAL_TYPE);
59     }
60
61     override start(BundleContext context) {
62         super.start(context)
63         this.context = context;
64     }
65
66     def setBroker(BindingAwareBroker broker) {
67         broker.registerConsumer(this, context)
68     }
69
70     override onSessionInitialized(ConsumerContext session) {
71         val subscribe = session.getSALService(NotificationService)
72
73         // Registration of Flow Service
74         flow.delegate = session.getRpcService(SalFlowService)
75         subscribe.registerNotificationListener(flow);
76
77         // Data Packet Service
78         subscribe.registerNotificationListener(inventory);
79
80         // Inventory Service
81         inventory.dataService = session.getSALService(DataBrokerService);
82         inventory.flowStatisticsService = session.getRpcService(OpendaylightFlowStatisticsService);
83         inventory.flowTableStatisticsService = session.getRpcService(OpendaylightFlowTableStatisticsService);
84         inventory.nodeConnectorStatisticsService = session.getRpcService(OpendaylightPortStatisticsService);
85         inventory.topologyDiscovery = session.getRpcService(FlowTopologyDiscoveryService);
86                 inventory.dataProviderService = session.getSALService(DataProviderService)
87
88         subscribe.registerNotificationListener(dataPacket)
89
90     }
91
92     override protected getGlobalImplementations() {
93         return Arrays.asList(this, flow, inventory, dataPacket, nodeFactory, nodeConnectorFactory)
94     }
95
96     override protected configureGlobalInstance(Component c, Object imp) {
97         configure(imp, c);
98     }
99
100     private def dispatch configure(MDSalNodeFactory imp, Component it) {
101         setInterface(org.opendaylight.controller.sal.utils.INodeFactory.name, properties);
102     }
103
104     private def dispatch configure(MDSalNodeConnectorFactory imp, Component it) {
105         setInterface(org.opendaylight.controller.sal.utils.INodeConnectorFactory.name, properties);
106     }
107
108     private def dispatch configure(ComponentActivator imp, Component it) {
109         add(
110             createServiceDependency().setService(BindingAwareBroker) //
111             .setCallbacks("setBroker", "setBroker") //
112             .setRequired(true))
113
114
115     }
116
117     private def dispatch configure(DataPacketAdapter imp, Component it) {
118         add(
119             createServiceDependency() //
120             .setService(IPluginOutDataPacketService) //
121             .setCallbacks("setDataPacketPublisher", "setDataPacketPublisher") //
122             .setRequired(false))
123     }
124
125     private def dispatch configure(FlowProgrammerAdapter imp, Component it) {
126         setInterface(IPluginInFlowProgrammerService.name, properties)
127         add(
128             createServiceDependency() //
129             .setService(IPluginOutFlowProgrammerService) //
130             .setCallbacks("setFlowProgrammerPublisher", "setFlowProgrammerPublisher") //
131             .setRequired(false))
132     }
133
134     private def dispatch configure(InventoryAndReadAdapter imp, Component it) {
135         setInterface(Arrays.asList(IPluginInInventoryService.name, IPluginInReadService.name), properties)
136         add(
137             createServiceDependency() //
138             .setService(IPluginOutReadService) //
139             .setCallbacks("setReadPublisher", "unsetReadPublisher") //
140             .setRequired(false))
141         add(
142             createServiceDependency() //
143             .setService(IPluginOutInventoryService) //
144             .setCallbacks("setInventoryPublisher", "setInventoryPublisher") //
145             .setRequired(false))
146         add(
147             createServiceDependency() //
148             .setService(IPluginOutTopologyService) //
149             .setCallbacks("setTopologyPublisher", "setTopologyPublisher") //
150             .setRequired(false))
151         add(
152             createServiceDependency() //
153             .setService(IDiscoveryService) //
154             .setCallbacks("setDiscoveryPublisher", "setDiscoveryPublisher") //
155             .setRequired(false))
156         
157     }
158
159     private def Dictionary<String, Object> properties() {
160         val props = new Hashtable<String, Object>();
161         props.put(GlobalConstants.PROTOCOLPLUGINTYPE.toString, MD_SAL_TYPE)
162         props.put("protocolName", MD_SAL_TYPE);
163         return props;
164     }
165 }