X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=networkmodel%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Ftransportpce%2Fnetworkmodel%2FRdm2XpdrLink.java;h=f3447e82620847f83350acfc572e5b938fd9cbac;hb=a74ea5d87a2fe898b47a8f268e03522a6caaf3db;hp=bb46715e3f0538aabd968df690f9a23ef909862e;hpb=738d0daf16440e92fc7b111d3db83b42573c705a;p=transportpce.git diff --git a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/Rdm2XpdrLink.java b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/Rdm2XpdrLink.java index bb46715e3..f3447e826 100644 --- a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/Rdm2XpdrLink.java +++ b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/Rdm2XpdrLink.java @@ -8,29 +8,43 @@ package org.opendaylight.transportpce.networkmodel; -import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; import com.google.common.util.concurrent.FluentFuture; +import java.util.Optional; import java.util.concurrent.ExecutionException; import org.eclipse.jdt.annotation.NonNull; 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.CommitInfo; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.transportpce.common.NetworkUtils; import org.opendaylight.transportpce.networkmodel.util.LinkIdUtil; -import org.opendaylight.transportpce.networkmodel.util.OpenRoadmFactory; +import org.opendaylight.transportpce.networkmodel.util.TopologyUtils; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.links.input.grouping.LinksInput; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Link1; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Link1Builder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.TerminationPoint1; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.TerminationPoint1Builder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.XpdrNetworkAttributesBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmLinkType; 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.NodeId; 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.NetworkBuilder; 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.Network1; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NodeBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NodeKey; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Network1Builder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.TpId; +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.LinkBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPoint; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPointBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPointKey; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -40,8 +54,7 @@ final class Rdm2XpdrLink { private static final Logger LOG = LoggerFactory.getLogger(Rdm2XpdrLink.class); - public static boolean createXpdrRdmLinks(LinksInput linksInput, OpenRoadmFactory openRoadmFactory, - DataBroker dataBroker) { + public static boolean createXpdrRdmLinks(LinksInput linksInput, DataBroker dataBroker) { String srcNode = new StringBuilder(linksInput.getXpdrNode()).append("-XPDR").append(linksInput.getXpdrNum()).toString(); String srcTp = new StringBuilder("XPDR").append(linksInput.getXpdrNum()).append("-NETWORK") @@ -49,9 +62,10 @@ final class Rdm2XpdrLink { String destNode = new StringBuilder(linksInput.getRdmNode()).append("-SRG").append(linksInput.getSrgNum()).toString(); String destTp = linksInput.getTerminationPointNum(); + // update tail-equipment-id for tp of link + TerminationPoint xpdrTp = getTpofNode(srcNode, srcTp, dataBroker); - Network topoNetowkLayer = createNetworkBuilder(srcNode, srcTp, destNode, destTp, false, - openRoadmFactory).build(); + Network topoNetowkLayer = createNetworkBuilder(srcNode, srcTp, destNode, destTp, false, xpdrTp).build(); InstanceIdentifier.InstanceIdentifierBuilder nwIID = InstanceIdentifier.builder(Networks.class) .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))); WriteTransaction wrtx = dataBroker.newWriteOnlyTransaction(); @@ -63,16 +77,13 @@ final class Rdm2XpdrLink { commit.get(); LOG.info("Post successful"); return true; - } catch (InterruptedException | ExecutionException e) { LOG.warn("Failed to create Xponder to Roadm link in the Topo layer "); return false; - } } - public static boolean createRdmXpdrLinks(LinksInput linksInput, - OpenRoadmFactory openRoadmFactory, DataBroker dataBroker) { + public static boolean createRdmXpdrLinks(LinksInput linksInput, DataBroker dataBroker) { String srcNode = new StringBuilder(linksInput.getRdmNode()).append("-SRG").append(linksInput.getSrgNum()).toString(); String srcTp = linksInput.getTerminationPointNum(); @@ -80,9 +91,9 @@ final class Rdm2XpdrLink { new StringBuilder(linksInput.getXpdrNode()).append("-XPDR").append(linksInput.getXpdrNum()).toString(); String destTp = new StringBuilder("XPDR").append(linksInput.getXpdrNum()).append("-NETWORK") .append(linksInput.getNetworkNum()).toString(); + TerminationPoint xpdrTp = getTpofNode(destNode, destTp, dataBroker); - Network topoNetowkLayer = createNetworkBuilder(srcNode, srcTp, destNode, destTp, true, - openRoadmFactory).build(); + Network topoNetowkLayer = createNetworkBuilder(srcNode, srcTp, destNode, destTp, true, xpdrTp).build(); InstanceIdentifier.InstanceIdentifierBuilder nwIID = InstanceIdentifier.builder(Networks.class).child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))); @@ -101,25 +112,83 @@ final class Rdm2XpdrLink { } private static NetworkBuilder createNetworkBuilder(String srcNode, String srcTp, String destNode, String destTp, - boolean isXponderInput, OpenRoadmFactory openRoadmFactory) { - NetworkId nwId = new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID); - NetworkBuilder nwBuilder = new NetworkBuilder(); - nwBuilder.setNetworkId(nwId); - nwBuilder.withKey(new NetworkKey(nwId)); + boolean isXponderInput, TerminationPoint xpdrTp) { + //update tp of nodes + TerminationPointBuilder xpdrTpBldr = new TerminationPointBuilder(xpdrTp); + if (xpdrTpBldr.augmentation(TerminationPoint1.class) != null) { + LOG.warn("Rewritting tail-equipment-id {} on tp {} of node {}", xpdrTpBldr + .augmentation(TerminationPoint1.class).getXpdrNetworkAttributes().getTailEquipmentId(), srcTp, srcNode); + } + TerminationPoint1Builder tp1Bldr = new TerminationPoint1Builder(); + if (isXponderInput) { + tp1Bldr.setXpdrNetworkAttributes(new XpdrNetworkAttributesBuilder() + .setTailEquipmentId(srcNode + "--" + srcTp).build()); + } else { + tp1Bldr.setXpdrNetworkAttributes(new XpdrNetworkAttributesBuilder() + .setTailEquipmentId(destNode + "--" + destTp).build()); + } + xpdrTpBldr.addAugmentation(tp1Bldr.build()); + TerminationPoint newXpdrTp = xpdrTpBldr.build(); + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 node1 = + new Node1Builder().setTerminationPoint(ImmutableMap.of(newXpdrTp.key(),newXpdrTp)).build(); + NodeBuilder nodeBldr = new NodeBuilder().addAugmentation(node1); + if (isXponderInput) { + nodeBldr.setNodeId(new NodeId(destNode)); + } else { + nodeBldr.setNodeId(new NodeId(srcNode)); + } + Link1Builder lnk1bldr = new Link1Builder(); - LinkBuilder linkBuilder = openRoadmFactory.createLink(srcNode, destNode, srcTp, destTp); - lnk1bldr.setLinkType(isXponderInput ? OpenroadmLinkType.XPONDERINPUT : OpenroadmLinkType.XPONDEROUTPUT); - lnk1bldr.setOppositeLink(LinkIdUtil.getOppositeLinkId(srcNode, srcTp, destNode, destTp)); - linkBuilder.addAugmentation(Link1.class, lnk1bldr.build()); + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Link1Builder lnk2bldr + = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Link1Builder() + .setLinkType(isXponderInput ? OpenroadmLinkType.XPONDERINPUT : OpenroadmLinkType.XPONDEROUTPUT) + .setOppositeLink(LinkIdUtil.getOppositeLinkId(srcNode, srcTp, destNode, destTp)); + LinkBuilder linkBuilder = TopologyUtils.createLink(srcNode, destNode, srcTp, destTp, null) + .addAugmentation(lnk1bldr.build()) + .addAugmentation(lnk2bldr.build()); LOG.info("Link id in the linkbldr {}", linkBuilder.getLinkId()); LOG.info("Link with oppo link {}", linkBuilder.augmentation(Link1.class)); - Network1Builder nwBldr1 = new Network1Builder(); - nwBldr1.setLink(ImmutableList.of(linkBuilder.build())); - nwBuilder.addAugmentation(Network1.class, nwBldr1.build()); + Link link = linkBuilder.build(); + Network1Builder nwBldr1 = new Network1Builder().setLink(ImmutableMap.of(link.key(),link)); + + NetworkId nwId = new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID); + Node node = nodeBldr.build(); + NetworkBuilder nwBuilder = new NetworkBuilder() + .setNetworkId(nwId) + .withKey(new NetworkKey(nwId)) + .addAugmentation(nwBldr1.build()) + .setNode(ImmutableMap.of(node.key(),node)); return nwBuilder; } + private static TerminationPoint getTpofNode(String srcNode, String srcTp, DataBroker dataBroker) { + InstanceIdentifier iiTp = InstanceIdentifier.builder(Networks.class) + .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))) + .child(Node.class, new NodeKey(new NodeId(srcNode))) + .augmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226 + .Node1.class) + .child(TerminationPoint.class, new TerminationPointKey(new TpId(srcTp))) + .build(); + @NonNull + ReadTransaction readTransaction = dataBroker.newReadOnlyTransaction(); + @NonNull + FluentFuture> tpFf = readTransaction.read(LogicalDatastoreType.CONFIGURATION, iiTp); + if (tpFf.isDone()) { + try { + Optional tpOpt; + tpOpt = tpFf.get(); + if (tpOpt.isPresent()) { + return tpOpt.get(); + } + } catch (InterruptedException | ExecutionException e) { + LOG.error("Impossible to get tp-id {} of node {} from {}", srcTp, srcNode, + NetworkUtils.OVERLAY_NETWORK_ID, e); + } + } + return null; + } + private Rdm2XpdrLink() { }