Bump upstreams
[bgpcep.git] / pcep / tunnel / tunnel-provider / src / main / java / org / opendaylight / bgpcep / pcep / tunnel / provider / CreateTunnelInstructionExecutor.java
index ee8e415917584673f85fc0a0c325f8ff2d10b9e1..fd2c3a935c2a0c8f469e2ceb9f190ac9bfe1cd0a 100644 (file)
@@ -5,7 +5,6 @@
  * 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.bgpcep.pcep.tunnel.provider;
 
 import static java.util.Objects.requireNonNull;
@@ -14,22 +13,22 @@ import com.google.common.base.Preconditions;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.MoreExecutors;
-import java.util.List;
 import java.util.Optional;
+import java.util.Set;
 import java.util.concurrent.ExecutionException;
 import org.opendaylight.bgpcep.pcep.topology.spi.AbstractInstructionExecutor;
 import org.opendaylight.bgpcep.programming.topology.TopologyProgrammingUtil;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.ReadTransaction;
+import org.opendaylight.mdsal.binding.api.RpcService;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6AddressNoZone;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.AdministrativeStatus;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.Arguments2;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.Arguments2Builder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.PcepCreateP2pTunnelInput1;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.lsp.object.LspBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.AdministrativeStatus;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.Arguments2Builder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.PcepCreateP2pTunnelInput1;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.lsp.object.LspBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.bandwidth.object.BandwidthBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.classtype.object.ClassTypeBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.endpoints.AddressFamily;
@@ -39,12 +38,12 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.typ
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.endpoints.address.family.ipv6._case.Ipv6Builder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.endpoints.object.EndpointsObjBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.lspa.object.LspaBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev181109.AddLspInput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev181109.AddLspInputBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev181109.NetworkTopologyPcepService;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev181109.OperationResult;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev181109.add.lsp.args.Arguments;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev181109.add.lsp.args.ArgumentsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev220730.AddLsp;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev220730.AddLspInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev220730.AddLspInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev220730.OperationResult;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev220730.add.lsp.args.Arguments;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev220730.add.lsp.args.ArgumentsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.programming.rev181109.PcepCreateP2pTunnelInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.programming.rev130930.TpReference;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
@@ -62,15 +61,15 @@ import org.opendaylight.yangtools.yang.common.RpcResult;
 
 final class CreateTunnelInstructionExecutor extends AbstractInstructionExecutor {
     private final DataBroker dataProvider;
-    private final NetworkTopologyPcepService topologyService;
+    private final AddLsp addLsp;
     private final PcepCreateP2pTunnelInput p2pTunnelInput;
 
     CreateTunnelInstructionExecutor(final PcepCreateP2pTunnelInput p2pTunnelInput, final DataBroker dataProvider,
-            final NetworkTopologyPcepService topologyService) {
+            final RpcService rpcService) {
         super(p2pTunnelInput);
         this.p2pTunnelInput = p2pTunnelInput;
         this.dataProvider = dataProvider;
-        this.topologyService = topologyService;
+        addLsp = rpcService.getRpc(AddLsp.class);
     }
 
     private static void checkLinkIsnotExistent(final InstanceIdentifier<Topology> tii,
@@ -78,7 +77,7 @@ final class CreateTunnelInstructionExecutor extends AbstractInstructionExecutor
         final InstanceIdentifier<Link> lii = NodeChangedListener.linkIdentifier(tii, addLspInput.getNode(),
                 addLspInput.getName());
         try {
-            Preconditions.checkState(!rt.read(LogicalDatastoreType.OPERATIONAL, lii).get().isPresent());
+            Preconditions.checkState(!rt.exists(LogicalDatastoreType.OPERATIONAL, lii).get());
         } catch (final InterruptedException | ExecutionException e) {
             throw new IllegalStateException("Failed to ensure link existence.", e);
         }
@@ -111,12 +110,10 @@ final class CreateTunnelInstructionExecutor extends AbstractInstructionExecutor
         }
 
         // We need to have a ret now
-        Preconditions.checkArgument(ret != null, "Failed to find like Endpoint addresses");
-
-        return ret.get();
+        return ret.orElseThrow(() -> new IllegalArgumentException("Failed to find like Endpoint addresses"));
     }
 
-    private static Optional<AddressFamily> findIpv4(final List<IpAddress> srcs, final List<IpAddress> dsts) {
+    private static Optional<AddressFamily> findIpv4(final Set<IpAddress> srcs, final Set<IpAddress> dsts) {
         for (final IpAddress sc : srcs) {
             if (sc.getIpv4Address() != null) {
                 for (final IpAddress dc : dsts) {
@@ -133,7 +130,7 @@ final class CreateTunnelInstructionExecutor extends AbstractInstructionExecutor
         return Optional.empty();
     }
 
-    private static Optional<AddressFamily> findIpv6(final List<IpAddress> srcs, final List<IpAddress> dsts) {
+    private static Optional<AddressFamily> findIpv6(final Set<IpAddress> srcs, final Set<IpAddress> dsts) {
         for (final IpAddress sc : srcs) {
             if (sc.getIpv6Address() != null) {
                 for (final IpAddress dc : dsts) {
@@ -152,27 +149,25 @@ final class CreateTunnelInstructionExecutor extends AbstractInstructionExecutor
 
     @Override
     protected ListenableFuture<OperationResult> invokeOperation() {
-        try (ReadTransaction transaction = this.dataProvider.newReadOnlyTransaction()) {
+        try (ReadTransaction transaction = dataProvider.newReadOnlyTransaction()) {
             AddLspInput addLspInput = createAddLspInput(transaction);
 
-            return Futures.transform(
-                    this.topologyService.addLsp(addLspInput),
-                    RpcResult::getResult, MoreExecutors.directExecutor());
+            return Futures.transform(addLsp.invoke(addLspInput), RpcResult::getResult, MoreExecutors.directExecutor());
         }
     }
 
     private AddLspInput createAddLspInput(final ReadTransaction transaction) {
-        final InstanceIdentifier<Topology> tii = TopologyProgrammingUtil.topologyForInput(this.p2pTunnelInput);
-        final TpReader dr = new TpReader(transaction, tii, this.p2pTunnelInput.getDestination());
+        final InstanceIdentifier<Topology> tii = TopologyProgrammingUtil.topologyForInput(p2pTunnelInput);
+        final TpReader dr = new TpReader(transaction, tii, p2pTunnelInput.getDestination());
         final TerminationPoint dp = requireNonNull(dr.getTp());
 
-        final TpReader sr = new TpReader(transaction, tii, this.p2pTunnelInput.getSource());
+        final TpReader sr = new TpReader(transaction, tii, p2pTunnelInput.getSource());
         final TerminationPoint sp = requireNonNull(sr.getTp());
 
         final Node sn = requireNonNull(sr.getNode());
         final AddLspInputBuilder ab = new AddLspInputBuilder();
         ab.setNode(requireNonNull(TunelProgrammingUtil.supportingNode(sn)));
-        ab.setName(this.p2pTunnelInput.getSymbolicPathName());
+        ab.setName(p2pTunnelInput.getSymbolicPathName());
 
         checkLinkIsnotExistent(tii, ab, transaction);
 
@@ -182,20 +177,20 @@ final class CreateTunnelInstructionExecutor extends AbstractInstructionExecutor
 
     private Arguments buildArguments(final TerminationPoint sp, final TerminationPoint dp) {
         final ArgumentsBuilder args = new ArgumentsBuilder();
-        if (this.p2pTunnelInput.getBandwidth() != null) {
-            args.setBandwidth(new BandwidthBuilder().setBandwidth(this.p2pTunnelInput.getBandwidth()).build());
+        if (p2pTunnelInput.getBandwidth() != null) {
+            args.setBandwidth(new BandwidthBuilder().setBandwidth(p2pTunnelInput.getBandwidth()).build());
         }
-        if (this.p2pTunnelInput.getClassType() != null) {
-            args.setClassType(new ClassTypeBuilder().setClassType(this.p2pTunnelInput.getClassType()).build());
+        if (p2pTunnelInput.getClassType() != null) {
+            args.setClassType(new ClassTypeBuilder().setClassType(p2pTunnelInput.getClassType()).build());
         }
         args.setEndpointsObj(new EndpointsObjBuilder().setAddressFamily(buildAddressFamily(sp, dp)).build());
-        args.setEro(TunelProgrammingUtil.buildEro(this.p2pTunnelInput.getExplicitHops()));
-        args.setLspa(new LspaBuilder(this.p2pTunnelInput).build());
+        args.setEro(TunelProgrammingUtil.buildEro(p2pTunnelInput.getExplicitHops()));
+        args.setLspa(new LspaBuilder(p2pTunnelInput).build());
 
-        final AdministrativeStatus adminStatus = this.p2pTunnelInput.augmentation(PcepCreateP2pTunnelInput1.class)
+        final AdministrativeStatus adminStatus = p2pTunnelInput.augmentation(PcepCreateP2pTunnelInput1.class)
                 .getAdministrativeStatus();
         if (adminStatus != null) {
-            args.addAugmentation(Arguments2.class, new Arguments2Builder().setLsp(new LspBuilder()
+            args.addAugmentation(new Arguments2Builder().setLsp(new LspBuilder()
                     .setAdministrative(adminStatus == AdministrativeStatus.Active).build()).build());
         }
         return args.build();
@@ -209,24 +204,24 @@ final class CreateTunnelInstructionExecutor extends AbstractInstructionExecutor
         TpReader(final ReadTransaction rt, final InstanceIdentifier<Topology> topo, final TpReference ref) {
             this.rt = requireNonNull(rt);
 
-            this.nii = topo.child(Node.class, new NodeKey(ref.getNode()));
-            this.tii = this.nii.child(TerminationPoint.class, new TerminationPointKey(ref.getTp()));
+            nii = topo.child(Node.class, new NodeKey(ref.getNode()));
+            tii = nii.child(TerminationPoint.class, new TerminationPointKey(ref.getTp()));
         }
 
         private DataObject read(final InstanceIdentifier<?> id) {
             try {
-                return this.rt.read(LogicalDatastoreType.OPERATIONAL, id).get().get();
+                return rt.read(LogicalDatastoreType.OPERATIONAL, id).get().orElseThrow();
             } catch (final InterruptedException | ExecutionException e) {
                 throw new IllegalStateException("Failed to read data.", e);
             }
         }
 
-        private Node getNode() {
-            return (Node) read(this.nii);
+        Node getNode() {
+            return (Node) read(nii);
         }
 
-        private TerminationPoint getTp() {
-            return (TerminationPoint) read(this.tii);
+        TerminationPoint getTp() {
+            return (TerminationPoint) read(tii);
         }
     }
 }