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=336c6ae669d46f8e12588d00df2d469b2ef12237;hb=02120b6f30aece5acfa0fba69419c6b65f0f1659;hp=27b7e79e1c8583e77d01e307810374559cac1ae8;hpb=2f13d2e6564596df4500eea94928bf13d4829808;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..336c6ae66 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 @@ -27,6 +27,8 @@ 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.transportpce.tapi.TapiStringConstants; +import org.opendaylight.transportpce.tapi.utils.TapiLink; 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; @@ -68,15 +70,15 @@ 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; - 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; } public Network readTopology(InstanceIdentifier networkIID) throws TapiTopologyException { @@ -101,108 +103,118 @@ public final class TopologyUtils { 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)); + Uuid topoUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER + .getBytes(Charset.forName("UTF-8"))).toString()); + Name name = new NameBuilder() + .setValue(TapiStringConstants.T0_FULL_MULTILAYER) + .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() + .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()); + } + } + 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<>(); + ConvertORTopoToTapiFullTopo tapiFactory = new ConvertORTopoToTapiFullTopo(topoUuid, this.tapiLink); + 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()); } - } - 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 -> + // 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)) + .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); - tapiNodeList.putAll(tapiFactory.getTapiNodes()); + tapiFactory.convertRoadmNode(roadm, openroadmTopo); + tapiNodeList.putAll(tapiFactory.getTapiNodes()); + } + } else { + LOG.warn("No roadm nodes exist in the network"); } - } else { - LOG.warn("No roadm nodes exist in the network"); - } - // map roadm to roadm link - List rdmTordmLinkList = linkList.stream() + // 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()); + 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()); - 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() + tapiFactory.convertLinks(otnLinkMap); + tapiLinkList.putAll(tapiFactory.getTapiLinks()); + } + // Retrieve created sips map in TapiFactory when mapping all the nodes + this.tapiSips = tapiFactory.getTapiSips(); + return new TopologyBuilder() .setName(Map.of(name.key(), name)) .setUuid(topoUuid) .setNode(tapiNodeList) .setLayerProtocolName(List.of(LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.ODU, - LayerProtocolName.DSR)) + LayerProtocolName.DSR)) .setLink(tapiLinkList).build(); + } + return new TopologyBuilder() + .setName(Map.of(name.key(), name)) + .setUuid(topoUuid) + .setLayerProtocolName(List.of(LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.ODU, + LayerProtocolName.DSR)) + .build(); } public Map getSipMap() { @@ -312,5 +324,4 @@ public final class TopologyUtils { topologyBuilder.setNode(mapNode); return topologyBuilder.build(); } - -} +} \ No newline at end of file