2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.controller.sal.compatibility
10 import java.util.Arrays
11 import java.util.Dictionary
12 import java.util.Hashtable
13 import org.apache.felix.dm.Component
14 import org.opendaylight.controller.clustering.services.IClusterGlobalServices
15 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker
16 import org.opendaylight.controller.sal.compatibility.adsal.DataPacketServiceAdapter
17 import org.opendaylight.controller.sal.compatibility.topology.TopologyAdapter
18 import org.opendaylight.controller.sal.compatibility.topology.TopologyProvider
19 import org.opendaylight.controller.sal.core.ComponentActivatorAbstractBase
20 import org.opendaylight.controller.sal.core.Node
21 import org.opendaylight.controller.sal.core.NodeConnector
22 import org.opendaylight.controller.sal.discovery.IDiscoveryService
23 import org.opendaylight.controller.sal.flowprogrammer.IPluginInFlowProgrammerService
24 import org.opendaylight.controller.sal.flowprogrammer.IPluginOutFlowProgrammerService
25 import org.opendaylight.controller.sal.inventory.IPluginInInventoryService
26 import org.opendaylight.controller.sal.inventory.IPluginOutInventoryService
27 import org.opendaylight.controller.sal.packet.IPluginInDataPacketService
28 import org.opendaylight.controller.sal.packet.IPluginOutDataPacketService
29 import org.opendaylight.controller.sal.reader.IPluginInReadService
30 import org.opendaylight.controller.sal.reader.IPluginOutReadService
31 import org.opendaylight.controller.sal.topology.IPluginInTopologyService
32 import org.opendaylight.controller.sal.topology.IPluginOutTopologyService
33 import org.opendaylight.controller.sal.utils.GlobalConstants
34 import org.opendaylight.controller.sal.utils.INodeConnectorFactory
35 import org.opendaylight.controller.sal.utils.INodeFactory
36 import org.osgi.framework.BundleContext
38 import static org.opendaylight.controller.sal.compatibility.NodeMapping.*
40 class ComponentActivator extends ComponentActivatorAbstractBase {
42 private BundleContext context;
45 FlowProgrammerAdapter flow = new FlowProgrammerAdapter;
48 InventoryAndReadAdapter inventory = new InventoryAndReadAdapter;
51 DataPacketAdapter dataPacket = new DataPacketAdapter;
54 INodeFactory nodeFactory = new MDSalNodeFactory
57 INodeConnectorFactory nodeConnectorFactory = new MDSalNodeConnectorFactory
60 TopologyAdapter topology = new TopologyAdapter
63 TopologyProvider tpProvider = new TopologyProvider()
66 DataPacketServiceAdapter dataPacketService = new DataPacketServiceAdapter()
70 override protected init() {
71 Node.NodeIDType.registerIDType(MD_SAL_TYPE, String);
72 NodeConnector.NodeConnectorIDType.registerIDType(MD_SAL_TYPE, String, MD_SAL_TYPE);
75 override start(BundleContext context) {
77 this.context = context;
80 def setBroker(BindingAwareBroker broker) {
81 broker.registerProvider(new SalCompatibilityProvider(this), context)
85 override protected getGlobalImplementations() {
86 return Arrays.asList(this, flow, inventory, dataPacket, nodeFactory, nodeConnectorFactory,topology,tpProvider)
89 override protected configureGlobalInstance(Component c, Object imp) {
93 override protected getImplementations() {
94 return Arrays.asList(dataPacketService)
97 override protected configureInstance(Component c, Object imp, String containerName) {
98 instanceConfigure(imp, c, containerName);
101 private def dispatch configure(MDSalNodeFactory imp, Component it) {
102 setInterface(INodeFactory.name, properties);
105 private def dispatch configure(MDSalNodeConnectorFactory imp, Component it) {
106 setInterface(INodeConnectorFactory.name, properties);
109 private def dispatch configure(ComponentActivator imp, Component it) {
111 createServiceDependency().setService(BindingAwareBroker) //
112 .setCallbacks("setBroker", "setBroker") //
118 private def dispatch configure(DataPacketAdapter imp, Component it) {
120 createServiceDependency() //
121 .setService(IPluginOutDataPacketService) //
122 .setCallbacks("setDataPacketPublisher", "setDataPacketPublisher") //
126 private def dispatch configure(FlowProgrammerAdapter imp, Component it) {
127 setInterface(IPluginInFlowProgrammerService.name, properties)
129 createServiceDependency() //
130 .setService(IPluginOutFlowProgrammerService) //
131 .setCallbacks("setFlowProgrammerPublisher", "setFlowProgrammerPublisher") //
135 createServiceDependency() //
136 .setService(IClusterGlobalServices) //
137 .setCallbacks("setClusterGlobalServices", "unsetClusterGlobalServices") //
142 private def dispatch instanceConfigure(DataPacketServiceAdapter imp, Component it, String containerName) {
143 setInterface(IPluginInDataPacketService.name, properties)
146 private def dispatch instanceConfigure(ComponentActivator imp, Component it, String containerName) {
150 private def dispatch configure(InventoryAndReadAdapter imp, Component it) {
151 setInterface(Arrays.asList(IPluginInInventoryService.name, IPluginInReadService.name), properties)
153 createServiceDependency() //
154 .setService(IPluginOutReadService) //
155 .setCallbacks("setReadPublisher", "unsetReadPublisher") //
158 createServiceDependency() //
159 .setService(IPluginOutInventoryService) //
160 .setCallbacks("setInventoryPublisher", "unsetInventoryPublisher") //
163 createServiceDependency() //
164 .setService(IDiscoveryService) //
165 .setCallbacks("setDiscoveryPublisher", "setDiscoveryPublisher") //
171 private def dispatch configure (TopologyAdapter imp, Component it) {
172 setInterface(Arrays.asList(IPluginInTopologyService.name), properties)
174 createServiceDependency() //
175 .setService(IPluginOutTopologyService) //
176 .setCallbacks("setTopologyPublisher", "setTopologyPublisher") //
180 private def dispatch configure (TopologyProvider imp, Component it) {
182 createServiceDependency() //
183 .setService(IPluginOutTopologyService) //
184 .setCallbacks("setTopologyPublisher", "setTopologyPublisher") //
188 private def Dictionary<String, Object> properties() {
189 val props = new Hashtable<String, Object>();
190 props.put(GlobalConstants.PROTOCOLPLUGINTYPE.toString, MD_SAL_TYPE)
191 props.put("protocolName", MD_SAL_TYPE);