Bump upstreams
[bgpcep.git] / pcep / server / server-provider / src / main / java / org / opendaylight / bgpcep / pcep / server / provider / ManagedTePath.java
index 96e3c6abb8a93272e69ca532f9e1d9005aca74c5..a3f22345d57cbfaadc022765167952692a3baa9b 100644 (file)
@@ -18,7 +18,7 @@ import com.google.common.util.concurrent.MoreExecutors;
 import java.nio.ByteBuffer;
 import java.util.Collections;
 import java.util.List;
-import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.graph.ConnectedEdge;
 import org.opendaylight.graph.ConnectedEdgeTrigger;
 import org.opendaylight.graph.ConnectedGraph;
@@ -30,15 +30,15 @@ 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.graph.rev191125.Edge;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.graph.rev191125.Vertex;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.graph.rev191125.edge.attributes.UnreservedBandwidth;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.graph.rev220720.Edge;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.graph.rev220720.Vertex;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.graph.rev220720.edge.attributes.UnreservedBandwidth;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ieee754.rev130819.Float32;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.network.concepts.rev131125.Bandwidth;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.network.topology.rev140113.NetworkTopologyRef;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.path.computation.rev220310.AddressFamily;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.path.computation.rev220310.ComputationStatus;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.path.computation.rev220310.path.descriptions.PathDescription;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.path.computation.rev220324.AddressFamily;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.path.computation.rev220324.ComputationStatus;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.path.computation.rev220324.path.descriptions.PathDescription;
 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.Arguments3Builder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.lsp.object.LspBuilder;
@@ -59,19 +59,21 @@ 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.lsp.attributes.MetricsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.metric.object.MetricBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.path.setup.type.tlv.PathSetupTypeBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.AddLspInput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.AddLspInputBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.AddLspOutput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.NetworkTopologyPcepService;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.Node1;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.RemoveLspInput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.RemoveLspInputBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.RemoveLspOutput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.UpdateLspInput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.UpdateLspInputBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.UpdateLspOutput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.add.lsp.args.ArgumentsBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.pcep.client.attributes.PathComputationClient;
+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.AddLspOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev220730.Node1;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev220730.RemoveLsp;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev220730.RemoveLspInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev220730.RemoveLspInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev220730.RemoveLspOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev220730.UpdateLsp;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev220730.UpdateLspInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev220730.UpdateLspInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev220730.UpdateLspOutput;
+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.pcep.rev220730.pcep.client.attributes.PathComputationClient;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
@@ -96,29 +98,30 @@ public class ManagedTePath implements ConnectedEdgeTrigger, ConnectedVertexTrigg
 
     private static final Logger LOG = LoggerFactory.getLogger(ManagedTePath.class);
 
-    public ManagedTePath(ManagedTeNode teNode, InstanceIdentifier<Topology> topology) {
+    public ManagedTePath(final ManagedTeNode teNode, final InstanceIdentifier<Topology> topology) {
         this.teNode = requireNonNull(teNode);
-        this.pcepTopology = requireNonNull(topology);
-        this.pccIdentifier = pcepTopology.child(Node.class, new NodeKey(teNode.getId())).augmentation(Node1.class)
+        pcepTopology = requireNonNull(topology);
+        pccIdentifier = pcepTopology.child(Node.class, new NodeKey(teNode.getId())).augmentation(Node1.class)
                 .child(PathComputationClient.class).augmentation(PathComputationClient1.class);
     }
 
-    public ManagedTePath(ManagedTeNode teNode, final ConfiguredLsp lsp, InstanceIdentifier<Topology> topology) {
-        this.cfgLsp = requireNonNull(lsp);
+    public ManagedTePath(final ManagedTeNode teNode, final ConfiguredLsp lsp,
+            final InstanceIdentifier<Topology> topology) {
+        cfgLsp = requireNonNull(lsp);
         this.teNode = requireNonNull(teNode);
-        this.pcepTopology = requireNonNull(topology);
-        this.pccIdentifier = pcepTopology.child(Node.class, new NodeKey(teNode.getId())).augmentation(Node1.class)
+        pcepTopology = requireNonNull(topology);
+        pccIdentifier = pcepTopology.child(Node.class, new NodeKey(teNode.getId())).augmentation(Node1.class)
                 .child(PathComputationClient.class).augmentation(PathComputationClient1.class);
     }
 
-    public ManagedTePath(ManagedTeNode teNode, final ManagedTePath mngPath) {
+    public ManagedTePath(final ManagedTeNode teNode, final ManagedTePath mngPath) {
         checkArgument(mngPath != null, "Managed TE Path is mandatory. Can't be null or empty!");
-        this.cfgLsp = mngPath.getLsp();
-        this.sent = mngPath.isSent();
-        this.type = mngPath.getType();
+        cfgLsp = mngPath.getLsp();
+        sent = mngPath.isSent();
+        type = mngPath.getType();
         this.teNode = requireNonNull(teNode);
-        this.pcepTopology = mngPath.getTopology();
-        this.pccIdentifier = pcepTopology.child(Node.class, new NodeKey(teNode.getId())).augmentation(Node1.class)
+        pcepTopology = mngPath.getTopology();
+        pccIdentifier = pcepTopology.child(Node.class, new NodeKey(teNode.getId())).augmentation(Node1.class)
                 .child(PathComputationClient.class).augmentation(PathComputationClient1.class);
     }
 
@@ -139,12 +142,12 @@ public class ManagedTePath implements ConnectedEdgeTrigger, ConnectedVertexTrigg
     }
 
     public ManagedTePath setConfiguredLsp(final ConfiguredLsp lsp) {
-        this.prevLsp = this.cfgLsp;
-        this.cfgLsp = lsp;
+        prevLsp = cfgLsp;
+        cfgLsp = lsp;
         return this;
     }
 
-    public ManagedTePath setType(PathType type) {
+    public ManagedTePath setType(final PathType type) {
         this.type = type;
         return this;
     }
@@ -154,7 +157,7 @@ public class ManagedTePath implements ConnectedEdgeTrigger, ConnectedVertexTrigg
      *
      */
     public void sync() {
-        this.cfgLsp = new ConfiguredLspBuilder(cfgLsp).setPathStatus(PathStatus.Sync).build();
+        cfgLsp = new ConfiguredLspBuilder(cfgLsp).setPathStatus(PathStatus.Sync).build();
         updateToDataStore();
     }
 
@@ -162,14 +165,14 @@ public class ManagedTePath implements ConnectedEdgeTrigger, ConnectedVertexTrigg
      * Disabling this TE Path by marking it as Configured. Do not update the Data Store.
      */
     public void disabled() {
-        this.cfgLsp = new ConfiguredLspBuilder(cfgLsp).setPathStatus(PathStatus.Configured).build();
+        cfgLsp = new ConfiguredLspBuilder(cfgLsp).setPathStatus(PathStatus.Configured).build();
     }
 
     /**
      * Mark this TE Path as Failed.
      */
     public void failed() {
-        this.cfgLsp = new ConfiguredLspBuilder(cfgLsp).setPathStatus(PathStatus.Failed).build();
+        cfgLsp = new ConfiguredLspBuilder(cfgLsp).setPathStatus(PathStatus.Failed).build();
         updateToDataStore();
     }
 
@@ -236,7 +239,8 @@ public class ManagedTePath implements ConnectedEdgeTrigger, ConnectedVertexTrigg
         return PathStatus.Sync;
     }
 
-    private void configureGraph(ConnectedGraph graph, ComputedPath cpath, Constraints cts, boolean config) {
+    private void configureGraph(final ConnectedGraph graph, final ComputedPath cpath, final Constraints cts,
+            final boolean config) {
         /* Check that Connected Graph is valid */
         if (graph == null) {
             return;
@@ -276,7 +280,7 @@ public class ManagedTePath implements ConnectedEdgeTrigger, ConnectedVertexTrigg
                         if (edgeAttrNotNull(edge)) {
                             /* Need to force using IPv6 address as Connected Edge is searched first on IPv4 address */
                             edge = graph.getConnectedEdge(new IpAddress(
-                                    edge.getEdge().getEdgeAttributes().getRemoteAddress().getIpv6Address()));
+                                    edge.getEdge().getEdgeAttributes().getRemoteAddress6()));
                         }
                     }
                     break;
@@ -318,19 +322,19 @@ public class ManagedTePath implements ConnectedEdgeTrigger, ConnectedVertexTrigg
         triggerFlag = false;
     }
 
-    private boolean edgeAttrNotNull(ConnectedEdge edge) {
+    private static boolean edgeAttrNotNull(final ConnectedEdge edge) {
         return edge != null && edge.getEdge() != null && edge.getEdge().getEdgeAttributes() != null;
     }
 
-    public void setGraph(ConnectedGraph graph) {
+    public void setGraph(final ConnectedGraph graph) {
         configureGraph(graph, cfgLsp.getComputedPath(), cfgLsp.getIntendedPath().getConstraints(), true);
     }
 
-    public void unsetGraph(ConnectedGraph graph) {
+    public void unsetGraph(final ConnectedGraph graph) {
         configureGraph(graph, cfgLsp.getComputedPath(), cfgLsp.getIntendedPath().getConstraints(), false);
     }
 
-    public void updateGraph(ConnectedGraph graph) {
+    public void updateGraph(final ConnectedGraph graph) {
         /* First unset Bandwidth and Triggers for the old path if any */
         if (prevLsp != null) {
             configureGraph(graph, prevLsp.getComputedPath(), prevLsp.getIntendedPath().getConstraints(), false);
@@ -351,7 +355,7 @@ public class ManagedTePath implements ConnectedEdgeTrigger, ConnectedVertexTrigg
     }
 
     @Override
-    public boolean verifyVertex(@Nullable ConnectedVertex next, @Nullable Vertex current) {
+    public boolean verifyVertex(final ConnectedVertex next, final Vertex current) {
         /* Check if there is an on-going trigger */
         if (triggerFlag) {
             return false;
@@ -378,7 +382,7 @@ public class ManagedTePath implements ConnectedEdgeTrigger, ConnectedVertexTrigg
     }
 
     @Override
-    public boolean verifyEdge(@Nullable ConnectedEdge next, @Nullable Edge current) {
+    public boolean verifyEdge(final ConnectedEdge next, final Edge current) {
         /* Check if there is an on-going trigger */
         if (triggerFlag) {
             return false;
@@ -499,12 +503,12 @@ public class ManagedTePath implements ConnectedEdgeTrigger, ConnectedVertexTrigg
             final Ipv4Builder ipBuilder = new Ipv4Builder()
                     .setDestinationIpv4Address(new Ipv4AddressNoZone(iPath.getDestination().getIpv4Address()))
                     .setSourceIpv4Address(new Ipv4AddressNoZone(iPath.getSource().getIpv4Address()));
-            epb.setAddressFamily((new Ipv4CaseBuilder().setIpv4(ipBuilder.build()).build()));
+            epb.setAddressFamily(new Ipv4CaseBuilder().setIpv4(ipBuilder.build()).build());
         } else if (cfgLsp.getIntendedPath().getSource().getIpv6Address() != null) {
             final Ipv6Builder ipBuilder = new Ipv6Builder()
                     .setDestinationIpv6Address(new Ipv6AddressNoZone(iPath.getDestination().getIpv6Address()))
                     .setSourceIpv6Address(new Ipv6AddressNoZone(iPath.getSource().getIpv6Address()));
-            epb.setAddressFamily((new Ipv6CaseBuilder().setIpv6(ipBuilder.build()).build()));
+            epb.setAddressFamily(new Ipv6CaseBuilder().setIpv6(ipBuilder.build()).build());
         } else {
             // In case of ...
             return null;
@@ -587,13 +591,13 @@ public class ManagedTePath implements ConnectedEdgeTrigger, ConnectedVertexTrigg
     /**
      * Call add-lsp RPC to enforce the LSP into the PCC. This action will trigger a PcInitiate message to the PCC.
      *
-     * @param ntps  Network Topology PCEP Service
+     * @param addLsp Add Lsp RPC
      *
      * @return      Add LSP Output to convey the RPC result
      */
-    public ListenableFuture<RpcResult<AddLspOutput>> addPath(final NetworkTopologyPcepService ntps) {
+    public ListenableFuture<RpcResult<AddLspOutput>> addPath(final AddLsp addLsp) {
         /* Check if we could add this path */
-        if ((type != PathType.Initiated) || !teNode.isSync()) {
+        if (type != PathType.Initiated || !teNode.isSync()) {
             return null;
         }
 
@@ -603,9 +607,9 @@ public class ManagedTePath implements ConnectedEdgeTrigger, ConnectedVertexTrigg
         }
 
         sent = true;
-        final ListenableFuture<RpcResult<AddLspOutput>> enforce = ntps.addLsp(getAddLspInput());
-        LOG.info("Call Add LSP to {} with {}", ntps, enforce);
-        Futures.addCallback(enforce, new FutureCallback<RpcResult<AddLspOutput>>() {
+        final var enforce = addLsp.invoke(getAddLspInput());
+        LOG.info("Call Add LSP to {} with {}", addLsp, enforce);
+        Futures.addCallback(enforce, new FutureCallback<>() {
             @Override
             public void onSuccess(final RpcResult<AddLspOutput> result) {
                 if (result.isSuccessful()) {
@@ -632,7 +636,7 @@ public class ManagedTePath implements ConnectedEdgeTrigger, ConnectedVertexTrigg
      *
      * @return  new Update LSP Input
      */
-    private UpdateLspInput getUpdateLspInput() {
+    private @NonNull UpdateLspInput getUpdateLspInput() {
         /* Create Path Setup Type */
         final IntendedPath iPath = cfgLsp.getIntendedPath();
         final PathSetupTypeBuilder pstBuilder = new PathSetupTypeBuilder();
@@ -652,9 +656,9 @@ public class ManagedTePath implements ConnectedEdgeTrigger, ConnectedVertexTrigg
                 .setDelegate(true);
 
         /* Build Arguments */
-        final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120
+        final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev220730
             .update.lsp.args.ArgumentsBuilder args;
-        args = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120
+        args = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev220730
             .update.lsp.args.ArgumentsBuilder()
                 .addAugmentation(new Arguments3Builder()
                     .setLsp(lspBuilder.build())
@@ -712,14 +716,14 @@ public class ManagedTePath implements ConnectedEdgeTrigger, ConnectedVertexTrigg
     /**
      * Call update-lsp RPC to enforce the LSP into the PCC. This action will trigger a PcUpdate message to the PCC.
      *
-     * @param ntps  Network Topology PCEP Service
+     * @param updateLsp  Update LSP RPC
      *
      * @return      Update LSP Output to convey the RPC result
      */
-    public ListenableFuture<RpcResult<UpdateLspOutput>> updatePath(final NetworkTopologyPcepService ntps) {
+    public ListenableFuture<RpcResult<UpdateLspOutput>> updatePath(final UpdateLsp updateLsp) {
 
         /* Check if we could update this path */
-        if ((type != PathType.Initiated && type != PathType.Delegated) || !teNode.isSync()) {
+        if (type != PathType.Initiated && type != PathType.Delegated || !teNode.isSync()) {
             return null;
         }
 
@@ -730,9 +734,9 @@ public class ManagedTePath implements ConnectedEdgeTrigger, ConnectedVertexTrigg
 
         sent = true;
         final NodeId id = teNode.getId();
-        final ListenableFuture<RpcResult<UpdateLspOutput>> enforce = ntps.updateLsp(getUpdateLspInput());
-        LOG.info("Call Update LSP to {} with {}", ntps, enforce);
-        Futures.addCallback(enforce, new FutureCallback<RpcResult<UpdateLspOutput>>() {
+        final var enforce = updateLsp.invoke(getUpdateLspInput());
+        LOG.info("Call Update LSP to {} with {}", updateLsp, enforce);
+        Futures.addCallback(enforce, new FutureCallback<>() {
             @Override
             public void onSuccess(final RpcResult<UpdateLspOutput> result) {
                 if (result.isSuccessful()) {
@@ -758,14 +762,14 @@ public class ManagedTePath implements ConnectedEdgeTrigger, ConnectedVertexTrigg
      * Call remove-lsp RPC to remove the LSP from the PCC. This action will trigger a PcInitiate message to the PCC
      * with 'R' bit set.
      *
-     * @param ntps  Network Topology PCEP Service
+     * @param removeLsp Remove Lsp RPC
      *
      * @return      Remove LSP Output to convey the RPC result
      */
-    public ListenableFuture<RpcResult<RemoveLspOutput>> removePath(final NetworkTopologyPcepService ntps) {
+    public ListenableFuture<RpcResult<RemoveLspOutput>> removePath(final RemoveLsp removeLsp) {
 
         /* Check if we could remove this path */
-        if ((type != PathType.Initiated) || !teNode.isSync() || cfgLsp.getPathStatus() != PathStatus.Sync) {
+        if (type != PathType.Initiated || !teNode.isSync() || cfgLsp.getPathStatus() != PathStatus.Sync) {
             return null;
         }
 
@@ -776,8 +780,8 @@ public class ManagedTePath implements ConnectedEdgeTrigger, ConnectedVertexTrigg
                 .setName(cfgLsp.getName())
                 .setNetworkTopologyRef(new NetworkTopologyRef(pcepTopology))
                 .build();
-        final ListenableFuture<RpcResult<RemoveLspOutput>> enforce = ntps.removeLsp(rli);
-        LOG.info("Call Remove LSP to {} with {}", ntps, enforce);
+        final ListenableFuture<RpcResult<RemoveLspOutput>> enforce = removeLsp.invoke(rli);
+        LOG.info("Call Remove LSP to {} with {}", removeLsp, enforce);
         Futures.addCallback(enforce, new FutureCallback<RpcResult<RemoveLspOutput>>() {
             @Override
             public void onSuccess(final RpcResult<RemoveLspOutput> result) {