X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=networkmodel%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Ftransportpce%2Fnetworkmodel%2FNetworkUtilsImpl.java;h=df63d4beafa803364375af0cec809b5fa5808524;hb=0414e9fec8fef0acf68cf2a98d73c79c1ffa4860;hp=e42520f0f41df480535eb58aa03162bb3d3b1fc9;hpb=0da8cea9fcd1c78753493ed6929f6e3241da06df;p=transportpce.git diff --git a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkUtilsImpl.java b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkUtilsImpl.java index e42520f0f..df63d4bea 100644 --- a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkUtilsImpl.java +++ b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkUtilsImpl.java @@ -7,71 +7,141 @@ */ package org.opendaylight.transportpce.networkmodel; -import java.util.concurrent.Future; - -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.transportpce.networkmodel.util.OpenRoadmTopology; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.networkutils.rev170818.InitRdmXpdrLinksInput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.networkutils.rev170818.InitRdmXpdrLinksOutput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.networkutils.rev170818.InitRdmXpdrLinksOutputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.networkutils.rev170818.InitRoadmNodesInput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.networkutils.rev170818.InitRoadmNodesOutput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.networkutils.rev170818.InitRoadmNodesOutputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.networkutils.rev170818.InitXpdrRdmLinksInput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.networkutils.rev170818.InitXpdrRdmLinksOutput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.networkutils.rev170818.InitXpdrRdmLinksOutputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.networkutils.rev170818.NetworkutilsService; +import com.google.common.util.concurrent.ListenableFuture; +import java.util.Optional; +import java.util.concurrent.ExecutionException; +import org.opendaylight.mdsal.binding.api.DataBroker; +import org.opendaylight.mdsal.binding.api.ReadTransaction; +import org.opendaylight.mdsal.binding.api.WriteTransaction; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; +import org.opendaylight.transportpce.common.NetworkUtils; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.DeleteLinkInput; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.DeleteLinkOutput; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.DeleteLinkOutputBuilder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitRdmXpdrLinksInput; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitRdmXpdrLinksOutput; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitRdmXpdrLinksOutputBuilder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitRoadmNodesInput; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitRoadmNodesOutput; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitRoadmNodesOutputBuilder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitXpdrRdmLinksInput; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitXpdrRdmLinksOutput; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitXpdrRdmLinksOutputBuilder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.TransportpceNetworkutilsService; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NetworkId; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.Networks; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.Network; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.NetworkKey; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.LinkId; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Network1; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.Link; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.LinkKey; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; +import org.osgi.service.component.annotations.Activate; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class NetworkUtilsImpl implements NetworkutilsService { +@Component +public class NetworkUtilsImpl implements TransportpceNetworkutilsService { private static final Logger LOG = LoggerFactory.getLogger(NetworkUtilsImpl.class); private final DataBroker dataBroker; - private final OpenRoadmTopology openRoadmTopology; - public NetworkUtilsImpl(DataBroker dataBroker, OpenRoadmTopology openRoadmTopology) { + @Activate + public NetworkUtilsImpl(@Reference DataBroker dataBroker) { this.dataBroker = dataBroker; - this.openRoadmTopology = openRoadmTopology; + LOG.info("NetworkUtilsImpl instanciated"); + } + + @Override + public ListenableFuture> deleteLink(DeleteLinkInput input) { + + LinkId linkId = new LinkId(input.getLinkId()); + // Building link instance identifier + InstanceIdentifier.Builder linkIID = InstanceIdentifier.builder(Networks.class) + .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))) + .augmentation(Network1.class).child(Link.class, new LinkKey(linkId)); + + + //Check if link exists + try { + ReadTransaction readOnlyTransaction = dataBroker.newReadOnlyTransaction(); + Optional linkOptional = readOnlyTransaction.read(LogicalDatastoreType.CONFIGURATION, linkIID.build()) + .get(); + if (!linkOptional.isPresent()) { + LOG.info("Link not present"); + return RpcResultBuilder + .success(new DeleteLinkOutputBuilder().setResult("Fail").build()) + .buildFuture(); + } + } catch (ExecutionException | InterruptedException e) { + LOG.error("readMdSal: Error reading link {}", input.getLinkId()); + return RpcResultBuilder + .success(new DeleteLinkOutputBuilder().setResult("Fail").build()) + .buildFuture(); + } + + WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction(); + writeTransaction.delete(LogicalDatastoreType.CONFIGURATION, linkIID.build()); + try { + writeTransaction.commit().get(); + LOG.info("Link with linkId: {} deleted from {} layer.", + input.getLinkId(), NetworkUtils.OVERLAY_NETWORK_ID); + return RpcResultBuilder + .success(new DeleteLinkOutputBuilder().setResult("Link {} deleted successfully").build()) + .buildFuture(); + } catch (InterruptedException | ExecutionException e) { + return RpcResultBuilder.failed().buildFuture(); + } } - public Future> initRoadmNodes(InitRoadmNodesInput input) { - boolean createRdmLinks = OrdLink.createRdm2RdmLinks(input, - openRoadmTopology,dataBroker); + @Override + public ListenableFuture> initRoadmNodes(InitRoadmNodesInput input) { + boolean createRdmLinks = OrdLink.createRdm2RdmLinks(input, this.dataBroker); if (createRdmLinks) { return RpcResultBuilder - .success(new InitRoadmNodesOutputBuilder().setResult( - "Unidirectional Roadm-to-Roadm Link created successfully")) - .buildFuture(); + .success(new InitRoadmNodesOutputBuilder() + .setResult("Unidirectional Roadm-to-Roadm Link created successfully") + .build()) + .buildFuture(); } else { return RpcResultBuilder.failed().buildFuture(); } } @Override - public Future> initXpdrRdmLinks(InitXpdrRdmLinksInput input) { + public ListenableFuture> initXpdrRdmLinks(InitXpdrRdmLinksInput input) { // Assigns user provided input in init-network-view RPC to nodeId - boolean createXpdrRdmLinks = Rdm2XpdrLink.createXpdrRdmLinks(input.getLinksInput(), - openRoadmTopology,dataBroker); + LOG.info("Xpdr to Roadm links rpc called"); + boolean createXpdrRdmLinks = Rdm2XpdrLink.createXpdrRdmLinks(input.getLinksInput(), this.dataBroker); if (createXpdrRdmLinks) { return RpcResultBuilder - .success(new InitXpdrRdmLinksOutputBuilder().setResult("Xponder Roadm Link created successfully")) - .buildFuture(); + .success(new InitXpdrRdmLinksOutputBuilder() + .setResult("Xponder Roadm Link created successfully") + .build()) + .buildFuture(); } else { + LOG.error("init-xpdr-rdm-links rpc failed due to a bad input parameter"); return RpcResultBuilder.failed().buildFuture(); } } - public Future> initRdmXpdrLinks(InitRdmXpdrLinksInput input) { - boolean createRdmXpdrLinks = Rdm2XpdrLink.createRdmXpdrLinks(input.getLinksInput(), - openRoadmTopology,dataBroker); + @Override + public ListenableFuture> initRdmXpdrLinks(InitRdmXpdrLinksInput input) { + LOG.info("Roadm to Xpdr links rpc called"); + boolean createRdmXpdrLinks = Rdm2XpdrLink.createRdmXpdrLinks(input.getLinksInput(), this.dataBroker); if (createRdmXpdrLinks) { return RpcResultBuilder - .success(new InitRdmXpdrLinksOutputBuilder().setResult("Roadm Xponder links created successfully")) - .buildFuture(); + .success(new InitRdmXpdrLinksOutputBuilder() + .setResult("Roadm Xponder links created successfully") + .build()) + .buildFuture(); } else { + LOG.error("init-rdm-xpdr-links rpc failed due to a bad input parameter"); return RpcResultBuilder.failed().buildFuture(); } }