BugFix : Changes to get ping between two hosts to work
[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 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
32
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
40
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
45 class ComponentActivator extends ComponentActivatorAbstractBase implements BindingAwareConsumer {
46
47     private BundleContext context;
48
49     @Property
50     FlowProgrammerAdapter flow = new FlowProgrammerAdapter;
51
52     @Property
53     InventoryAndReadAdapter inventory = new InventoryAndReadAdapter;
54
55     @Property
56     DataPacketAdapter dataPacket = new DataPacketAdapter;
57
58     @Property
59     INodeFactory nodeFactory = new MDSalNodeFactory
60
61     @Property
62     INodeConnectorFactory nodeConnectorFactory = new MDSalNodeConnectorFactory
63     
64     @Property
65     TopologyAdapter topology = new TopologyAdapter
66     
67     @Property
68     TopologyProvider tpProvider = new TopologyProvider()
69
70     @Property
71     DataPacketServiceAdapter dataPacketService = new DataPacketServiceAdapter()
72
73
74
75     override protected init() {
76         Node.NodeIDType.registerIDType(MD_SAL_TYPE, String);
77         NodeConnector.NodeConnectorIDType.registerIDType(MD_SAL_TYPE, String, MD_SAL_TYPE);
78     }
79
80     override start(BundleContext context) {
81         super.start(context)
82         this.context = context;
83     }
84
85     def setBroker(BindingAwareBroker broker) {
86         broker.registerConsumer(this, context)
87     }
88
89     override onSessionInitialized(ConsumerContext session) {
90         val subscribe = session.getSALService(NotificationService)
91
92         // Registration of Flow Service
93         flow.delegate = session.getRpcService(SalFlowService)
94         flow.dataBrokerService = session.getSALService(DataBrokerService);
95         subscribe.registerNotificationListener(flow);
96
97         // Data Packet Service
98         subscribe.registerNotificationListener(inventory);
99         dataPacketService.delegate = session.getRpcService(PacketProcessingService)
100
101         // Inventory Service
102         inventory.dataService = session.getSALService(DataBrokerService);
103         inventory.flowStatisticsService = session.getRpcService(OpendaylightFlowStatisticsService);
104         inventory.flowTableStatisticsService = session.getRpcService(OpendaylightFlowTableStatisticsService);
105         inventory.nodeConnectorStatisticsService = session.getRpcService(OpendaylightPortStatisticsService);
106         inventory.topologyDiscovery = session.getRpcService(FlowTopologyDiscoveryService);
107                 inventory.dataProviderService = session.getSALService(DataProviderService)
108                 topology.dataService = session.getSALService(DataProviderService)
109                 tpProvider.dataService = session.getSALService(DataProviderService)
110
111
112                 tpProvider.start();
113
114         subscribe.registerNotificationListener(dataPacket)
115
116     }
117
118     override protected getGlobalImplementations() {
119         return Arrays.asList(this, flow, inventory, dataPacket, nodeFactory, nodeConnectorFactory,topology,tpProvider)
120     }
121
122     override protected configureGlobalInstance(Component c, Object imp) {
123         configure(imp, c);
124     }
125
126     override protected getImplementations() {
127         return Arrays.asList(dataPacketService)
128     }
129
130     override protected configureInstance(Component c, Object imp, String containerName) {
131         instanceConfigure(imp, c, containerName);
132     }
133
134     private def dispatch configure(MDSalNodeFactory imp, Component it) {
135         setInterface(INodeFactory.name, properties);
136     }
137
138     private def dispatch configure(MDSalNodeConnectorFactory imp, Component it) {
139         setInterface(INodeConnectorFactory.name, properties);
140     }
141
142     private def dispatch configure(ComponentActivator imp, Component it) {
143         add(
144             createServiceDependency().setService(BindingAwareBroker) //
145             .setCallbacks("setBroker", "setBroker") //
146             .setRequired(true))
147
148
149     }
150
151     private def dispatch configure(DataPacketAdapter imp, Component it) {
152         add(
153             createServiceDependency() //
154             .setService(IPluginOutDataPacketService) //
155             .setCallbacks("setDataPacketPublisher", "setDataPacketPublisher") //
156             .setRequired(false))
157     }
158
159     private def dispatch configure(FlowProgrammerAdapter imp, Component it) {
160         setInterface(IPluginInFlowProgrammerService.name, properties)
161         add(
162             createServiceDependency() //
163             .setService(IPluginOutFlowProgrammerService) //
164             .setCallbacks("setFlowProgrammerPublisher", "setFlowProgrammerPublisher") //
165             .setRequired(false))
166
167         add(
168             createServiceDependency() //
169             .setService(IClusterGlobalServices) //
170             .setCallbacks("setClusterGlobalServices", "unsetClusterGlobalServices") //
171             .setRequired(false))
172
173     }
174
175     private def dispatch instanceConfigure(DataPacketServiceAdapter imp, Component it, String containerName) {
176         setInterface(IPluginInDataPacketService.name, properties)
177     }
178
179     private def dispatch instanceConfigure(ComponentActivator imp, Component it, String containerName) {
180     }
181
182
183     private def dispatch configure(InventoryAndReadAdapter imp, Component it) {
184         setInterface(Arrays.asList(IPluginInInventoryService.name, IPluginInReadService.name), properties)
185         add(
186             createServiceDependency() //
187             .setService(IPluginOutReadService) //
188             .setCallbacks("setReadPublisher", "unsetReadPublisher") //
189             .setRequired(false))
190         add(
191             createServiceDependency() //
192             .setService(IPluginOutInventoryService) //
193             .setCallbacks("setInventoryPublisher", "unsetInventoryPublisher") //
194             .setRequired(false))
195         add(
196             createServiceDependency() //
197             .setService(IDiscoveryService) //
198             .setCallbacks("setDiscoveryPublisher", "setDiscoveryPublisher") //
199             .setRequired(false))
200
201         
202     }
203     
204     private def dispatch configure (TopologyAdapter imp, Component it) {
205         setInterface(Arrays.asList(IPluginInTopologyService.name), properties)
206         add(
207             createServiceDependency() //
208             .setService(IPluginOutTopologyService) //
209             .setCallbacks("setTopologyPublisher", "setTopologyPublisher") //
210             .setRequired(false))
211     }
212     
213     private def dispatch configure (TopologyProvider imp, Component it) {
214         add(
215             createServiceDependency() //
216             .setService(IPluginOutTopologyService) //
217             .setCallbacks("setTopologyPublisher", "setTopologyPublisher") //
218             .setRequired(false))
219     }
220
221     private def Dictionary<String, Object> properties() {
222         val props = new Hashtable<String, Object>();
223         props.put(GlobalConstants.PROTOCOLPLUGINTYPE.toString, MD_SAL_TYPE)
224         props.put("protocolName", MD_SAL_TYPE);
225         return props;
226     }
227 }