Added composed Activator for MD-SAL to AD-SAL translation
[controller.git] / opendaylight / md-sal / sal-compability / src / main / java / org / opendaylight / controller / sal / compability / ComponentActivator.xtend
1 package org.opendaylight.controller.sal.compability
2
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
31 class ComponentActivator extends ComponentActivatorAbstractBase implements BindingAwareConsumer {
32
33     private BundleContext context;
34
35     @Property
36     FlowProgrammerAdapter flow = new FlowProgrammerAdapter;
37
38     @Property
39     InventoryAndReadAdapter inventory = new InventoryAndReadAdapter;
40
41     @Property
42     DataPacketAdapter dataPacket = new DataPacketAdapter;
43
44     override protected init() {
45         Node.NodeIDType.registerIDType(MD_SAL_TYPE, NodeKey);
46         NodeConnector.NodeConnectorIDType.registerIDType(MD_SAL_TYPE, NodeConnectorKey, MD_SAL_TYPE);
47     }
48
49     override start(BundleContext context) {
50         super.start(context)
51         this.context = context;
52     }
53
54     def setBroker(BindingAwareBroker broker) {
55         broker.registerConsumer(this, context)
56     }
57
58     override onSessionInitialized(ConsumerContext session) {
59         val subscribe = session.getSALService(NotificationService)
60
61         // Registration of Flow Service
62         flow.delegate = session.getRpcService(SalFlowService)
63         subscribe.registerNotificationListener(flow);
64
65         // Data Packet Service
66         subscribe.registerNotificationListener(inventory);
67
68         // Inventory Service
69         inventory.dataService = session.getSALService(DataBrokerService);
70         inventory.flowStatisticsService = session.getRpcService(OpendaylightFlowStatisticsService);
71
72         subscribe.registerNotificationListener(dataPacket)
73
74     }
75
76     override protected getGlobalImplementations() {
77         return Arrays.asList(this, flow, inventory, dataPacket)
78     }
79
80     override protected configureGlobalInstance(Component c, Object imp) {
81         configure(imp, c);
82     }
83
84     private def dispatch configure(ComponentActivator imp, Component it) {
85         add(
86             createServiceDependency().setService(BindingAwareBroker) //
87             .setCallbacks("setBroker", "setBroker") //
88             .setRequired(true))
89     }
90
91     private def dispatch configure(DataPacketAdapter imp, Component it) {
92         add(
93             createServiceDependency() //
94             .setService(IPluginOutDataPacketService) //
95             .setCallbacks("setDataPacketPublisher", "setDataPacketPublisher") //
96             .setRequired(true))
97     }
98
99     private def dispatch configure(FlowProgrammerAdapter imp, Component it) {
100         setInterface(IPluginInFlowProgrammerService.name, properties)
101         add(
102             createServiceDependency() //
103             .setService(IPluginOutFlowProgrammerService) //
104             .setCallbacks("setFlowProgrammerPublisher", "setFlowProgrammerPublisher") //
105             .setRequired(true))
106     }
107
108     private def dispatch configure(InventoryAndReadAdapter imp, Component it) {
109         setInterface(Arrays.asList(IPluginInInventoryService.name, IPluginInReadService.name), properties)
110         add(
111             createServiceDependency() //
112             .setService(IPluginOutReadService) //
113             .setCallbacks("setReadPublisher", "setReadPublisher") //
114             .setRequired(true))
115         add(
116             createServiceDependency() //
117             .setService(IPluginOutInventoryService) //
118             .setCallbacks("setInventoryPublisher", "setInventoryPublisher") //
119             .setRequired(true))
120     }
121
122     private def Dictionary<String, Object> properties() {
123         val props = new Hashtable<String, Object>();
124         props.put(GlobalConstants.PROTOCOLPLUGINTYPE.toString, MD_SAL_TYPE)
125         return props;
126     }
127 }