X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=tapi%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Ftransportpce%2Ftapi%2Ftopology%2FTopologyUtils.java;h=9eca76d6990f102d839379d905b0fea1e0ce58e3;hb=652c9098f8d97e6f5a723a7c55929f9351bffb5b;hp=27b7e79e1c8583e77d01e307810374559cac1ae8;hpb=e8b516c52451ad5055529b3e11065546a58394b3;p=transportpce.git diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TopologyUtils.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TopologyUtils.java index 27b7e79e1..9eca76d69 100644 --- a/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TopologyUtils.java +++ b/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TopologyUtils.java @@ -17,6 +17,7 @@ import java.util.List; import java.util.Map; import java.util.NoSuchElementException; import java.util.Optional; +import java.util.Set; import java.util.UUID; import java.util.concurrent.ExecutionException; import java.util.stream.Collectors; @@ -27,37 +28,43 @@ import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.transportpce.common.InstanceIdentifiers; import org.opendaylight.transportpce.common.NetworkUtils; import org.opendaylight.transportpce.common.network.NetworkTransactionService; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.mapping.Mapping; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.mapping.MappingKey; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.network.Nodes; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.network.NodesKey; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Link1; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.TerminationPoint1; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.OpenroadmLinkType; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.OpenroadmNodeType; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.OpenroadmTpType; +import org.opendaylight.transportpce.tapi.TapiStringConstants; +import org.opendaylight.transportpce.tapi.utils.TapiLink; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.MappingKey; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.Nodes; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.NodesKey; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmLinkType; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmNodeType; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmTpType; 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.topology.rev180226.Network1; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1; 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.node.TerminationPoint; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.LayerProtocolName; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Uuid; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.Name; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameBuilder; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.tapi.context.ServiceInterfacePoint; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.tapi.context.ServiceInterfacePointKey; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.OwnedNodeEdgePoint1; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.OwnedNodeEdgePoint; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.OwnedNodeEdgePointBuilder; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.OwnedNodeEdgePointKey; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.LinkKey; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.NodeBuilder; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.NodeKey; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.context.Topology; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.context.TopologyBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Context; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.LayerProtocolName; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Uuid; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.Name; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.NameBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.NameKey; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePoint; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePointKey; +//import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.OwnedNodeEdgePoint1; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.context.TopologyContext; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePoint; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePointBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePointKey; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.LinkKey; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.NodeBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.NodeKey; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.Topology; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.TopologyBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.TopologyKey; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier; import org.slf4j.Logger; @@ -68,15 +75,19 @@ public final class TopologyUtils { private final NetworkTransactionService networkTransactionService; private final DataBroker dataBroker; private static final Logger LOG = LoggerFactory.getLogger(TopologyUtils.class); - public static final String T0_MULTILAYER = "T0 - Multi-layer topology"; - public static final String T0_FULL_MULTILAYER = "T0 - Full Multi-layer topology"; - public static final String TPDR_100G = "Transponder 100GE"; private Map tapiSips; + private final TapiLink tapiLink; + private String topologicalMode; + public static final String NOOPMODEDECLARED = "No operational mode declared in Topo for Tp {}, assumes by default "; - public TopologyUtils(NetworkTransactionService networkTransactionService, DataBroker dataBroker) { + public TopologyUtils(NetworkTransactionService networkTransactionService, DataBroker dataBroker, + TapiLink tapiLink) { this.networkTransactionService = networkTransactionService; this.dataBroker = dataBroker; this.tapiSips = new HashMap<>(); + this.tapiLink = tapiLink; + // TODO: Initially set topological mode to Full. Shall be set through the setter at controller initialization + this.topologicalMode = "Full"; } public Network readTopology(InstanceIdentifier networkIID) throws TapiTopologyException { @@ -84,7 +95,7 @@ public final class TopologyUtils { ListenableFuture> topologyFuture = this.networkTransactionService.read(LogicalDatastoreType.CONFIGURATION, networkIID); try { - topology = topologyFuture.get().get(); + topology = topologyFuture.get().orElseThrow(); } catch (InterruptedException e) { Thread.currentThread().interrupt(); throw new TapiTopologyException("Unable to get from mdsal topology: " + networkIID @@ -98,115 +109,166 @@ public final class TopologyUtils { return topology; } + public List readTopologyName(Uuid topoUuid) throws TapiTopologyException { + Topology topology = null; + InstanceIdentifier topoIID = InstanceIdentifier.builder( + Context.class).augmentation(org.opendaylight.yang.gen.v1.urn + .onf.otcc.yang.tapi.topology.rev221121.Context1.class).child(TopologyContext.class) + .child(Topology.class, new TopologyKey(topoUuid)).build(); + + ListenableFuture> topologyFuture = + this.networkTransactionService.read(LogicalDatastoreType.OPERATIONAL, topoIID); + try { + topology = topologyFuture.get().orElseThrow(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new TapiTopologyException("Unable to get from mdsal topology: " + topoIID + .firstKeyOf(Topology.class).getUuid().getValue(), e); + } catch (ExecutionException e) { + throw new TapiTopologyException("Unable to get from mdsal topology: " + topoIID + .firstKeyOf(Topology.class).getUuid().getValue(), e); + } catch (NoSuchElementException e) { + return null; + } + List nameList = new ArrayList<>(); + for (Map.Entry entry : topology.getName().entrySet()) { + nameList.add(entry.getValue().getValue()); + } + LOG.debug("Topology nameList {} = ", nameList.toString()); + return nameList; + } + public Topology createFullOtnTopology() throws TapiTopologyException { // read openroadm-topology Network openroadmTopo = readTopology(InstanceIdentifiers.OVERLAY_NETWORK_II); - List linkList = new ArrayList<>(); - if (openroadmTopo.augmentation(Network1.class) != null) { - linkList.addAll(openroadmTopo.augmentation(Network1.class).getLink().values()); - } - List xponderOutLinkList = linkList.stream() - .filter(lk -> lk.augmentation(Link1.class).getLinkType().equals(OpenroadmLinkType.XPONDEROUTPUT)) - .collect(Collectors.toList()); - List xponderInLinkList = linkList.stream() - .filter(lk -> lk.augmentation(Link1.class).getLinkType().equals(OpenroadmLinkType.XPONDERINPUT)) - .collect(Collectors.toList()); - // read otn-topology - Network otnTopo = readTopology(InstanceIdentifiers.OTN_NETWORK_II); - Map otnNodeMap = otnTopo.nonnullNode() - .values().stream().collect(Collectors.toMap(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang - .ietf.network.rev180226.networks.network.Node::getNodeId, node -> node)); + String topoType = this.topologicalMode.equals("Full") ? TapiStringConstants.T0_FULL_MULTILAYER + : TapiStringConstants.T0_TAPI_MULTILAYER; + Uuid topoUuid = new Uuid(UUID.nameUUIDFromBytes(topoType.getBytes(Charset.forName("UTF-8"))).toString()); + Name name = new NameBuilder() + .setValue(topoType) + .setValueName("TAPI Topology Name") + .build(); + if (openroadmTopo != null) { + List linkList = new ArrayList<>(); + if (openroadmTopo.augmentation(Network1.class) != null) { + linkList.addAll(openroadmTopo.augmentation(Network1.class).getLink().values()); + } + List xponderOutLinkList = linkList.stream() + .filter(lk -> lk.augmentation(Link1.class).getLinkType().equals(OpenroadmLinkType.XPONDEROUTPUT)) + .collect(Collectors.toList()); + List xponderInLinkList = linkList.stream() + .filter(lk -> lk.augmentation(Link1.class).getLinkType().equals(OpenroadmLinkType.XPONDERINPUT)) + .collect(Collectors.toList()); + // read otn-topology + Network otnTopo = readTopology(InstanceIdentifiers.OTN_NETWORK_II); + Map otnNodeMap = otnTopo.nonnullNode() + .values().stream().collect(Collectors.toMap(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang + .ietf.network.rev180226.networks.network.Node::getNodeId, node -> node)); - Map> networkPortMap = new HashMap<>(); - Iterator> itOtnNodeMap = otnNodeMap - .entrySet().iterator(); - while (itOtnNodeMap.hasNext()) { - Map.Entry entry = itOtnNodeMap.next(); - String portMappingNodeId = entry.getValue().getSupportingNode().values().stream() - .filter(sn -> sn.getNetworkRef().getValue().equals(NetworkUtils.UNDERLAY_NETWORK_ID)) - .findFirst() - .get().getNodeRef().getValue(); - List networkPortList = new ArrayList<>(); - for (TerminationPoint tp: entry.getValue().augmentation(Node1.class).getTerminationPoint().values()) { - // TODO -> why are we checking with respect to XPDR links?? Is there a real purpose on doing that? - if (tp.augmentation(TerminationPoint1.class).getTpType().equals(OpenroadmTpType.XPONDERNETWORK) - && checkTp(entry.getKey().getValue(), portMappingNodeId, tp, xponderOutLinkList, - xponderInLinkList)) { - networkPortList.add(tp.getTpId().getValue()); + Map> networkPortMap = new HashMap<>(); + Iterator> itOtnNodeMap = otnNodeMap + .entrySet().iterator(); + while (itOtnNodeMap.hasNext()) { + Map.Entry entry = itOtnNodeMap.next(); + String portMappingNodeId = entry.getValue().getSupportingNode().values().stream() + .filter(sn -> sn.getNetworkRef().getValue().equals(NetworkUtils.UNDERLAY_NETWORK_ID)) + .findFirst() + .orElseThrow().getNodeRef().getValue(); + List networkPortList = new ArrayList<>(); + for (TerminationPoint tp: entry.getValue().augmentation(Node1.class).getTerminationPoint().values()) { + // TODO -> why are we checking with respect to XPDR links?? Is there a real purpose on doing that? + if (tp.augmentation(TerminationPoint1.class).getTpType().equals(OpenroadmTpType.XPONDERNETWORK) + && checkTp(entry.getKey().getValue(), portMappingNodeId, tp, xponderOutLinkList, + xponderInLinkList)) { + networkPortList.add(tp.getTpId().getValue()); + } + } + if (!networkPortList.isEmpty()) { + networkPortMap.put(entry.getKey().getValue(), networkPortList); } } - if (!networkPortList.isEmpty()) { - networkPortMap.put(entry.getKey().getValue(), networkPortList); - } - } - Map - tapiNodeList = new HashMap<>(); - Map - tapiLinkList = new HashMap<>(); - Uuid topoUuid = new Uuid(UUID.nameUUIDFromBytes(TopologyUtils.T0_FULL_MULTILAYER - .getBytes(Charset.forName("UTF-8"))).toString()); - ConvertORTopoToTapiFullTopo tapiFactory = new ConvertORTopoToTapiFullTopo(topoUuid); - Iterator>> it = networkPortMap.entrySet().iterator(); - while (it.hasNext()) { - String nodeId = it.next().getKey(); - tapiFactory.convertNode(otnNodeMap.get(new NodeId(nodeId)), networkPortMap.get(nodeId)); - tapiNodeList.putAll(tapiFactory.getTapiNodes()); - tapiLinkList.putAll(tapiFactory.getTapiLinks()); - } - // roadm infrastructure not abstracted - // read openroadm-network - Network openroadmNet = readTopology(InstanceIdentifiers.UNDERLAY_NETWORK_II); - if (openroadmNet != null && openroadmNet.nonnullNode().values().stream().filter(nt -> - nt.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1.class) - .getNodeType().equals(OpenroadmNodeType.ROADM)).count() > 0) { - // map roadm nodes - for (org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node - roadm:openroadmNet.nonnullNode().values().stream().filter( - nt -> nt.augmentation(org.opendaylight.yang.gen.v1.http - .org.openroadm.common.network.rev200529.Node1.class) - .getNodeType().equals(OpenroadmNodeType.ROADM)) - .collect(Collectors.toList())) { - tapiFactory.convertRoadmNode(roadm, openroadmTopo); + Map + tapiNodeList = new HashMap<>(); + Map + tapiLinkList = new HashMap<>(); + ConvertORTopoToTapiFullTopo tapiFullFactory = new ConvertORTopoToTapiFullTopo(topoUuid, this.tapiLink); + ConvertORToTapiTopology tapiFactory = new ConvertORToTapiTopology(topoUuid); + Iterator>> it = networkPortMap.entrySet().iterator(); + while (it.hasNext()) { + String nodeId = it.next().getKey(); + tapiFactory.convertNode(otnNodeMap.get(new NodeId(nodeId)), networkPortMap.get(nodeId)); + this.tapiSips.putAll(tapiFactory.getTapiSips()); + tapiFullFactory.setTapiNodes(tapiFactory.getTapiNodes()); + tapiFullFactory.setTapiSips(tapiFactory.getTapiSips()); tapiNodeList.putAll(tapiFactory.getTapiNodes()); + tapiLinkList.putAll(tapiFullFactory.getTapiLinks()); } - } else { - LOG.warn("No roadm nodes exist in the network"); - } - // map roadm to roadm link - List rdmTordmLinkList = linkList.stream() - .filter(lk -> lk.augmentation(Link1.class).getLinkType().equals(OpenroadmLinkType.ROADMTOROADM)) - .collect(Collectors.toList()); - tapiFactory.convertRdmToRdmLinks(rdmTordmLinkList); - tapiLinkList.putAll(tapiFactory.getTapiLinks()); - // map xpdr_input to roadm and xpdr_output to roadm links. - xponderInLinkList.addAll(xponderOutLinkList); - tapiFactory.convertXpdrToRdmLinks(xponderInLinkList); - tapiLinkList.putAll(tapiFactory.getTapiLinks()); + // roadm infrastructure not abstracted + // read openroadm-network + Network openroadmNet = readTopology(InstanceIdentifiers.UNDERLAY_NETWORK_II); + if (openroadmNet != null && openroadmNet.nonnullNode().values().stream() + .filter(nt -> nt + .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1.class) + .getNodeType() + .equals(OpenroadmNodeType.ROADM)) + .count() > 0) { + // map roadm nodes + if (this.topologicalMode.equals("Full")) { + for (org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks + .network.Node roadm:openroadmNet.nonnullNode().values().stream() + .filter(nt -> nt + .augmentation( + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1.class) + .getNodeType() + .equals(OpenroadmNodeType.ROADM)) + .collect(Collectors.toList())) { + tapiFullFactory.convertRoadmNode(roadm, openroadmTopo, "Full"); + this.tapiSips.putAll(tapiFullFactory.getTapiSips()); + tapiNodeList.putAll(tapiFullFactory.getTapiNodes()); + tapiLinkList.putAll(tapiFullFactory.getTapiLinks()); + // map roadm to roadm link + List rdmTordmLinkList = linkList.stream() + .filter(lk -> lk.augmentation(Link1.class).getLinkType() + .equals(OpenroadmLinkType.ROADMTOROADM)) + .collect(Collectors.toList()); + tapiFullFactory.convertRdmToRdmLinks(rdmTordmLinkList); + tapiLinkList.putAll(tapiFullFactory.getTapiLinks()); + } + } else { + tapiFullFactory.convertRoadmNode(null, openroadmTopo, "Abstracted"); + this.tapiSips.putAll(tapiFullFactory.getTapiSips()); + tapiNodeList.putAll(tapiFullFactory.getTapiNodes()); + tapiLinkList.putAll(tapiFullFactory.getTapiLinks()); + } - if (otnTopo.augmentation(Network1.class) != null) { - Map otnLinkMap = otnTopo.augmentation(Network1.class).getLink(); - tapiFactory.convertLinks(otnLinkMap); - tapiLinkList.putAll(tapiFactory.getTapiLinks()); - } - Name name = new NameBuilder().setValue(TopologyUtils.T0_FULL_MULTILAYER).setValueName("TAPI Topology Name") - .build(); - // Retrieve created sips map in TapiFactory when mapping all the nodes - this.tapiSips = tapiFactory.getTapiSips(); - return new TopologyBuilder() + } else { + LOG.warn("No roadm nodes exist in the network"); + } + + // map xpdr_input to roadm and xpdr_output to roadm links. + xponderInLinkList.addAll(xponderOutLinkList); + tapiFullFactory.convertXpdrToRdmLinks(xponderInLinkList); + tapiLinkList.putAll(tapiFullFactory.getTapiLinks()); + + // Retrieve created sips map in TapiFactory when mapping all the nodes + this.tapiSips.putAll(tapiFullFactory.getTapiSips()); + return new TopologyBuilder() .setName(Map.of(name.key(), name)) .setUuid(topoUuid) .setNode(tapiNodeList) - .setLayerProtocolName(List.of(LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.ODU, - LayerProtocolName.DSR)) + .setLayerProtocolName(Set.of(LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.ODU, + LayerProtocolName.DSR, LayerProtocolName.DIGITALOTN)) .setLink(tapiLinkList).build(); - } - - public Map getSipMap() { - return tapiSips; + } + return new TopologyBuilder() + .setName(Map.of(name.key(), name)) + .setUuid(topoUuid) + .setLayerProtocolName(Set.of(LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.ODU, + LayerProtocolName.DSR, LayerProtocolName.DIGITALOTN)) + .build(); } public boolean checkTp(String nodeIdTopo, String nodeIdPortMap, TerminationPoint tp, List xpdOut, @@ -215,15 +277,15 @@ public final class TopologyUtils { String networkLcp; if (tp.augmentation(TerminationPoint1.class).getTpType().equals(OpenroadmTpType.XPONDERCLIENT)) { networkLcp = tp.augmentation( - org.opendaylight.yang.gen.v1.http.transportpce.topology.rev210511.TerminationPoint1.class) - .getAssociatedConnectionMapPort(); + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1.class) + .getAssociatedConnectionMapTp().iterator().next().getValue(); } else { networkLcp = tp.getTpId().getValue(); } LOG.info("Network LCP associated = {}", networkLcp); @NonNull KeyedInstanceIdentifier pmIID = InstanceIdentifier.create( - org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.Network.class) + org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.Network.class) .child(Nodes.class, new NodesKey(nodeIdPortMap)).child(Mapping.class, new MappingKey(networkLcp)); @NonNull FluentFuture> mappingOpt = this.dataBroker.newReadOnlyTransaction().read( @@ -231,7 +293,7 @@ public final class TopologyUtils { Mapping mapping = null; if (mappingOpt.isDone()) { try { - mapping = mappingOpt.get().get(); + mapping = mappingOpt.get().orElseThrow(); } catch (InterruptedException | ExecutionException e) { LOG.error("Error getting mapping for {}", networkLcp,e); return false; @@ -243,7 +305,6 @@ public final class TopologyUtils { } LOG.info("Mapping found = {}", mapping); String networkPortDirection = mapping.getPortDirection(); - // long count = 0; switch (networkPortDirection) { // TODO -> remove the part of counting only if the Network LCP is part of a Link. // We want to have all OTN nodes in the TAPI topology @@ -261,50 +322,56 @@ public final class TopologyUtils { } } - public org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.get.topology.details.output.Topology + public org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.get.topology.details.output.Topology transformTopology(Topology topology) { - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210 + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121 .get.topology.details.output.TopologyBuilder topologyBuilder = - new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210 + new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121 .get.topology.details.output.TopologyBuilder() .setUuid(topology.getUuid()) .setName(topology.getName()) .setLayerProtocolName(topology.getLayerProtocolName()) - .setNode(topology.getNode()) .setLink(topology.getLink()); - if (topology.getNode() == null) { - topologyBuilder.setNode(topology.getNode()); + if (topology.nonnullNode().isEmpty()) { return topologyBuilder.build(); } - // TODO -> Need to remove CEPs from NEPs. If not error from get Topology details output Map mapNode = new HashMap<>(); - for (Node node: topology.getNode().values()) { + for (Node node: topology.nonnullNode().values()) { Map onepMap = new HashMap<>(); - for (OwnedNodeEdgePoint onep: node.getOwnedNodeEdgePoint().values()) { - OwnedNodeEdgePoint1 onep1 = onep.augmentation(OwnedNodeEdgePoint1.class); - if (onep1 == null) { - onepMap.put(onep.key(), onep); - continue; - } - OwnedNodeEdgePointBuilder newOnepBuilder = new OwnedNodeEdgePointBuilder() + for (OwnedNodeEdgePoint onep: node.nonnullOwnedNodeEdgePoint().values()) { +// OwnedNodeEdgePoint1 onep1 = onep.augmentation(OwnedNodeEdgePoint1.class); +// if (onep1 == null) { +// onepMap.put(onep.key(), onep); +// continue; +// } + OwnedNodeEdgePoint newOnep = new OwnedNodeEdgePointBuilder() .setUuid(onep.getUuid()) .setLayerProtocolName(onep.getLayerProtocolName()) .setName(onep.getName()) - .setSupportedCepLayerProtocolQualifier(onep.getSupportedCepLayerProtocolQualifier()) + .setSupportedCepLayerProtocolQualifierInstances(onep + .getSupportedCepLayerProtocolQualifierInstances()) .setAdministrativeState(onep.getAdministrativeState()) .setOperationalState(onep.getOperationalState()) .setLifecycleState(onep.getLifecycleState()) - .setTerminationDirection(onep.getTerminationDirection()) - .setTerminationState(onep.getTerminationState()) - .setLinkPortDirection(onep.getLinkPortDirection()) - .setLinkPortRole(onep.getLinkPortRole()); - if (onep.getMappedServiceInterfacePoint() != null) { - newOnepBuilder.setMappedServiceInterfacePoint(onep.getMappedServiceInterfacePoint()); - } - OwnedNodeEdgePoint nep = newOnepBuilder.build(); - onepMap.put(nep.key(), nep); +// .setTerminationDirection(onep.getTerminationDirection()) +// .setTerminationState(onep.getTerminationState()) + .setDirection(onep.getDirection()) + .setSupportedPayloadStructure(onep.getSupportedPayloadStructure()) + .setAvailablePayloadStructure(onep.getAvailablePayloadStructure()) + .setLinkPortRole(onep.getLinkPortRole()) + .setMappedServiceInterfacePoint(onep.nonnullMappedServiceInterfacePoint()) + .build(); + onepMap.put(newOnep.key(), newOnep); } - Node newNode = new NodeBuilder(node) + Node newNode = new NodeBuilder() + .setUuid(node.getUuid()) + .setName(node.getName()) + .setOperationalState(node.getOperationalState()) + .setAdministrativeState(node.getAdministrativeState()) + .setLifecycleState(node.getLifecycleState()) + .setLayerProtocolName(node.getLayerProtocolName()) + .setNodeRuleGroup(node.getNodeRuleGroup()) + .setInterRuleGroup(node.getInterRuleGroup()) .setOwnedNodeEdgePoint(onepMap) .build(); mapNode.put(newNode.key(), newNode); @@ -313,4 +380,16 @@ public final class TopologyUtils { return topologyBuilder.build(); } + public Map getSipMap() { + return tapiSips; + } + + public void setTopologicalMode(String topoMode) { + this.topologicalMode = topoMode; + } + + public String getTopologicalMode() { + return topologicalMode; + } + }