1 package org.opendaylight.controller.sal.compability
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.compability.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 org.opendaylight.yangtools.yang.binding.NotificationListener
12 import java.util.Dictionary
13 import java.util.Hashtable
14 import org.opendaylight.controller.sal.utils.GlobalConstants
15 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker
16 import org.opendaylight.controller.sal.flowprogrammer.IPluginInFlowProgrammerService
17 import org.opendaylight.controller.sal.inventory.IPluginInInventoryService
18 import org.opendaylight.controller.sal.reader.IPluginInReadService
19 import org.opendaylight.controller.sal.flowprogrammer.IPluginOutFlowProgrammerService
20 import org.opendaylight.controller.sal.binding.api.BindingAwareConsumer
21 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ConsumerContext
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalFlowService
23 import org.opendaylight.controller.sal.binding.api.NotificationService
24 import org.opendaylight.controller.sal.binding.api.data.DataBrokerService
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.OpendaylightFlowStatisticsService
26 import org.opendaylight.controller.sal.packet.IPluginOutDataPacketService
27 import org.osgi.framework.BundleContext
28 import org.opendaylight.controller.sal.reader.IPluginOutReadService
29 import org.opendaylight.controller.sal.inventory.IPluginOutInventoryService
30 import org.opendaylight.controller.sal.discovery.IDiscoveryService
31 import org.opendaylight.controller.sal.topology.IPluginOutTopologyService
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.topology.discovery.rev130819.FlowTopologyDiscoveryService
34 class ComponentActivator extends ComponentActivatorAbstractBase implements BindingAwareConsumer {
36 private BundleContext context;
39 FlowProgrammerAdapter flow = new FlowProgrammerAdapter;
42 InventoryAndReadAdapter inventory = new InventoryAndReadAdapter;
45 DataPacketAdapter dataPacket = new DataPacketAdapter;
47 override protected init() {
48 Node.NodeIDType.registerIDType(MD_SAL_TYPE, NodeKey);
49 NodeConnector.NodeConnectorIDType.registerIDType(MD_SAL_TYPE, NodeConnectorKey, MD_SAL_TYPE);
52 override start(BundleContext context) {
54 this.context = context;
57 def setBroker(BindingAwareBroker broker) {
58 broker.registerConsumer(this, context)
61 override onSessionInitialized(ConsumerContext session) {
62 val subscribe = session.getSALService(NotificationService)
64 // Registration of Flow Service
65 flow.delegate = session.getRpcService(SalFlowService)
66 subscribe.registerNotificationListener(flow);
68 // Data Packet Service
69 subscribe.registerNotificationListener(inventory);
72 inventory.dataService = session.getSALService(DataBrokerService);
73 inventory.flowStatisticsService = session.getRpcService(OpendaylightFlowStatisticsService);
74 inventory.topologyDiscovery = session.getRpcService(FlowTopologyDiscoveryService);
76 subscribe.registerNotificationListener(dataPacket)
80 override protected getGlobalImplementations() {
81 return Arrays.asList(this, flow, inventory, dataPacket)
84 override protected configureGlobalInstance(Component c, Object imp) {
88 private def dispatch configure(ComponentActivator imp, Component it) {
90 createServiceDependency().setService(BindingAwareBroker) //
91 .setCallbacks("setBroker", "setBroker") //
95 private def dispatch configure(DataPacketAdapter imp, Component it) {
97 createServiceDependency() //
98 .setService(IPluginOutDataPacketService) //
99 .setCallbacks("setDataPacketPublisher", "setDataPacketPublisher") //
103 private def dispatch configure(FlowProgrammerAdapter imp, Component it) {
104 setInterface(IPluginInFlowProgrammerService.name, properties)
106 createServiceDependency() //
107 .setService(IPluginOutFlowProgrammerService) //
108 .setCallbacks("setFlowProgrammerPublisher", "setFlowProgrammerPublisher") //
112 private def dispatch configure(InventoryAndReadAdapter imp, Component it) {
113 setInterface(Arrays.asList(IPluginInInventoryService.name, IPluginInReadService.name), properties)
115 createServiceDependency() //
116 .setService(IPluginOutReadService) //
117 .setCallbacks("setReadPublisher", "setReadPublisher") //
120 createServiceDependency() //
121 .setService(IPluginOutInventoryService) //
122 .setCallbacks("setInventoryPublisher", "setInventoryPublisher") //
125 createServiceDependency() //
126 .setService(IPluginOutTopologyService) //
127 .setCallbacks("setTopologyPublisher", "setTopologyPublisher") //
130 createServiceDependency() //
131 .setService(IDiscoveryService) //
132 .setCallbacks("setDiscoveryPublisher", "setDiscoveryPublisher") //
137 private def Dictionary<String, Object> properties() {
138 val props = new Hashtable<String, Object>();
139 props.put(GlobalConstants.PROTOCOLPLUGINTYPE.toString, MD_SAL_TYPE)