/** * 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.Collection; import java.util.Collections; import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ConsumerContext; import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext; import org.opendaylight.controller.sal.binding.api.BindingAwareProvider; import org.opendaylight.controller.sal.binding.api.NotificationService; import org.opendaylight.controller.sal.binding.api.data.DataBrokerService; import org.opendaylight.controller.sal.binding.api.data.DataProviderService; import org.opendaylight.controller.sal.compatibility.adsal.DataPacketServiceAdapter; import org.opendaylight.controller.sal.compatibility.topology.TopologyAdapter; import org.opendaylight.controller.sal.compatibility.topology.TopologyProvider; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalFlowService; 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.packet.service.rev130709.PacketProcessingService; import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.OpendaylightPortStatisticsService; import org.opendaylight.yangtools.yang.binding.RpcService; import com.google.common.base.Preconditions; class SalCompatibilityProvider implements BindingAwareProvider { private final ComponentActivator activator; public SalCompatibilityProvider(final ComponentActivator cmpAct) { this.activator = Preconditions.checkNotNull(cmpAct); } @Override public Collection getFunctionality() { return Collections.emptyList(); } @Override public Collection getImplementations() { return Collections.emptyList(); } @Override public void onSessionInitialized(final ConsumerContext session) { // No-op } @Override public void onSessionInitiated(final ProviderContext session) { final NotificationService subscribe = session.getSALService(NotificationService.class); final FlowProgrammerAdapter flow = activator.getFlow(); flow.setDelegate(session.getRpcService(SalFlowService.class)); flow.setDataBrokerService(session.getSALService(DataBrokerService.class)); // FIXME: remember registration for clean shutdown subscribe.registerNotificationListener(flow); final InventoryAndReadAdapter inv = activator.getInventory(); inv.setDataService(session.getSALService(DataBrokerService.class)); inv.setFlowStatisticsService(session.getRpcService(OpendaylightFlowStatisticsService.class)); inv.setFlowTableStatisticsService(session.getRpcService(OpendaylightFlowTableStatisticsService.class)); inv.setNodeConnectorStatisticsService(session.getRpcService(OpendaylightPortStatisticsService.class)); inv.setTopologyDiscovery(session.getRpcService(FlowTopologyDiscoveryService.class)); inv.setDataProviderService(session.getSALService(DataProviderService.class)); // FIXME: remember registration for clean shutdown subscribe.registerNotificationListener(inv); final DataPacketServiceAdapter dps = activator.getDataPacketService(); dps.setDelegate(session.getRpcService(PacketProcessingService.class)); final TopologyAdapter topo = activator.getTopology(); topo.setDataService(session.getSALService(DataProviderService.class)); final TopologyProvider tpp = activator.getTpProvider(); tpp.setDataService(session.getSALService(DataProviderService.class)); inv.startAdapter(); tpp.startAdapter(); subscribe.registerNotificationListener(activator.getDataPacket()); } }