1 package org.opendaylight.controller.sal.compatibility
3 import java.util.Arrays
4 import java.util.Dictionary
5 import java.util.Hashtable
6 import org.apache.felix.dm.Component
7 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker
8 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ConsumerContext
9 import org.opendaylight.controller.sal.binding.api.BindingAwareConsumer
10 import org.opendaylight.controller.sal.binding.api.NotificationService
11 import org.opendaylight.controller.sal.binding.api.data.DataBrokerService
12 import org.opendaylight.controller.sal.binding.api.data.DataProviderService
13 import org.opendaylight.controller.sal.compatibility.topology.TopologyAdapter
14 import org.opendaylight.controller.sal.core.ComponentActivatorAbstractBase
15 import org.opendaylight.controller.sal.core.Node
16 import org.opendaylight.controller.sal.core.NodeConnector
17 import org.opendaylight.controller.sal.discovery.IDiscoveryService
18 import org.opendaylight.controller.sal.flowprogrammer.IPluginInFlowProgrammerService
19 import org.opendaylight.controller.sal.flowprogrammer.IPluginOutFlowProgrammerService
20 import org.opendaylight.controller.sal.inventory.IPluginInInventoryService
21 import org.opendaylight.controller.sal.inventory.IPluginOutInventoryService
22 import org.opendaylight.controller.sal.packet.IPluginOutDataPacketService
23 import org.opendaylight.controller.sal.reader.IPluginInReadService
24 import org.opendaylight.controller.sal.reader.IPluginOutReadService
25 import org.opendaylight.controller.sal.topology.IPluginInTopologyService
26 import org.opendaylight.controller.sal.topology.IPluginOutTopologyService
27 import org.opendaylight.controller.sal.utils.GlobalConstants
28 import org.opendaylight.controller.sal.utils.INodeConnectorFactory
29 import org.opendaylight.controller.sal.utils.INodeFactory
30 import org.opendaylight.controller.clustering.services.IClusterGlobalServices
31 import org.opendaylight.controller.sal.packet.IPluginInDataPacketService
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalFlowService
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketProcessingService
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.OpendaylightFlowStatisticsService
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.table.statistics.rev131215.OpendaylightFlowTableStatisticsService
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.topology.discovery.rev130819.FlowTopologyDiscoveryService
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.OpendaylightPortStatisticsService
39 import org.osgi.framework.BundleContext
41 import static org.opendaylight.controller.sal.compatibility.NodeMapping.*
42 import org.opendaylight.controller.sal.compatibility.topology.TopologyProvider
43 import org.opendaylight.controller.sal.compatibility.adsal.DataPacketServiceAdapter
44 import org.opendaylight.controller.sal.binding.api.BindingAwareProvider
45 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext
47 class ComponentActivator extends ComponentActivatorAbstractBase {
49 private BundleContext context;
52 FlowProgrammerAdapter flow = new FlowProgrammerAdapter;
55 InventoryAndReadAdapter inventory = new InventoryAndReadAdapter;
58 DataPacketAdapter dataPacket = new DataPacketAdapter;
61 INodeFactory nodeFactory = new MDSalNodeFactory
64 INodeConnectorFactory nodeConnectorFactory = new MDSalNodeConnectorFactory
67 TopologyAdapter topology = new TopologyAdapter
70 TopologyProvider tpProvider = new TopologyProvider()
73 DataPacketServiceAdapter dataPacketService = new DataPacketServiceAdapter()
77 override protected init() {
78 Node.NodeIDType.registerIDType(MD_SAL_TYPE, String);
79 NodeConnector.NodeConnectorIDType.registerIDType(MD_SAL_TYPE, String, MD_SAL_TYPE);
82 override start(BundleContext context) {
84 this.context = context;
87 def setBroker(BindingAwareBroker broker) {
88 broker.registerProvider(new SalCompatibilityProvider(this), context)
92 override protected getGlobalImplementations() {
93 return Arrays.asList(this, flow, inventory, dataPacket, nodeFactory, nodeConnectorFactory,topology,tpProvider)
96 override protected configureGlobalInstance(Component c, Object imp) {
100 override protected getImplementations() {
101 return Arrays.asList(dataPacketService)
104 override protected configureInstance(Component c, Object imp, String containerName) {
105 instanceConfigure(imp, c, containerName);
108 private def dispatch configure(MDSalNodeFactory imp, Component it) {
109 setInterface(INodeFactory.name, properties);
112 private def dispatch configure(MDSalNodeConnectorFactory imp, Component it) {
113 setInterface(INodeConnectorFactory.name, properties);
116 private def dispatch configure(ComponentActivator imp, Component it) {
118 createServiceDependency().setService(BindingAwareBroker) //
119 .setCallbacks("setBroker", "setBroker") //
125 private def dispatch configure(DataPacketAdapter imp, Component it) {
127 createServiceDependency() //
128 .setService(IPluginOutDataPacketService) //
129 .setCallbacks("setDataPacketPublisher", "setDataPacketPublisher") //
133 private def dispatch configure(FlowProgrammerAdapter imp, Component it) {
134 setInterface(IPluginInFlowProgrammerService.name, properties)
136 createServiceDependency() //
137 .setService(IPluginOutFlowProgrammerService) //
138 .setCallbacks("setFlowProgrammerPublisher", "setFlowProgrammerPublisher") //
142 createServiceDependency() //
143 .setService(IClusterGlobalServices) //
144 .setCallbacks("setClusterGlobalServices", "unsetClusterGlobalServices") //
149 private def dispatch instanceConfigure(DataPacketServiceAdapter imp, Component it, String containerName) {
150 setInterface(IPluginInDataPacketService.name, properties)
153 private def dispatch instanceConfigure(ComponentActivator imp, Component it, String containerName) {
157 private def dispatch configure(InventoryAndReadAdapter imp, Component it) {
158 setInterface(Arrays.asList(IPluginInInventoryService.name, IPluginInReadService.name), properties)
160 createServiceDependency() //
161 .setService(IPluginOutReadService) //
162 .setCallbacks("setReadPublisher", "unsetReadPublisher") //
165 createServiceDependency() //
166 .setService(IPluginOutInventoryService) //
167 .setCallbacks("setInventoryPublisher", "unsetInventoryPublisher") //
170 createServiceDependency() //
171 .setService(IDiscoveryService) //
172 .setCallbacks("setDiscoveryPublisher", "setDiscoveryPublisher") //
178 private def dispatch configure (TopologyAdapter imp, Component it) {
179 setInterface(Arrays.asList(IPluginInTopologyService.name), properties)
181 createServiceDependency() //
182 .setService(IPluginOutTopologyService) //
183 .setCallbacks("setTopologyPublisher", "setTopologyPublisher") //
187 private def dispatch configure (TopologyProvider imp, Component it) {
189 createServiceDependency() //
190 .setService(IPluginOutTopologyService) //
191 .setCallbacks("setTopologyPublisher", "setTopologyPublisher") //
195 private def Dictionary<String, Object> properties() {
196 val props = new Hashtable<String, Object>();
197 props.put(GlobalConstants.PROTOCOLPLUGINTYPE.toString, MD_SAL_TYPE)
198 props.put("protocolName", MD_SAL_TYPE);
202 package class SalCompatibilityProvider implements BindingAwareProvider {
204 private val ComponentActivator activator;
206 new(ComponentActivator cmpAct) {
210 override getFunctionality() {
214 override getImplementations() {
219 override onSessionInitialized(ConsumerContext session) {
224 override onSessionInitiated(ProviderContext session) {
226 val subscribe = session.getSALService(NotificationService)
228 // Registration of Flow Service
229 flow.delegate = session.getRpcService(SalFlowService)
230 flow.dataBrokerService = session.getSALService(DataBrokerService);
231 subscribe.registerNotificationListener(flow);
233 // Data Packet Service
234 subscribe.registerNotificationListener(inventory);
235 dataPacketService.delegate = session.getRpcService(PacketProcessingService)
238 inventory.dataService = session.getSALService(DataBrokerService);
239 inventory.flowStatisticsService = session.getRpcService(OpendaylightFlowStatisticsService);
240 inventory.flowTableStatisticsService = session.getRpcService(OpendaylightFlowTableStatisticsService);
241 inventory.nodeConnectorStatisticsService = session.getRpcService(OpendaylightPortStatisticsService);
242 inventory.topologyDiscovery = session.getRpcService(FlowTopologyDiscoveryService);
243 inventory.dataProviderService = session.getSALService(DataProviderService)
244 topology.dataService = session.getSALService(DataProviderService)
245 tpProvider.dataService = session.getSALService(DataProviderService)
250 subscribe.registerNotificationListener(dataPacket)