X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=transportpce.git;a=blobdiff_plain;f=networkmodel%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Ftransportpce%2Fnetworkmodel%2Futil%2FOpenRoadmTopology.java;h=55aa8a869c9565aaa952cbef9d5aa6b2b3a9351a;hp=0abc53d5cd40a16d431e09f20fd49c157d89d431;hb=7ce88414728d262b8a1dc41335a2055c087dcf17;hpb=29df0cca25a61cf23ea8f426f07480d3b67e29da diff --git a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopology.java b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopology.java index 0abc53d5c..55aa8a869 100644 --- a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopology.java +++ b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopology.java @@ -9,851 +9,652 @@ package org.opendaylight.transportpce.networkmodel.util; import java.util.ArrayList; -import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; import java.util.List; -import java.util.Optional; +import java.util.Map; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; - -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import java.util.stream.Collectors; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.transportpce.common.NetworkUtils; -import org.opendaylight.transportpce.common.Timeouts; -import org.opendaylight.transportpce.common.device.DeviceTransactionManager; -import org.opendaylight.transportpce.networkmodel.dto.NodeData; +import org.opendaylight.transportpce.common.fixedflex.GridUtils; +import org.opendaylight.transportpce.common.network.NetworkTransactionService; import org.opendaylight.transportpce.networkmodel.dto.TopologyShard; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.NodeTypes; -import org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev170929.degree.node.attributes.AvailableWavelengths; -import org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev170929.degree.node.attributes.AvailableWavelengthsBuilder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev170929.degree.node.attributes.AvailableWavelengthsKey; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.pack.Ports; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.pack.PortsKey; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.packs.CircuitPacks; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.packs.CircuitPacksKey; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.degree.ConnectionPorts; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.OrgOpenroadmDevice; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.Degree; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.DegreeKey; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.Info; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.SharedRiskGroup; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.SharedRiskGroupKey; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.Link1; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.Link1Builder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.NetworkTypes1; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.NetworkTypes1Builder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.Node1; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.Node1Builder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.TerminationPoint1; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.TerminationPoint1Builder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.network.types.OpenroadmTopologyBuilder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.DegreeAttributesBuilder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.SrgAttributesBuilder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.XpdrClientAttributesBuilder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.XpdrNetworkAttributesBuilder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev170929.OpenroadmLinkType; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev170929.OpenroadmNodeType; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev170929.OpenroadmTpType; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.Network; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NetworkBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NetworkId; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NetworkKey; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NodeId; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.network.NetworkTypesBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.network.Node; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.network.NodeBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.network.NodeKey; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.network.node.SupportingNode; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.network.node.SupportingNodeBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.network.node.SupportingNodeKey; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.LinkId; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Network1; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Network1Builder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.TpId; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.Link; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.LinkBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.LinkKey; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.link.DestinationBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.link.SourceBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.node.TerminationPoint; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.node.TerminationPointBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.node.TerminationPointKey; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.mapping.Mapping; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.network.Nodes; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1Builder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.NodeTypes; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.XpdrNodeTypes; +import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Node1; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Node1Builder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.TerminationPoint1; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.DegreeAttributes; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.DegreeAttributesBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.SrgAttributes; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.SrgAttributesBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmLinkType; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmNodeType; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmTpType; +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.NetworkKey; +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.rev180226.networks.network.node.SupportingNode; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNodeBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNodeKey; +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.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.LinkKey; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.DestinationBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.SourceBuilder; +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.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder; +import org.opendaylight.yangtools.yang.common.Uint16; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class OpenRoadmTopology { +public final class OpenRoadmTopology { private static final Logger LOG = LoggerFactory.getLogger(OpenRoadmTopology.class); - private static final int DEFAULT_PORT_DIRECTION = -1; - private static final int MAX_DEGREE = 20; - private static final int MAX_SRG = 20; - - private final DataBroker dataBroker; - private final DeviceTransactionManager deviceTransactionManager; - public OpenRoadmTopology(DataBroker dataBroker, DeviceTransactionManager deviceTransactionManager) { - this.dataBroker = dataBroker; - this.deviceTransactionManager = deviceTransactionManager; + private OpenRoadmTopology() { } - /** - * This public method creates the OpenROADM Topology Layer and posts it to - * the controller. - */ - public void createTopoLayer(DataBroker controllerdb) { - try { - Network openRoadmTopology = createOpenRoadmTopology(); - InstanceIdentifierBuilder nwIID = InstanceIdentifier.builder(Network.class, - new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))); - WriteTransaction wrtx = controllerdb.newWriteOnlyTransaction(); - wrtx.put(LogicalDatastoreType.CONFIGURATION, nwIID.build(), openRoadmTopology); - wrtx.submit().get(1, TimeUnit.SECONDS); - LOG.info("OpenRoadm-Topology created successfully."); - } catch (ExecutionException | TimeoutException | InterruptedException e) { - LOG.warn("Failed to create OpenRoadm-Topology", e); - } + public static TopologyShard createTopologyShard(Nodes mappingNode) { + return createTopologyShard(mappingNode, true); } - /** - * Create empty OpenROADM topology. - */ - private Network createOpenRoadmTopology() { - NetworkBuilder nwBuilder = new NetworkBuilder(); - NetworkId nwId = new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID); - nwBuilder.setNetworkId(nwId); - nwBuilder.setKey(new NetworkKey(nwId)); - // set network type to Transport Underlay - NetworkTypes1Builder topoNetworkTypesBldr = new NetworkTypes1Builder(); - topoNetworkTypesBldr.setOpenroadmTopology(new OpenroadmTopologyBuilder().build()); - NetworkTypesBuilder nwTypeBuilder = new NetworkTypesBuilder(); - nwTypeBuilder.addAugmentation(NetworkTypes1.class, topoNetworkTypesBldr.build()); - nwBuilder.setNetworkTypes(nwTypeBuilder.build()); - // Array to store nodes in the topolayer of a roadm/Xponder - Network1Builder nwBldr1 = new Network1Builder(); - // adding expressLinks - nwBldr1.setLink(Collections.emptyList()); - nwBuilder.addAugmentation(Network1.class, nwBldr1.build()); - nwBuilder.setNode(Collections.emptyList()); - return nwBuilder.build(); - } - - public TopologyShard createTopologyShard(String nodeId) { + public static TopologyShard createTopologyShard(Nodes mappingNode, boolean firstMount) { int numOfDegrees; int numOfSrgs; - int portDirectionEnum = DEFAULT_PORT_DIRECTION; - - InstanceIdentifier infoIID = InstanceIdentifier.create(OrgOpenroadmDevice.class).child(Info.class); - java.util.Optional deviceInfoOpt = this.deviceTransactionManager.getDataFromDevice(nodeId, - LogicalDatastoreType.OPERATIONAL, infoIID, Timeouts.DEVICE_READ_TIMEOUT, - Timeouts.DEVICE_READ_TIMEOUT_UNIT); - Info deviceInfo; - if (deviceInfoOpt.isPresent()) { - deviceInfo = deviceInfoOpt.get(); - } else { - LOG.error("Unable to get device info for device {}!", nodeId); - return null; - } List nodes = new ArrayList<>(); + List links = new ArrayList<>(); // Check if node is ROADM - if (NodeTypes.Rdm.equals(deviceInfo.getNodeType())) { - - /* - * Adding Degree Node Get Degree Number -> x - * then get connection ports - * then find the port directions to decide whether TX/RX/TXRX - * Get value for max degree from info subtree, required for iteration - * if not present assume to be 20 (temporary) - */ - - Integer maxDegree; - if (deviceInfo.getMaxDegrees() != null) { - maxDegree = deviceInfo.getMaxDegrees(); - } else { - maxDegree = MAX_DEGREE; + if (NodeTypes.Rdm.getIntValue() == mappingNode.getNodeInfo().getNodeType().getIntValue()) { + LOG.info("creating rdm node in openroadmtopology for node {}", + mappingNode.getNodeId()); + // transform flat mapping list to per degree and per srg mapping lists + Map> mapDeg = new HashMap<>(); + Map> mapSrg = new HashMap<>(); + List mappingList = new ArrayList<>(mappingNode.nonnullMapping().values()); + mappingList.sort(Comparator.comparing(Mapping::getLogicalConnectionPoint)); + List nodeShardList = new ArrayList<>(); + for (Mapping mapping : mappingList) { + String str = mapping.getLogicalConnectionPoint().split("-")[0]; + if (!nodeShardList.contains(str)) { + nodeShardList.add(str); + } } - - // Starting with degree Number = 1 - Integer degreeCounter = 1; - - while (degreeCounter <= maxDegree) { - LOG.info("creating degree node {}/{}", degreeCounter, maxDegree); - NodeData nodeData = createDegreeNode(nodeId, degreeCounter); - if (nodeData != null) { - NodeBuilder tempNode = nodeData.getNodeBuilder(); - portDirectionEnum = nodeData.getPortDirectionEnum(); - nodes.add(tempNode.build()); - degreeCounter++; + for (String str : nodeShardList) { + List interList = + mappingList.stream() + .filter(x -> x.getLogicalConnectionPoint().split("-")[0].equals(str)) + .collect(Collectors.toList()); + if (str.contains("DEG")) { + mapDeg.put(str, interList); + } else if (str.contains("SRG")) { + mapSrg.put(str, interList); } else { - // null returned if Degree number= degreeCounter not present in the device - break; + LOG.error("unknow element"); } } - numOfDegrees = degreeCounter - 1; - - Integer maxSrg; - if (deviceInfo.getMaxSrgs() != null) { - maxSrg = deviceInfo.getMaxSrgs(); - } else { - maxSrg = MAX_SRG; + // create degree nodes + for (Map.Entry> entry : mapDeg.entrySet()) { + NodeBuilder ietfNode = + createDegree(entry.getKey(), entry.getValue(), mappingNode.getNodeId(), + mappingNode.getNodeInfo().getNodeClli(), firstMount); + nodes.add(ietfNode.build()); } - - // Starting with degree Number = 1 - Integer srgCounter = 1; - - while (srgCounter <= maxSrg) { - LOG.info("creating SRG node {}/{}", srgCounter, maxSrg); - NodeBuilder tempNode = createSrgNode(nodeId, srgCounter, portDirectionEnum); - - if (tempNode != null) { - nodes.add(tempNode.build()); - srgCounter++; - } else { - // null returned if Degree number= degreeCounter not present in the device - break; - } + // create srg nodes + for (Map.Entry> entry : mapSrg.entrySet()) { + NodeBuilder ietfNode = + createSrg(entry.getKey(), entry.getValue(), mappingNode.getNodeId(), + mappingNode.getNodeInfo().getNodeClli(), firstMount); + nodes.add(ietfNode.build()); } - numOfSrgs = srgCounter - 1; + + numOfDegrees = mapDeg.size(); + numOfSrgs = mapSrg.size(); LOG.info("adding links numOfDegrees={} numOfSrgs={}", numOfDegrees, numOfSrgs); - List links = new ArrayList<>(); - links.addAll(createExpressLinks(nodeId, numOfDegrees, portDirectionEnum)); - links.addAll(createAddDropLinks(nodeId, numOfDegrees, numOfSrgs, portDirectionEnum)); + links.addAll(createNewLinks(nodes)); LOG.info("created nodes/links: {}/{}", nodes.size(), links.size()); return new TopologyShard(nodes, links); - } else if (NodeTypes.Xpdr.equals(deviceInfo.getNodeType())) { - // Check if node is XPONDER - Integer clientport = getNoOfClientPorts(nodeId); - List links = new ArrayList<>(); - Integer clientCounter = 1; - Integer lineCounter = 1; - while (clientCounter <= clientport) { - NodeBuilder tempNode = createXpdr(clientCounter, lineCounter, nodeId); - if (tempNode == null) { - break; + } else if (NodeTypes.Xpdr.getIntValue() == mappingNode.getNodeInfo().getNodeType().getIntValue()) { + // Check if node is Xpdr is a Transponder + List networkMappings = + mappingNode.nonnullMapping().values() + .stream().filter(k -> k.getLogicalConnectionPoint().contains("NETWORK")) + .collect(Collectors.toList()); + List tpdrList = new ArrayList<>(); + for (Mapping mapping : networkMappings) { + List extractedMappings = null; + Integer xpdrNb = Integer.parseInt(mapping.getLogicalConnectionPoint().split("XPDR")[1].split("-")[0]); + if (!tpdrList.contains(xpdrNb)) { + tpdrList.add(xpdrNb); + extractedMappings = mappingNode.nonnullMapping().values().stream() + .filter(lcp -> lcp.getLogicalConnectionPoint().contains("XPDR" + xpdrNb)) + .collect(Collectors.toList()); + NodeBuilder ietfNode; + if (mapping.getXponderType() == null + || XpdrNodeTypes.Tpdr.getIntValue() == mapping.getXponderType().getIntValue()) { + LOG.info("creating xpdr node {} of type Tpdr in openroadm-topology", + mappingNode.getNodeId() + "-XPDR" + xpdrNb); + ietfNode = createXpdr(mappingNode.getNodeId(), mappingNode.getNodeInfo().getNodeClli(), xpdrNb, + extractedMappings, false); + nodes.add(ietfNode.build()); + } else if (XpdrNodeTypes.Mpdr.getIntValue() == mapping.getXponderType().getIntValue() + || XpdrNodeTypes.Switch.getIntValue() == mapping.getXponderType().getIntValue()) { + LOG.info("creating xpdr node {} of type {} in openroadm-topology", + mappingNode.getNodeId() + "-XPDR" + xpdrNb, mapping.getXponderType().getName()); + ietfNode = createXpdr(mappingNode.getNodeId(), mappingNode.getNodeInfo().getNodeClli(), xpdrNb, + extractedMappings, true); + nodes.add(ietfNode.build()); + } } - nodes.add(tempNode.build()); - clientCounter++; - lineCounter++; - LOG.info("Entered this loop"); } - return new TopologyShard(nodes, links); + if (nodes.isEmpty()) { + return null; + } else { + return new TopologyShard(nodes, links); + } } - + LOG.error("Device node Type not managed yet"); return null; } - /** - * This private method gets the list of circuit packs on a xponder. - * For each circuit pack on a Xponder, it does a get on circuit-pack subtree with - * circuit-pack-name as key in order to get the list of ports. - * It then iterates over the list of ports to get ports with port-qual as - * xpdr-network/xpdr-client. The line and client ports are saved as: - * - *

- * 1. LINEn - * - *

- * 2. CLNTn - */ - private int getNoOfClientPorts(String deviceId) { - // Creating for Xponder Line and Client Ports - InstanceIdentifier deviceIID = InstanceIdentifier.create(OrgOpenroadmDevice.class); - Optional deviceObject = this.deviceTransactionManager.getDataFromDevice(deviceId, - LogicalDatastoreType.OPERATIONAL, deviceIID, Timeouts.DEVICE_READ_TIMEOUT, - Timeouts.DEVICE_READ_TIMEOUT_UNIT); - - // Variable to keep track of number of client ports - int client = 1; - if (deviceObject.isPresent()) { - for (CircuitPacks cp : deviceObject.get().getCircuitPacks()) { - if (cp.getPorts() != null) { - for (Ports port : cp.getPorts()) { - if (port.getPortQual() != null) { - if (port.getPortQual().getIntValue() == 4) { - client++; - } - } - } + private static NodeBuilder createXpdr(String nodeId, String clli, Integer xpdrNb, List mappings, + boolean isOtn) { + // Create openroadm-network-topo augmentation to set node type to Xponder + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1 ocnNode1 = + new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1Builder() + .setNodeType(OpenroadmNodeType.XPONDER) + .setAdministrativeState(AdminStates.InService) + .setOperationalState(State.InService) + .build(); + // Create ietf node setting supporting-node data + NodeBuilder ietfNodeBldr = createTopoLayerNode(nodeId, clli); + // set node-id + String nodeIdtopo = new StringBuilder().append(nodeId).append("-XPDR").append(xpdrNb).toString(); + ietfNodeBldr.setNodeId(new NodeId(nodeIdtopo)) + .withKey((new NodeKey(new NodeId(nodeIdtopo)))) + .addAugmentation(ocnNode1); + + // Create tp-map + Map tpMap = new HashMap<>(); + TerminationPointBuilder ietfTpBldr; + for (Mapping m : mappings) { + if (!isOtn) { + ietfTpBldr = createTpBldr(m.getLogicalConnectionPoint()); + // Add openroadm-network-topology tp augmentations + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1Builder + ocnTp1Bldr = new org.opendaylight.yang.gen.v1.http + .org.openroadm.common.network.rev211210.TerminationPoint1Builder() + .setAdministrativeState(TopologyUtils.setNetworkAdminState(m.getPortAdminState())) + .setOperationalState(TopologyUtils.setNetworkOperState(m.getPortOperState())); + if (m.getPortQual().equals("xpdr-network")) { + ocnTp1Bldr.setTpType(OpenroadmTpType.XPONDERNETWORK); + org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.TerminationPoint1 tpceTp1 = + new org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123 + .TerminationPoint1Builder() + .setAssociatedConnectionMapPort(m.getConnectionMapLcp()).build(); + ietfTpBldr + .addAugmentation(ocnTp1Bldr.build()) + .addAugmentation(tpceTp1); + TerminationPoint ietfTp = ietfTpBldr.build(); + tpMap.put(ietfTp.key(),ietfTp); + } else if (m.getPortQual().equals("xpdr-client")) { + ocnTp1Bldr.setTpType(OpenroadmTpType.XPONDERCLIENT); + org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.TerminationPoint1 tpceTp1 = + new org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123 + .TerminationPoint1Builder() + .setAssociatedConnectionMapPort(m.getConnectionMapLcp()) + .build(); + ietfTpBldr + .addAugmentation(ocnTp1Bldr.build()) + .addAugmentation(tpceTp1); + TerminationPoint ietfTp = ietfTpBldr.build(); + tpMap.put(ietfTp.key(),ietfTp); + } + } else { + if (m.getPortQual().equals("xpdr-network") || m.getPortQual().equals("switch-network")) { + ietfTpBldr = createTpBldr(m.getLogicalConnectionPoint()); + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1Builder + ocnTp1Bldr = new org.opendaylight.yang.gen.v1.http + .org.openroadm.common.network.rev211210.TerminationPoint1Builder() + .setTpType(OpenroadmTpType.XPONDERNETWORK) + .setAdministrativeState(TopologyUtils.setNetworkAdminState(m.getPortAdminState())) + .setOperationalState(TopologyUtils.setNetworkOperState(m.getPortOperState())); + ietfTpBldr + .addAugmentation(ocnTp1Bldr.build()); + TerminationPoint ietfTp = ietfTpBldr.build(); + tpMap.put(ietfTp.key(),ietfTp); } } - } else { - return 0; - } - return client; - } - - private NodeBuilder createXpdr(Integer clientCounter, Integer lineCounter, String nodeId) { - // Create a generic Topo Layer node - NodeBuilder nodebldr = createTopoLayerNode(nodeId); - // Create augmentation node to inorder to add degree - Node1Builder node1bldr = new Node1Builder(); - TerminationPoint1Builder tp1Bldr = new TerminationPoint1Builder(); - TerminationPointBuilder tempTpBldr; - - // set node type to Xponder - node1bldr.setNodeType(OpenroadmNodeType.XPONDER); - List tpList = new ArrayList<>(); - String nodeIdtopo = new StringBuilder().append(nodeId).append("-XPDR1").toString(); - // Ad degree node specific augmentation - nodebldr.setNodeId(new NodeId(nodeIdtopo)); - nodebldr.setKey(new NodeKey(new NodeId(nodeIdtopo))); - nodebldr.addAugmentation(Node1.class, node1bldr.build()); - while (clientCounter != 0) { - // Create CLNT-TX termination - tempTpBldr = createTpBldr("XPDR1-CLIENT" + clientCounter); - tp1Bldr.setTpType(OpenroadmTpType.XPONDERCLIENT); - XpdrClientAttributesBuilder xpdrClntBldr = new XpdrClientAttributesBuilder(); - xpdrClntBldr.setTailEquipmentId("XPDR1-NETWORK" + clientCounter); - tp1Bldr.setXpdrClientAttributes(xpdrClntBldr.build()); - tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build()); - tpList.add(tempTpBldr.build()); - clientCounter--; - } - while (lineCounter != 0) { - // Create LINE-TX termination - tempTpBldr = (createTpBldr("XPDR1-NETWORK" + lineCounter)); - tp1Bldr.setTpType(OpenroadmTpType.XPONDERNETWORK); - XpdrNetworkAttributesBuilder xpdrNwAttrBldr = new XpdrNetworkAttributesBuilder(); - xpdrNwAttrBldr.setTailEquipmentId("XPDR1-CLIENT" + lineCounter); - tp1Bldr.setXpdrNetworkAttributes(xpdrNwAttrBldr.build()); - tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build()); - tpList.add(tempTpBldr.build()); - lineCounter--; - } - LOG.info("printing tpList {}", tpList); - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Node1Builder tpNode1 = - new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Node1Builder(); - tpNode1.setTerminationPoint(tpList); - nodebldr.addAugmentation( - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Node1.class, - tpNode1.build()); - LOG.info("The nodebldr {}", nodebldr); - return nodebldr; - } - - private NodeData createDegreeNode(String nodeId, int degreeCounter) { - // Create augmentation node to inorder to add degree - Node1Builder node1bldr = new Node1Builder(); - // set node type to degree - node1bldr.setNodeType(OpenroadmNodeType.DEGREE); - - // Get connection ports on degree number = degreeCounter in order to get port - // direction - List degreeConPorts = getDegreePorts(nodeId, degreeCounter); - if ((degreeConPorts == null) || degreeConPorts.isEmpty()) { - return null; - } - - DegreeAttributesBuilder degAttBldr = new DegreeAttributesBuilder(); - degAttBldr.setDegreeNumber(degreeCounter); - degAttBldr.setAvailableWavelengths(create96AvalWaveDegree()); - node1bldr.setDegreeAttributes(degAttBldr.build()); - - String nodeIdtopo = new StringBuilder(nodeId).append("-DEG").append(degreeCounter).toString(); - // Create a generic Topo Layer node - NodeBuilder nodebldr = createTopoLayerNode(nodeId); - nodebldr.setNodeId(new NodeId(nodeIdtopo)); - // Ad degree node specific augmentation - nodebldr.addAugmentation(Node1.class, node1bldr.build()); - // Get Port direction - int portDirectionEnum = getPortDirection(nodeId, degreeConPorts.get(0).getCircuitPackName(), - degreeConPorts.get(0).getPortName().toString()); - - /* - * if bi-directional then create 2 tp's : - * - * --> TTP-TXRX --> CTP-TXRX - * - * if uni-directional : - * - * --> TTP-TX --> TTP-RX --> CTP-TX --> CTP-RX - */ - TerminationPoint1Builder tp1Bldr = new TerminationPoint1Builder(); - TerminationPointBuilder tempTpBldr; - - List tpList = new ArrayList<>(); - if ((portDirectionEnum == 1) || (portDirectionEnum == 2)) { - // ports are uni Directional on a degree, therefore 4 termination points - // Create TTP-TX termination - - tempTpBldr = createTpBldr("DEG" + degreeCounter + "-TTP-TX"); - tp1Bldr.setTpType(OpenroadmTpType.DEGREETXTTP); - tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build()); - tpList.add(tempTpBldr.build()); - - // Create TTP-RX termination - tp1Bldr = new TerminationPoint1Builder(); - tempTpBldr = createTpBldr("DEG" + degreeCounter + "-TTP-RX"); - tp1Bldr.setTpType(OpenroadmTpType.DEGREERXTTP); - - tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build()); - tpList.add(tempTpBldr.build()); - - // Create CTP-TX termination - tp1Bldr = new TerminationPoint1Builder(); - tempTpBldr = createTpBldr("DEG" + degreeCounter + "-CTP-TX"); - tp1Bldr.setTpType(OpenroadmTpType.DEGREETXCTP); - tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build()); - tpList.add(tempTpBldr.build()); - - // Create CTP-RX termination - tp1Bldr = new TerminationPoint1Builder(); - tempTpBldr = createTpBldr("DEG" + degreeCounter + "-CTP-RX"); - tp1Bldr.setTpType(OpenroadmTpType.DEGREERXCTP); - tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build()); - tpList.add(tempTpBldr.build()); - - } else if (portDirectionEnum == 3) { - // Ports are bi directional therefore 2 termination points - // Create TTP-TXRX termination - tp1Bldr = new TerminationPoint1Builder(); - tempTpBldr = createTpBldr("DEG" + degreeCounter + "-TTP-TXRX"); - tp1Bldr.setTpType(OpenroadmTpType.DEGREETXRXTTP); - tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build()); - tpList.add(tempTpBldr.build()); - - // Create CTP-TXRX termination - tp1Bldr = new TerminationPoint1Builder(); - tempTpBldr = createTpBldr("DEG" + degreeCounter + "-CTP-TXRX"); - tp1Bldr.setTpType(OpenroadmTpType.DEGREETXRXCTP); - tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build()); - tpList.add(tempTpBldr.build()); - } - - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Node1Builder tpNode1 = - new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Node1Builder(); - - tpNode1.setTerminationPoint(tpList); - - nodebldr.addAugmentation( - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Node1.class, - tpNode1.build()); - return new NodeData(nodebldr, portDirectionEnum); + // Create ietf node augmentation to support ietf tp-list + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder + ietfNode1 = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226 + .Node1Builder() + .setTerminationPoint(tpMap); + ietfNodeBldr.addAugmentation(ietfNode1.build()); + return ietfNodeBldr; } - private NodeBuilder createSrgNode(String nodeId, int srgCounter, int portDirectionEnum) { - // Create augmentation node to inorder to add degree - Node1Builder node1bldr = new Node1Builder(); - // set node type to degree - node1bldr.setNodeType(OpenroadmNodeType.SRG); - - node1bldr.setNodeType(OpenroadmNodeType.SRG); - - SrgAttributesBuilder srgAttrBldr = new SrgAttributesBuilder(); - srgAttrBldr.setAvailableWavelengths(create96AvalWaveSrg()); - node1bldr.setSrgAttributes(srgAttrBldr.build()); - - // Create a generic Topo Layer node - NodeBuilder nodebldr = createTopoLayerNode(nodeId); - nodebldr.addAugmentation(Node1.class, node1bldr.build()); - - // Get connection ports on degree number = degreeCounter in order to get port - // direction - int maxPpPorts = getMaxPp(nodeId, srgCounter); - if (maxPpPorts == -1) { - return null; - } - - String nodeIdtopo = new StringBuilder().append(nodeId).append("-SRG").append(srgCounter).toString(); - nodebldr.setNodeId(new NodeId(nodeIdtopo)); - List tpList = new ArrayList<>(); - - TerminationPoint1Builder tp1Bldr; - TerminationPointBuilder tempTpBldr; - - for (int i = 1; i <= maxPpPorts; i++) { - if ((portDirectionEnum == 1) || (portDirectionEnum == 2)) { - if (i >= (maxPpPorts / 2)) { + private static NodeBuilder createDegree(String degNb, List degListMap, String nodeId, String clli, + boolean firstMount) { + // Create tp-list + Map tpMap = new HashMap<>(); + TerminationPointBuilder ietfTpBldr; + for (Mapping m : degListMap) { + ietfTpBldr = createTpBldr(m.getLogicalConnectionPoint()); + // Add openroadm-common-network tp type augmentations + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1Builder + ocnTp1Bldr = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210 + .TerminationPoint1Builder() + .setAdministrativeState(TopologyUtils.setNetworkAdminState(m.getPortAdminState())) + .setOperationalState(TopologyUtils.setNetworkOperState(m.getPortOperState())); + + // Added states to degree port. TODO: add to mapping relation between abstracted and physical node states + switch (m.getPortDirection()) { + case "bidirectional": + ocnTp1Bldr.setTpType(OpenroadmTpType.DEGREETXRXTTP); break; - } - // ports are uni Directional on a degree, therefore 4 termination points - // Create PP-TX termination - tempTpBldr = createTpBldr("SRG" + srgCounter + "-PP" + i + "-TX"); - tp1Bldr = new TerminationPoint1Builder(); - tp1Bldr.setTpType(OpenroadmTpType.SRGTXPP); - tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build()); - tpList.add(tempTpBldr.build()); - - // Create PP-RX termination - tempTpBldr = createTpBldr("SRG" + srgCounter + "-PP" + i + "-RX"); - tp1Bldr = new TerminationPoint1Builder(); - tp1Bldr.setTpType(OpenroadmTpType.SRGRXPP); - tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build()); - tpList.add(tempTpBldr.build()); - - } else if (portDirectionEnum == 3) { - // Ports are bi directional therefore 2 termination points - // Create PP-TXRX termination - tempTpBldr = createTpBldr("SRG" + srgCounter + "-PP" + i + "-TXRX"); - tp1Bldr = new TerminationPoint1Builder(); - tp1Bldr.setTpType(OpenroadmTpType.SRGTXRXPP); - tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build()); - tpList.add(tempTpBldr.build()); + case "tx": + ocnTp1Bldr.setTpType(OpenroadmTpType.DEGREETXTTP); + break; + case "rx": + ocnTp1Bldr.setTpType(OpenroadmTpType.DEGREERXTTP); + break; + default: + LOG.error("impossible to set tp-type to {}", m.getLogicalConnectionPoint()); } + ietfTpBldr.addAugmentation(ocnTp1Bldr.build()); + TerminationPoint ietfTp = ietfTpBldr.build(); + tpMap.put(ietfTp.key(),ietfTp); } - - switch (portDirectionEnum) { - case 1: // ports are uni Directional on a degree - // Create CP-TX termination - tempTpBldr = createTpBldr("SRG" + srgCounter + "-CP" + "-TX"); - tp1Bldr = new TerminationPoint1Builder(); - tp1Bldr.setTpType(OpenroadmTpType.SRGTXCP); - tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build()); - tpList.add(tempTpBldr.build()); - break; - case 2: - // Create CP-RX termination - tempTpBldr = createTpBldr("SRG" + srgCounter + "-CP" + "-RX"); - tp1Bldr = new TerminationPoint1Builder(); - tp1Bldr.setTpType(OpenroadmTpType.SRGRXCP); - tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build()); - tpList.add(tempTpBldr.build()); - break; - case 3: - // Ports are bi directional therefore 2 termination points - // Create CP-TXRX termination - tempTpBldr = createTpBldr("SRG" + srgCounter + "-CP" + "-TXRX"); - tp1Bldr = new TerminationPoint1Builder(); - tp1Bldr.setTpType(OpenroadmTpType.SRGTXRXCP); - tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build()); - tpList.add(tempTpBldr.build()); - break; - default: - LOG.error("No correponsding direction to the value: {}", portDirectionEnum); - break; - } - - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Node1Builder tpNode1 = - new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Node1Builder(); - - tpNode1.setTerminationPoint(tpList); - - nodebldr.addAugmentation( - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Node1.class, - tpNode1.build()); - - return nodebldr; - } - - /* - * This method will return the TTP ports in the device for a given degree number to - * be used by the node to create TTP and CTP termination point on the device. - */ - private List getDegreePorts(String deviceId, Integer degreeCounter) { - List degreeConPorts = new ArrayList<>(); - LOG.info("Getting Connection ports for Degree Number {}", degreeCounter); - InstanceIdentifier deviceIID = InstanceIdentifier.create(OrgOpenroadmDevice.class).child(Degree.class, - new DegreeKey(degreeCounter)); - - Optional ordmDegreeObject = this.deviceTransactionManager.getDataFromDevice(deviceId, - LogicalDatastoreType.CONFIGURATION, deviceIID, Timeouts.DEVICE_READ_TIMEOUT, - Timeouts.DEVICE_READ_TIMEOUT_UNIT); - - if (ordmDegreeObject.isPresent()) { - degreeConPorts.addAll(new ArrayList<>(ordmDegreeObject.get().getConnectionPorts())); - } else { - LOG.info("Device has {} degree", (degreeCounter - 1)); - return Collections.emptyList(); + // Add CTP to tp-list + added states. TODO: same comment as before with the relation between states + ietfTpBldr = createTpBldr(degNb + "-CTP-TXRX"); + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1 ocnTp1 = + new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1Builder() + .setTpType(OpenroadmTpType.DEGREETXRXCTP) + .setAdministrativeState(AdminStates.InService) + .setOperationalState(State.InService) + .build(); + ietfTpBldr.addAugmentation(ocnTp1); + TerminationPoint ietfTp = ietfTpBldr.build(); + tpMap.put(ietfTp.key(),ietfTp); + // set degree-attributes + DegreeAttributesBuilder degAttBldr = new DegreeAttributesBuilder() + .setDegreeNumber(Uint16.valueOf(degNb.split("DEG")[1])); + if (firstMount) { + degAttBldr.setAvailFreqMaps(GridUtils.initFreqMaps4FixedGrid2Available()); } - return degreeConPorts; + DegreeAttributes degAtt = degAttBldr.build(); + // Create ietf node augmentation to support ietf tp-list + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder + ietfNode1 = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226 + .Node1Builder().setTerminationPoint(tpMap); + // set node-id + String nodeIdtopo = new StringBuilder().append(nodeId).append("-").append(degNb).toString(); + Node1 ontNode1 = new Node1Builder().setDegreeAttributes(degAtt).build(); + // Create openroadm-common-network augmentation to set node type to DEGREE + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1 ocnNode1 = + new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1Builder() + .setNodeType(OpenroadmNodeType.DEGREE) + .setAdministrativeState(AdminStates.InService) + .setOperationalState(State.InService) + .build(); + // Create ietf node setting supporting-node data + return createTopoLayerNode(nodeId, clli) + .setNodeId(new NodeId(nodeIdtopo)) + .withKey((new NodeKey(new NodeId(nodeIdtopo)))) + .addAugmentation(ontNode1) + .addAugmentation(ocnNode1) + .addAugmentation(ietfNode1.build()); } - private int getMaxPp(String deviceId, Integer srgCounter) { - int maxPpPorts; - LOG.info("Getting max pp ports for Srg Number {}", srgCounter); - InstanceIdentifier deviceIID = InstanceIdentifier.create(OrgOpenroadmDevice.class) - .child(SharedRiskGroup.class, new SharedRiskGroupKey(srgCounter)); - Optional ordmSrgObject = this.deviceTransactionManager.getDataFromDevice(deviceId, - LogicalDatastoreType.OPERATIONAL, deviceIID, Timeouts.DEVICE_READ_TIMEOUT, - Timeouts.DEVICE_READ_TIMEOUT_UNIT); - if (ordmSrgObject.isPresent()) { - if (ordmSrgObject.get().getMaxAddDropPorts() != null) { - maxPpPorts = ordmSrgObject.get().getMaxAddDropPorts(); - } else { - LOG.info("Max add drop ports absent"); - return -1; + private static NodeBuilder createSrg(String srgNb, List srgListMap, String nodeId, String clli, + boolean firstMount) { + // Create tp-list + Map tpMap = new HashMap<>(); + TerminationPointBuilder ietfTpBldr; + for (Mapping m : srgListMap) { + ietfTpBldr = createTpBldr(m.getLogicalConnectionPoint()); + // Add openroadm-common-network tp type augmentations + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210 + .TerminationPoint1Builder ocnTp1Bldr = new org.opendaylight.yang.gen.v1.http + .org.openroadm.common.network.rev211210.TerminationPoint1Builder() + .setAdministrativeState(TopologyUtils.setNetworkAdminState(m.getPortAdminState())) + .setOperationalState(TopologyUtils.setNetworkOperState(m.getPortOperState())); + // Added states to srg port. TODO: add to mapping relation between abstracted and physical node states + switch (m.getPortDirection()) { + case "bidirectional": + ocnTp1Bldr.setTpType(OpenroadmTpType.SRGTXRXPP); + break; + case "tx": + ocnTp1Bldr.setTpType(OpenroadmTpType.SRGTXPP); + break; + case "rx": + ocnTp1Bldr.setTpType(OpenroadmTpType.SRGRXPP); + break; + default: + LOG.error("impossible to set tp-type to {}", m.getLogicalConnectionPoint()); } - } else { - LOG.info("SRG absent"); - return -1; + ietfTpBldr.addAugmentation(ocnTp1Bldr.build()); + TerminationPoint ietfTp = ietfTpBldr.build(); + tpMap.put(ietfTp.key(),ietfTp); } - return maxPpPorts; + // Add CP to tp-list + added states. TODO: same comment as before with the relation between states + ietfTpBldr = createTpBldr(srgNb + "-CP-TXRX"); + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210 + .TerminationPoint1 ocnTp1 = new org.opendaylight.yang.gen.v1 + .http.org.openroadm.common.network.rev211210.TerminationPoint1Builder() + .setTpType(OpenroadmTpType.SRGTXRXCP) + .setAdministrativeState(AdminStates.InService) + .setOperationalState(State.InService) + .build(); + ietfTpBldr.addAugmentation(ocnTp1); + TerminationPoint ietfTp = ietfTpBldr.build(); + tpMap.put(ietfTp.key(),ietfTp); + // Create openroadm-common-network augmentation to set node type to SRG + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1 ocnNode1 = + new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1Builder() + .setNodeType(OpenroadmNodeType.SRG) + .setAdministrativeState(AdminStates.InService) + .setOperationalState(State.InService) + .build(); + // set srg-attributes + SrgAttributesBuilder srgAttrBldr = new SrgAttributesBuilder(); + if (firstMount) { + srgAttrBldr.setAvailFreqMaps(GridUtils.initFreqMaps4FixedGrid2Available()); + } + SrgAttributes srgAttr = srgAttrBldr.build(); + Node1 ontNode1 = new Node1Builder().setSrgAttributes(srgAttr).build(); + // Create ietf node augmentation to support ietf tp-list + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder + ietfNode1 = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226 + .Node1Builder().setTerminationPoint(tpMap); + // Create ietf node setting supporting-node data + String nodeIdtopo = new StringBuilder().append(nodeId).append("-").append(srgNb).toString(); + return createTopoLayerNode(nodeId, clli) + .setNodeId(new NodeId(nodeIdtopo)) + .withKey((new NodeKey(new NodeId(nodeIdtopo)))) + .addAugmentation(ontNode1) + .addAugmentation(ocnNode1) + .addAugmentation(ietfNode1.build()); } - private NodeBuilder createTopoLayerNode(String nodeId) { + private static NodeBuilder createTopoLayerNode(String nodeId, String clli) { // Sets the value of Network-ref and Node-ref as a part of the supporting node // attribute - SupportingNodeBuilder supportbldr = new SupportingNodeBuilder(); - supportbldr.setKey(new SupportingNodeKey(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID), new NodeId(nodeId))); - supportbldr.setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID)); - supportbldr.setNodeRef(new NodeId(nodeId)); - ArrayList supportlist = new ArrayList<>(); - supportlist.add(supportbldr.build()); - NodeBuilder nodebldr = new NodeBuilder(); - nodebldr.setSupportingNode(supportlist); - return nodebldr; + SupportingNodeBuilder support1bldr = new SupportingNodeBuilder() + .withKey(new SupportingNodeKey(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID), new NodeId(nodeId))) + .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID)) + .setNodeRef(new NodeId(nodeId)); + SupportingNodeBuilder support2bldr = new SupportingNodeBuilder() + .withKey(new SupportingNodeKey(new NetworkId(NetworkUtils.CLLI_NETWORK_ID), new NodeId(clli))) + .setNetworkRef(new NetworkId(NetworkUtils.CLLI_NETWORK_ID)) + .setNodeRef(new NodeId(clli)); + Map supportlist = new HashMap<>(); + SupportingNode support1 = support1bldr.build(); + supportlist.put(support1.key(),support1); + SupportingNode support2 = support2bldr.build(); + supportlist.put(support2.key(),support2); + return new NodeBuilder().setSupportingNode(supportlist); } - // Return 0 for null/error values - // Return 1 for tx - // Return 2 for rx - // Return 3 for bi-directional - - private int getPortDirection(String deviceId, String circuitPackName, String portName) { - InstanceIdentifier portIID = InstanceIdentifier.create(OrgOpenroadmDevice.class) - .child(CircuitPacks.class, new CircuitPacksKey(circuitPackName)) - .child(Ports.class, new PortsKey(portName)); - LOG.info("Fetching Port Direction for port {} at circuit pack {}", portName, circuitPackName); - Optional portObject = this.deviceTransactionManager.getDataFromDevice(deviceId, - LogicalDatastoreType.OPERATIONAL, portIID, Timeouts.DEVICE_READ_TIMEOUT, - Timeouts.DEVICE_READ_TIMEOUT_UNIT); - if (portObject.isPresent()) { - Ports port = portObject.get(); - if (port.getPortDirection() != null) { - return port.getPortDirection().getIntValue(); - } else { - LOG.warn("Port direction value missing for {} {}", circuitPackName, port.getPortName()); - return 0; - } - } - return 0; - } // This method returns a generic termination point builder for a given tpid - private TerminationPointBuilder createTpBldr(String tpId) { - TerminationPointBuilder tpBldr = new TerminationPointBuilder(); + private static TerminationPointBuilder createTpBldr(String tpId) { TpId tp = new TpId(tpId); - TerminationPointKey tpKey = new TerminationPointKey(tp); - tpBldr.setKey(tpKey); - tpBldr.setTpId(tp); - return tpBldr; + return new TerminationPointBuilder().withKey(new TerminationPointKey(tp)).setTpId(tp); } - // This method returns the linkBuilder object for given source and destination. - public LinkBuilder createLink(String srcNode, String dstNode, String srcTp, String destTp) { - LOG.info("creating link for {}-{}", srcNode, dstNode); - // Create Destination for link - DestinationBuilder dstNodeBldr = new DestinationBuilder(); - dstNodeBldr.setDestTp(destTp); - dstNodeBldr.setDestNode(new NodeId(dstNode)); - // Create Source for the link - SourceBuilder srcNodeBldr = new SourceBuilder(); - srcNodeBldr.setSourceNode(new NodeId(srcNode)); - srcNodeBldr.setSourceTp(srcTp); - LinkBuilder lnkBldr = new LinkBuilder(); - // set link builder attribute - lnkBldr.setDestination(dstNodeBldr.build()); - lnkBldr.setSource(srcNodeBldr.build()); - lnkBldr.setLinkId(LinkIdUtil.buildLinkId(srcNode, srcTp, dstNode, destTp)); - lnkBldr.setKey(new LinkKey(lnkBldr.getLinkId())); - org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links.rev170929.Link1Builder lnk1Bldr = - new org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links.rev170929.Link1Builder(); - LinkId oppositeLinkId = LinkIdUtil.getOppositeLinkId(srcNode, srcTp, dstNode, destTp); - lnk1Bldr.setOppositeLink(oppositeLinkId); - lnkBldr.addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links.rev170929.Link1.class, - lnk1Bldr.build()); - return lnkBldr; + private static LinkBuilder createLink(String srcNode, String destNode, String srcTp, String destTp) { + //create source link + SourceBuilder ietfSrcLinkBldr = new SourceBuilder() + .setSourceNode(new NodeId(srcNode)) + .setSourceTp(new TpId(srcTp)); + //create destination link + DestinationBuilder ietfDestLinkBldr = new DestinationBuilder() + .setDestNode(new NodeId(destNode)) + .setDestTp(new TpId(destTp)); + LinkId linkId = LinkIdUtil.buildLinkId(srcNode, srcTp, destNode, destTp); + return new LinkBuilder() + .setSource(ietfSrcLinkBldr.build()) + .setDestination(ietfDestLinkBldr.build()) + .setLinkId(linkId) + .withKey(new LinkKey(linkId)); } - private List createExpressLinks(String nodeId, int numOfDegrees, int portDirectionEnum) { - LOG.info("creating express links {} {} {}", nodeId, numOfDegrees, portDirectionEnum); + private static List createNewLinks(List nodes) { List links = new ArrayList<>(); - String srcNode; String destNode; - String srcTp; String destTp; - - // ports are uni-directional - if ((portDirectionEnum == 1) || (portDirectionEnum == 2)) { - LOG.info("creating uni-directional express links"); - for (int i = 1; i <= numOfDegrees; i++) { - for (int j = i + 1; j <= numOfDegrees; j++) { - - srcNode = nodeId + "-DEG" + i; - destNode = nodeId + "-DEG" + j; - - // AtoZ direction - srcTp = "DEG" + i + "-CTP-TX"; - destTp = "DEG" + j + "-CTP-RX"; - - LinkBuilder expLinkBldr = createLink(srcNode, destNode, srcTp, destTp); - - Link1Builder lnk1Bldr = new Link1Builder(); - lnk1Bldr.setLinkType(OpenroadmLinkType.EXPRESSLINK); - expLinkBldr.addAugmentation(Link1.class, lnk1Bldr.build()); - - links.add(expLinkBldr.build()); - - // ZtoA direction - srcTp = "DEG" + i + "-CTP-RX"; - destTp = "DEG" + j + "-CTP-TX"; - - expLinkBldr = createLink(destNode, srcNode, destTp, srcTp); - expLinkBldr.addAugmentation(Link1.class, lnk1Bldr.build()); - - links.add(expLinkBldr.build()); - - } - } - } - - // ports are bi-directional - if (portDirectionEnum == 3) { - LOG.info("creating bi-directional express links"); - for (int i = 1; i <= numOfDegrees; i++) { - for (int j = i + 1; j <= numOfDegrees; j++) { - - srcNode = nodeId + "-DEG" + i; - destNode = nodeId + "-DEG" + j; - - // AtoZ direction - srcTp = "DEG" + i + "-CTP-TXRX"; - destTp = "DEG" + j + "-CTP-TXRX"; - - Link1Builder lnk1Bldr = new Link1Builder(); - lnk1Bldr.setLinkType(OpenroadmLinkType.EXPRESSLINK); - - LinkBuilder expLinkBldr = createLink(srcNode, destNode, srcTp, destTp); - expLinkBldr.addAugmentation(Link1.class, lnk1Bldr.build()); - links.add(expLinkBldr.build()); - - // ZtoA direction - expLinkBldr = createLink(destNode, srcNode, destTp, srcTp); - expLinkBldr.addAugmentation(Link1.class, lnk1Bldr.build()); - links.add(expLinkBldr.build()); + for (int i = 0; i < nodes.size() - 1; i++) { + for (int j = i + 1; j < nodes.size(); j++) { + srcNode = nodes.get(i).getNodeId().getValue(); + destNode = nodes.get(j).getNodeId().getValue(); + // A to Z direction + srcTp = nodes.get(i) + .augmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang + .ietf.network.topology.rev180226.Node1.class) + .nonnullTerminationPoint().values().stream() + .filter(tp -> tp.getTpId().getValue().contains("CP") || tp.getTpId().getValue().contains("CTP")) + .findFirst().get().getTpId().getValue(); + destTp = nodes.get(j) + .augmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang + .ietf.network.topology.rev180226.Node1.class) + .nonnullTerminationPoint().values().stream() + .filter(tp -> tp.getTpId().getValue().contains("CP") || tp.getTpId().getValue().contains("CTP")) + .findFirst().get().getTpId().getValue(); + Link1Builder ocnAzLinkBldr = new Link1Builder(); + int srcNodeType = nodes.get(i).augmentation(org.opendaylight.yang.gen.v1.http + .org.openroadm.common.network.rev211210.Node1.class).getNodeType().getIntValue(); + int destNodeType = nodes.get(j).augmentation(org.opendaylight.yang.gen.v1.http + .org.openroadm.common.network.rev211210.Node1.class).getNodeType().getIntValue(); + if (srcNodeType == 11 && destNodeType == 11) { + ocnAzLinkBldr.setLinkType(OpenroadmLinkType.EXPRESSLINK); + } else if (srcNodeType == 11 && destNodeType == 12) { + ocnAzLinkBldr.setLinkType(OpenroadmLinkType.DROPLINK); + } else if (srcNodeType == 12 && destNodeType == 11) { + ocnAzLinkBldr.setLinkType(OpenroadmLinkType.ADDLINK); + } else { + continue; } - } - } - return links; - } - - private List createAddDropLinks(String nodeId, int numOfDegrees, int numOfSrgs, int portDirectionEnum) { - LOG.info("creating add-drop links {} {} {} {}", nodeId, numOfDegrees, numOfSrgs, portDirectionEnum); - List links = new ArrayList<>(); - - String srcNode; - String destNode; - - String srcTp; - String destTp; - - // ports are uni-directional - if ((portDirectionEnum == 1) || (portDirectionEnum == 2)) { - LOG.info("creating uni-directional add-drop links"); - for (int i = 1; i <= numOfDegrees; i++) { - for (int j = 1; j <= numOfSrgs; j++) { - - srcNode = nodeId + "-DEG" + i; - destNode = nodeId + "-SRG" + j; - - // drop links - srcTp = "DEG" + i + "-CTP-TX"; - destTp = "SRG" + j + "-CP-RX"; - - LinkBuilder addDropLinkBldr = createLink(srcNode, destNode, srcTp, destTp); - Link1Builder lnk1Bldr = new Link1Builder(); - lnk1Bldr.setLinkType(OpenroadmLinkType.DROPLINK); - addDropLinkBldr.addAugmentation(Link1.class, lnk1Bldr.build()); - links.add(addDropLinkBldr.build()); - - // add links direction - srcTp = "DEG" + i + "-CTP-RX"; - destTp = "SRG" + j + "-CP-TX"; - - addDropLinkBldr = createLink(destNode, srcNode, destTp, srcTp); - lnk1Bldr.setLinkType(OpenroadmLinkType.ADDLINK); - addDropLinkBldr.addAugmentation(Link1.class, lnk1Bldr.build()); - links.add(addDropLinkBldr.build()); - + // Z to A direction + Link1Builder ocnZaLinkBldr = new Link1Builder(); + if (srcNodeType == 11 && destNodeType == 11) { + ocnZaLinkBldr.setLinkType(OpenroadmLinkType.EXPRESSLINK); + } else if (destNodeType == 11 && srcNodeType == 12) { + ocnZaLinkBldr.setLinkType(OpenroadmLinkType.DROPLINK); + } else if (destNodeType == 12 && srcNodeType == 11) { + ocnZaLinkBldr.setLinkType(OpenroadmLinkType.ADDLINK); + } else { + continue; } - } - } - // ports are bi-directional - if (portDirectionEnum == 3) { - LOG.info("creating bi-directional add-drop links"); - for (int i = 1; i <= numOfDegrees; i++) { - for (int j = 1; j <= numOfSrgs; j++) { - - srcNode = nodeId + "-DEG" + i; - destNode = nodeId + "-SRG" + j; - - // drop links - srcTp = "DEG" + i + "-CTP-TXRX"; - destTp = "SRG" + j + "-CP-TXRX"; - - LinkBuilder addDropLinkBldr = createLink(srcNode, destNode, srcTp, destTp); - Link1Builder lnk1Bldr = new Link1Builder(); - lnk1Bldr.setLinkType(OpenroadmLinkType.DROPLINK); - addDropLinkBldr.addAugmentation(Link1.class, lnk1Bldr.build()); - links.add(addDropLinkBldr.build()); - - // add link - addDropLinkBldr = createLink(destNode, srcNode, destTp, srcTp); - lnk1Bldr.setLinkType(OpenroadmLinkType.ADDLINK); - addDropLinkBldr.addAugmentation(Link1.class, lnk1Bldr.build()); - links.add(addDropLinkBldr.build()); + // Add state to link. Based on the operational state of the TPs at the edge of the link. + // Similar to getting srcTp and destTp + State srcTpState = nodes.get(i) + .augmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang + .ietf.network.topology.rev180226.Node1.class) + .getTerminationPoint().values().stream() + .filter(tp -> tp.getTpId().getValue().contains("CP") || tp.getTpId().getValue().contains("CTP")) + .findFirst().get() + .augmentation(org.opendaylight.yang.gen.v1.http + .org.openroadm.common.network.rev211210.TerminationPoint1.class) + .getOperationalState(); + State destTpState = nodes.get(j) + .augmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang + .ietf.network.topology.rev180226.Node1.class) + .getTerminationPoint().values().stream() + .filter(tp -> tp.getTpId().getValue().contains("CP") || tp.getTpId().getValue().contains("CTP")) + .findFirst().get() + .augmentation(org.opendaylight.yang.gen.v1.http + .org.openroadm.common.network.rev211210.TerminationPoint1.class) + .getOperationalState(); + if (State.InService.equals(srcTpState) && State.InService.equals(destTpState)) { + ocnAzLinkBldr.setAdministrativeState(AdminStates.InService) + .setOperationalState(State.InService); + ocnZaLinkBldr.setAdministrativeState(AdminStates.InService) + .setOperationalState(State.InService); + } else { + ocnAzLinkBldr.setAdministrativeState(AdminStates.OutOfService) + .setOperationalState(State.OutOfService); + ocnZaLinkBldr.setAdministrativeState(AdminStates.OutOfService) + .setOperationalState(State.OutOfService); } + // set opposite link augmentations + LinkBuilder ietfAzLinkBldr = createLink(srcNode, destNode, srcTp, destTp); + LinkBuilder ietfZaLinkBldr = createLink(destNode, srcNode, destTp, srcTp); + ocnAzLinkBldr.setOppositeLink(ietfZaLinkBldr.getLinkId()); + ietfAzLinkBldr.addAugmentation(ocnAzLinkBldr.build()); + ocnZaLinkBldr.setOppositeLink(ietfAzLinkBldr.getLinkId()); + ietfZaLinkBldr.addAugmentation(ocnZaLinkBldr.build()); + links.add(ietfAzLinkBldr.build()); + links.add(ietfZaLinkBldr.build()); } } return links; } - // This method returns the linkBuilder object for given source and destination. - public boolean deleteLink(String srcNode, String dstNode, String srcTp, String destTp) { + // This method returns the linkBuilder object for given source and destination + public static boolean deleteLink(String srcNode, String dstNode, String srcTp, String destTp, + NetworkTransactionService networkTransactionService) { LOG.info("deleting link for {}-{}", srcNode, dstNode); - try { - InstanceIdentifierBuilder linkIID = InstanceIdentifier - .builder(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))) - .augmentation(Network1.class) - .child(Link.class, new LinkKey(LinkIdUtil.buildLinkId(srcNode, srcTp, dstNode, destTp))); - WriteTransaction wrtx = this.dataBroker.newWriteOnlyTransaction(); - wrtx.delete(LogicalDatastoreType.CONFIGURATION, linkIID.build()); - wrtx.submit().get(1, TimeUnit.SECONDS); - } catch (InterruptedException | ExecutionException | TimeoutException e) { - LOG.error(e.getMessage(), e); + LinkId linkId = LinkIdUtil.buildLinkId(srcNode, srcTp, dstNode, destTp); + if (deleteLinkLinkId(linkId, networkTransactionService)) { + LOG.debug("Link Id {} updated to have admin state down", linkId); + return true; + } else { + LOG.debug("Link Id not found for Source {} and Dest {}", srcNode, dstNode); return false; } - return true; } - private List create96AvalWaveDegree() { - List waveList = new ArrayList<>(); + // This method returns the linkBuilder object for given source and destination + public static boolean deleteLinkLinkId(LinkId linkId , NetworkTransactionService networkTransactionService) { + LOG.info("deleting link for LinkId: {}", linkId.getValue()); + try { + InstanceIdentifierBuilder 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)); + java.util.Optional link = + networkTransactionService.read(LogicalDatastoreType.CONFIGURATION,linkIID.build()).get(); + if (link.isPresent()) { + LinkBuilder linkBuilder = new LinkBuilder(link.get()); + org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Link1Builder link1Builder = + new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Link1Builder( + linkBuilder + .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210 + .Link1.class)); + linkBuilder.removeAugmentation(Link1.class) + .addAugmentation(link1Builder.build()); + networkTransactionService.merge(LogicalDatastoreType.CONFIGURATION, linkIID.build(), + linkBuilder.build()); + networkTransactionService.commit().get(1, TimeUnit.SECONDS); + return true; + } else { + LOG.error("No link found for given LinkId: {}", linkId); + return false; + } - for (int i = 1; i < 97; i++) { - AvailableWavelengthsBuilder avalBldr = new AvailableWavelengthsBuilder(); - avalBldr.setIndex((long) i); - avalBldr.setKey(new AvailableWavelengthsKey((long) i)); - waveList.add(avalBldr.build()); + } catch (InterruptedException | ExecutionException | TimeoutException e) { + LOG.error("Error deleting link {}", linkId.getValue(), e); + return false; } - - return waveList; } - private List - create96AvalWaveSrg() { + /** + * Get a builder for instance identifier related to common network termination point. + * @param nodeId String + * @param tpId String + * @return InstanceIdentifierBuilder + */ + public static InstanceIdentifierBuilder createCommonNetworkTerminationPointIIDBuilder(String nodeId, String tpId) { + return InstanceIdentifier.builder(Networks.class) + .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))) + .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226 + .networks.network.Node.class, + new NodeKey(new NodeId(nodeId))) + .augmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226 + .Node1.class) + .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks + .network.node.TerminationPoint.class, + new TerminationPointKey(new TpId(tpId))) + .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210 + .TerminationPoint1.class); + } - List - waveList = new ArrayList<>(); + /** + * Get a builder for instance identifier related to network termination point. + * @param nodeId String + * @param tpId String + * @return InstanceIdentifierBuilder + */ + public static InstanceIdentifierBuilder createNetworkTerminationPointIIDBuilder(String nodeId, + String tpId) { + return InstanceIdentifier.builder(Networks.class) + .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))) + .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226 + .networks.network.Node.class, + new NodeKey(new NodeId(nodeId))) + .augmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226 + .Node1.class) + .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226 + .networks.network.node.TerminationPoint.class, + new TerminationPointKey(new TpId(tpId))) + .augmentation(TerminationPoint1.class); + } - for (int i = 1; i < 97; i++) { - org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev170929.srg.node.attributes - .AvailableWavelengthsBuilder avalBldr = - new org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev170929.srg.node.attributes - .AvailableWavelengthsBuilder(); - avalBldr.setIndex((long) i); - avalBldr.setKey( - new org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev170929.srg.node.attributes - .AvailableWavelengthsKey((long) i)); - waveList.add(avalBldr.build()); - } + /** + * Get an instance identifier related to network node. + * @param nodeId String + * @return InstanceIdentifier + */ + public static InstanceIdentifier createNetworkNodeIID(String nodeId) { + return InstanceIdentifier.builder(Networks.class) + .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))) + .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226 + .networks.network.Node.class, + new NodeKey(new NodeId(nodeId))) + .augmentation(Node1.class).build(); + } - return waveList; + /** + * Get an instance identifier related to common network node. + * @param nodeId String + * @return InstanceIdentifier + */ + public static InstanceIdentifier createCommonNetworkNodeIID(String nodeId) { + return InstanceIdentifier.builder(Networks.class) + .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))) + .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226 + .networks.network.Node.class, + new NodeKey(new NodeId(nodeId))) + .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1.class) + .build(); } }