X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fcompatibility%2Fsal-compatibility%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fcompatibility%2FComponentActivator.xtend;h=a59c2c1636514dba415dc933774ec4c6d16353cf;hp=b460edff7438f24e649d2178c55b4cfc89a354a7;hb=d644d63f392a3784586a77329817db462c228b51;hpb=e87fa215eac79bc76b0addbb1f5beebfaa8ca5f7 diff --git a/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/ComponentActivator.xtend b/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/ComponentActivator.xtend index b460edff74..a59c2c1636 100644 --- a/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/ComponentActivator.xtend +++ b/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/ComponentActivator.xtend @@ -1,37 +1,57 @@ +/* + * 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 org.opendaylight.controller.sal.core.ComponentActivatorAbstractBase -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey -import org.opendaylight.controller.sal.core.Node -import org.opendaylight.controller.sal.core.NodeConnector -import static org.opendaylight.controller.sal.compatibility.NodeMapping.* -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey -import org.apache.felix.dm.Component import java.util.Arrays -import org.opendaylight.yangtools.yang.binding.NotificationListener import java.util.Dictionary import java.util.Hashtable -import org.opendaylight.controller.sal.utils.GlobalConstants +import org.apache.felix.dm.Component import org.opendaylight.controller.sal.binding.api.BindingAwareBroker -import org.opendaylight.controller.sal.flowprogrammer.IPluginInFlowProgrammerService -import org.opendaylight.controller.sal.inventory.IPluginInInventoryService -import org.opendaylight.controller.sal.reader.IPluginInReadService -import org.opendaylight.controller.sal.flowprogrammer.IPluginOutFlowProgrammerService -import org.opendaylight.controller.sal.binding.api.BindingAwareConsumer import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ConsumerContext -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalFlowService +import org.opendaylight.controller.sal.binding.api.BindingAwareConsumer import org.opendaylight.controller.sal.binding.api.NotificationService import org.opendaylight.controller.sal.binding.api.data.DataBrokerService -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.OpendaylightFlowStatisticsService +import org.opendaylight.controller.sal.binding.api.data.DataProviderService +import org.opendaylight.controller.sal.compatibility.topology.TopologyAdapter +import org.opendaylight.controller.sal.core.ComponentActivatorAbstractBase +import org.opendaylight.controller.sal.core.Node +import org.opendaylight.controller.sal.core.NodeConnector +import org.opendaylight.controller.sal.discovery.IDiscoveryService +import org.opendaylight.controller.sal.flowprogrammer.IPluginInFlowProgrammerService +import org.opendaylight.controller.sal.flowprogrammer.IPluginOutFlowProgrammerService +import org.opendaylight.controller.sal.inventory.IPluginInInventoryService +import org.opendaylight.controller.sal.inventory.IPluginOutInventoryService import org.opendaylight.controller.sal.packet.IPluginOutDataPacketService -import org.osgi.framework.BundleContext +import org.opendaylight.controller.sal.reader.IPluginInReadService import org.opendaylight.controller.sal.reader.IPluginOutReadService -import org.opendaylight.controller.sal.inventory.IPluginOutInventoryService -import org.opendaylight.controller.sal.discovery.IDiscoveryService +import org.opendaylight.controller.sal.topology.IPluginInTopologyService import org.opendaylight.controller.sal.topology.IPluginOutTopologyService +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 org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.OpendaylightPortStatisticsService +import org.osgi.framework.BundleContext -class ComponentActivator extends ComponentActivatorAbstractBase implements BindingAwareConsumer { +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 { private BundleContext context; @@ -44,9 +64,26 @@ class ComponentActivator extends ComponentActivatorAbstractBase implements Bindi @Property DataPacketAdapter dataPacket = new DataPacketAdapter; + @Property + INodeFactory nodeFactory = new MDSalNodeFactory + + @Property + INodeConnectorFactory nodeConnectorFactory = new MDSalNodeConnectorFactory + + @Property + TopologyAdapter topology = new TopologyAdapter + + @Property + TopologyProvider tpProvider = new TopologyProvider() + + @Property + DataPacketServiceAdapter dataPacketService = new DataPacketServiceAdapter() + + + override protected init() { - Node.NodeIDType.registerIDType(MD_SAL_TYPE, NodeKey); - NodeConnector.NodeConnectorIDType.registerIDType(MD_SAL_TYPE, NodeConnectorKey, MD_SAL_TYPE); + Node.NodeIDType.registerIDType(MD_SAL_TYPE, String); + NodeConnector.NodeConnectorIDType.registerIDType(MD_SAL_TYPE, String, MD_SAL_TYPE); } override start(BundleContext context) { @@ -55,34 +92,32 @@ class ComponentActivator extends ComponentActivatorAbstractBase implements Bindi } 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); + override protected getGlobalImplementations() { + return Arrays.asList(this, flow, inventory, dataPacket, nodeFactory, nodeConnectorFactory,topology,tpProvider) + } - // Inventory Service - inventory.dataService = session.getSALService(DataBrokerService); - inventory.flowStatisticsService = session.getRpcService(OpendaylightFlowStatisticsService); - inventory.topologyDiscovery = session.getRpcService(FlowTopologyDiscoveryService); + override protected configureGlobalInstance(Component c, Object imp) { + configure(imp, c); + } - subscribe.registerNotificationListener(dataPacket) + override protected getImplementations() { + return Arrays.asList(dataPacketService) + } + override protected configureInstance(Component c, Object imp, String containerName) { + instanceConfigure(imp, c, containerName); } - override protected getGlobalImplementations() { - return Arrays.asList(this, flow, inventory, dataPacket) + private def dispatch configure(MDSalNodeFactory imp, Component it) { + setInterface(INodeFactory.name, properties); } - override protected configureGlobalInstance(Component c, Object imp) { - configure(imp, c); + private def dispatch configure(MDSalNodeConnectorFactory imp, Component it) { + setInterface(INodeConnectorFactory.name, properties); } private def dispatch configure(ComponentActivator imp, Component it) { @@ -90,6 +125,8 @@ class ComponentActivator extends ComponentActivatorAbstractBase implements Bindi createServiceDependency().setService(BindingAwareBroker) // .setCallbacks("setBroker", "setBroker") // .setRequired(true)) + + } private def dispatch configure(DataPacketAdapter imp, Component it) { @@ -107,36 +144,117 @@ class ComponentActivator extends ComponentActivatorAbstractBase implements Bindi .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( createServiceDependency() // .setService(IPluginOutReadService) // - .setCallbacks("setReadPublisher", "setReadPublisher") // + .setCallbacks("setReadPublisher", "unsetReadPublisher") // .setRequired(false)) add( createServiceDependency() // .setService(IPluginOutInventoryService) // - .setCallbacks("setInventoryPublisher", "setInventoryPublisher") // + .setCallbacks("setInventoryPublisher", "unsetInventoryPublisher") // + .setRequired(false)) + add( + createServiceDependency() // + .setService(IDiscoveryService) // + .setCallbacks("setDiscoveryPublisher", "setDiscoveryPublisher") // .setRequired(false)) + + + } + + private def dispatch configure (TopologyAdapter imp, Component it) { + setInterface(Arrays.asList(IPluginInTopologyService.name), properties) add( createServiceDependency() // .setService(IPluginOutTopologyService) // .setCallbacks("setTopologyPublisher", "setTopologyPublisher") // .setRequired(false)) + } + + private def dispatch configure (TopologyProvider imp, Component it) { add( createServiceDependency() // - .setService(IDiscoveryService) // - .setCallbacks("setDiscoveryPublisher", "setDiscoveryPublisher") // + .setService(IPluginOutTopologyService) // + .setCallbacks("setTopologyPublisher", "setTopologyPublisher") // .setRequired(false)) - } private def Dictionary properties() { val props = new Hashtable(); props.put(GlobalConstants.PROTOCOLPLUGINTYPE.toString, MD_SAL_TYPE) + props.put("protocolName", MD_SAL_TYPE); 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) + } +}