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