+/*
+ * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
package org.opendaylight.controller.sal.compatibility
import java.util.Arrays
import org.opendaylight.controller.sal.utils.GlobalConstants
import org.opendaylight.controller.sal.utils.INodeConnectorFactory
import org.opendaylight.controller.sal.utils.INodeFactory
+import org.opendaylight.controller.clustering.services.IClusterGlobalServices
+import org.opendaylight.controller.sal.packet.IPluginInDataPacketService
+
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalFlowService
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketProcessingService
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.OpendaylightFlowStatisticsService
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.table.statistics.rev131215.OpendaylightFlowTableStatisticsService
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.topology.discovery.rev130819.FlowTopologyDiscoveryService
import static org.opendaylight.controller.sal.compatibility.NodeMapping.*
import org.opendaylight.controller.sal.compatibility.topology.TopologyProvider
+import org.opendaylight.controller.sal.compatibility.adsal.DataPacketServiceAdapter
+import org.opendaylight.controller.sal.binding.api.BindingAwareProvider
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext
-class ComponentActivator extends ComponentActivatorAbstractBase implements BindingAwareConsumer {
+class ComponentActivator extends ComponentActivatorAbstractBase {
private BundleContext context;
@Property
TopologyProvider tpProvider = new TopologyProvider()
+ @Property
+ DataPacketServiceAdapter dataPacketService = new DataPacketServiceAdapter()
+
+
override protected init() {
Node.NodeIDType.registerIDType(MD_SAL_TYPE, String);
}
def setBroker(BindingAwareBroker broker) {
- broker.registerConsumer(this, context)
+ broker.registerProvider(new SalCompatibilityProvider(this), context)
}
- override onSessionInitialized(ConsumerContext session) {
- val subscribe = session.getSALService(NotificationService)
-
- // Registration of Flow Service
- flow.delegate = session.getRpcService(SalFlowService)
- subscribe.registerNotificationListener(flow);
-
- // Data Packet Service
- subscribe.registerNotificationListener(inventory);
-
- // Inventory Service
- inventory.dataService = session.getSALService(DataBrokerService);
- inventory.flowStatisticsService = session.getRpcService(OpendaylightFlowStatisticsService);
- inventory.flowTableStatisticsService = session.getRpcService(OpendaylightFlowTableStatisticsService);
- inventory.nodeConnectorStatisticsService = session.getRpcService(OpendaylightPortStatisticsService);
- inventory.topologyDiscovery = session.getRpcService(FlowTopologyDiscoveryService);
- inventory.dataProviderService = session.getSALService(DataProviderService)
- topology.dataService = session.getSALService(DataProviderService)
- tpProvider.dataService = session.getSALService(DataProviderService)
- tpProvider.start();
-
- subscribe.registerNotificationListener(dataPacket)
-
- }
override protected getGlobalImplementations() {
return Arrays.asList(this, flow, inventory, dataPacket, nodeFactory, nodeConnectorFactory,topology,tpProvider)
configure(imp, c);
}
+ override protected getImplementations() {
+ return Arrays.asList(dataPacketService)
+ }
+
+ override protected configureInstance(Component c, Object imp, String containerName) {
+ instanceConfigure(imp, c, containerName);
+ }
+
private def dispatch configure(MDSalNodeFactory imp, Component it) {
setInterface(INodeFactory.name, properties);
}
.setService(IPluginOutFlowProgrammerService) //
.setCallbacks("setFlowProgrammerPublisher", "setFlowProgrammerPublisher") //
.setRequired(false))
+
+ add(
+ createServiceDependency() //
+ .setService(IClusterGlobalServices) //
+ .setCallbacks("setClusterGlobalServices", "unsetClusterGlobalServices") //
+ .setRequired(false))
+
+ }
+
+ private def dispatch instanceConfigure(DataPacketServiceAdapter imp, Component it, String containerName) {
+ setInterface(IPluginInDataPacketService.name, properties)
+ }
+
+ private def dispatch instanceConfigure(ComponentActivator imp, Component it, String containerName) {
}
+
private def dispatch configure(InventoryAndReadAdapter imp, Component it) {
setInterface(Arrays.asList(IPluginInInventoryService.name, IPluginInReadService.name), properties)
add(
add(
createServiceDependency() //
.setService(IPluginOutInventoryService) //
- .setCallbacks("setInventoryPublisher", "setInventoryPublisher") //
+ .setCallbacks("setInventoryPublisher", "unsetInventoryPublisher") //
.setRequired(false))
add(
createServiceDependency() //
.setService(IDiscoveryService) //
.setCallbacks("setDiscoveryPublisher", "setDiscoveryPublisher") //
.setRequired(false))
+
}
return props;
}
}
+package class SalCompatibilityProvider implements BindingAwareProvider {
+
+ private val ComponentActivator activator;
+
+ new(ComponentActivator cmpAct) {
+ activator = cmpAct;
+ }
+
+ override getFunctionality() {
+ // Noop
+ }
+
+ override getImplementations() {
+ // Noop
+ }
+
+
+ override onSessionInitialized(ConsumerContext session) {
+ // Noop
+ }
+
+
+ override onSessionInitiated(ProviderContext session) {
+ val it = activator
+ val subscribe = session.getSALService(NotificationService)
+
+ // Registration of Flow Service
+ flow.delegate = session.getRpcService(SalFlowService)
+ flow.dataBrokerService = session.getSALService(DataBrokerService);
+ subscribe.registerNotificationListener(flow);
+
+ // Data Packet Service
+ subscribe.registerNotificationListener(inventory);
+ dataPacketService.delegate = session.getRpcService(PacketProcessingService)
+
+ // Inventory Service
+ inventory.dataService = session.getSALService(DataBrokerService);
+ inventory.flowStatisticsService = session.getRpcService(OpendaylightFlowStatisticsService);
+ inventory.flowTableStatisticsService = session.getRpcService(OpendaylightFlowTableStatisticsService);
+ inventory.nodeConnectorStatisticsService = session.getRpcService(OpendaylightPortStatisticsService);
+ inventory.topologyDiscovery = session.getRpcService(FlowTopologyDiscoveryService);
+ inventory.dataProviderService = session.getSALService(DataProviderService)
+ topology.dataService = session.getSALService(DataProviderService)
+ tpProvider.dataService = session.getSALService(DataProviderService)
+
+ inventory.start();
+
+ tpProvider.start();
+
+ subscribe.registerNotificationListener(dataPacket)
+ }
+}