2 * Copyright (c) 2017 Hewlett Packard Enterprise, Co. 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
9 package org.opendaylight.netvirt.federation.plugin;
11 import com.google.common.util.concurrent.Futures;
13 import java.util.ArrayList;
14 import java.util.List;
15 import java.util.concurrent.Future;
17 import javax.annotation.PostConstruct;
18 import javax.inject.Inject;
19 import javax.inject.Singleton;
21 import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.federation.plugin.manager.rev170219.RoutedContainer;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.federation.plugin.manager.rev170219.routed.container.RouteKeyItem;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.federation.plugin.manager.rev170219.routed.container.RouteKeyItemKey;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.federation.plugin.routed.rpc.rev170219.FederationPluginRoutedRpcService;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.federation.plugin.routed.rpc.rev170219.UpdateFederatedNetworksInputBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.federation.plugin.rpc.rev170219.FederationPluginRpcService;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.federation.plugin.rpc.rev170219.UpdateFederatedNetworksInput;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.federation.plugin.rpc.rev170219.update.federated.networks.input.FederatedNetworksIn;
30 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
31 import org.opendaylight.yangtools.yang.common.RpcError.ErrorType;
32 import org.opendaylight.yangtools.yang.common.RpcResult;
33 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
34 import org.slf4j.Logger;
35 import org.slf4j.LoggerFactory;
38 public class FederationPluginRpcServiceImpl implements FederationPluginRpcService {
39 private static final Logger LOG = LoggerFactory.getLogger(FederationPluginRpcServiceImpl.class);
41 private final RpcProviderRegistry rpcRegistry;
44 public FederationPluginRpcServiceImpl(final RpcProviderRegistry rpcRegistry) {
45 this.rpcRegistry = rpcRegistry;
51 rpcRegistry.addRpcImplementation(FederationPluginRpcService.class, this);
55 public Future<RpcResult<Void>> updateFederatedNetworks(UpdateFederatedNetworksInput input) {
56 FederationPluginRoutedRpcService routedRpcService = rpcRegistry
57 .getRpcService(FederationPluginRoutedRpcService.class);
58 if (routedRpcService == null) {
59 return Futures.immediateFuture(RpcResultBuilder.<Void>failed()
60 .withError(ErrorType.RPC, "Failed to get routed RPC service for federation plugin").build());
63 List<FederatedNetworksIn> federatedNetworks = input.getFederatedNetworksIn();
64 UpdateFederatedNetworksInputBuilder builder = new UpdateFederatedNetworksInputBuilder()
65 .setFederatedNetworksIn(convertFederatedNetworks(federatedNetworks))
66 .setRouteKeyItem(buildtRouteKeyInstanceIdentifier());
68 return routedRpcService.updateFederatedNetworks(builder.build());
71 private static List<org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.federation.plugin.routed.rpc.rev170219
72 .update.federated.networks.input.FederatedNetworksIn> convertFederatedNetworks(
73 List<FederatedNetworksIn> federatedNetworks) {
74 if (federatedNetworks == null) {
78 List<org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.federation.plugin.routed.rpc.rev170219
79 .update.federated.networks.input.FederatedNetworksIn> routedFederatedNetworks = new ArrayList<>();
80 for (FederatedNetworksIn federatedNetwork : federatedNetworks) {
81 routedFederatedNetworks
82 .add(new org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.federation.plugin.routed.rpc
83 .rev170219.update.federated.networks.input.FederatedNetworksInBuilder(
84 federatedNetwork).build());
87 return routedFederatedNetworks;
90 private static InstanceIdentifier<RouteKeyItem> buildtRouteKeyInstanceIdentifier() {
91 return InstanceIdentifier.create(RoutedContainer.class).child(RouteKeyItem.class,
92 new RouteKeyItemKey(FederationPluginConstants.RPC_ROUTE_KEY));