Migrate PCE module to Aluminium
[transportpce.git] / pce / src / main / java / org / opendaylight / transportpce / pce / gnpy / GnpyTopoImpl.java
index d880ab9439032074c2ab1841f2918e966ee374f0..39b31a8d84181b2f90209af64b41753feebc7b86 100644 (file)
@@ -10,13 +10,13 @@ package org.opendaylight.transportpce.pce.gnpy;
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ExecutionException;
 import java.util.regex.Pattern;
 import java.util.stream.IntStream;
-
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.NetworkUtils;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
@@ -41,6 +41,7 @@ import org.opendaylight.yang.gen.v1.gnpy.gnpy.network.topology.rev181214.topo.Co
 import org.opendaylight.yang.gen.v1.gnpy.gnpy.network.topology.rev181214.topo.ConnectionsBuilder;
 import org.opendaylight.yang.gen.v1.gnpy.gnpy.network.topology.rev181214.topo.Elements;
 import org.opendaylight.yang.gen.v1.gnpy.gnpy.network.topology.rev181214.topo.ElementsBuilder;
+import org.opendaylight.yang.gen.v1.gnpy.gnpy.network.topology.rev181214.topo.ElementsKey;
 import org.opendaylight.yang.gen.v1.gnpy.gnpy.network.topology.rev181214.topo.elements.Metadata;
 import org.opendaylight.yang.gen.v1.gnpy.gnpy.network.topology.rev181214.topo.elements.MetadataBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Link1;
@@ -77,7 +78,7 @@ public class GnpyTopoImpl {
     private static final Logger LOG = LoggerFactory.getLogger(GnpyTopoImpl.class);
     private final NetworkTransactionService networkTransactionService;
     //List of elements
-    private List<Elements> elements = new ArrayList<>();
+    private Map<ElementsKey, Elements> elements = new HashMap<>();
     private List<Connections> connections = new ArrayList<>();
     //Mapping elements
     //Mapping between the ord-topo and ord-ntw node
@@ -161,8 +162,8 @@ public class GnpyTopoImpl {
             throw new GnpyException("In gnpyTopoImpl: openRoadmNet or openRoadmTopo is not present");
         }
         // Create the list of nodes
-        List<Node> openRoadmNetNodeList = openRoadmNet.get().getNode();
-        List<Node> openRoadmTopoNodeList = openRoadmTopo.get().getNode();
+        Collection<Node> openRoadmNetNodeList = openRoadmNet.get().nonnullNode().values();
+        Collection<Node> openRoadmTopoNodeList = openRoadmTopo.get().nonnullNode().values();
         List<String> nodesList = new ArrayList<>();
 
         if (openRoadmTopoNodeList.isEmpty() || openRoadmNetNodeList.isEmpty()) {
@@ -171,7 +172,7 @@ public class GnpyTopoImpl {
         // Create elements
         for (Node openRoadmTopoNode : openRoadmTopoNodeList) {
             // Retrieve the supporting node and the type of the node in openRoadm network
-            List<SupportingNode> supportingNodeList = openRoadmTopoNode.getSupportingNode();
+            Collection<SupportingNode> supportingNodeList = openRoadmTopoNode.nonnullSupportingNode().values();
 
             for (SupportingNode supportingNode : supportingNodeList) {
                 if (!supportingNode.getNetworkRef().getValue().equals("openroadm-network")) {
@@ -208,14 +209,14 @@ public class GnpyTopoImpl {
                     if (!nodesList.contains(nodeRef)) {
                         Elements element = createElementsRoadm(LATITUDE, LONGITUTE, nodeRef,
                                 openRoadmNetNode1.getShelf(),TARGET_PCH_OUT_DB, ipAddress.getIpv4Address().getValue());
-                        this.elements.add(element);
+                        this.elements.put(element.key(),element);
                         nodesList.add(nodeRef);
                     }
                 } else if (commonNetworkNode1.getNodeType().getName().equals("XPONDER")) {
                     if (!nodesList.contains(nodeRef)) {
                         Elements element = createElementsTransceiver(LATITUDE, LONGITUTE, nodeRef,
                                 openRoadmNetNode1.getShelf(),ipAddress.getIpv4Address().getValue());
-                        this.elements.add(element);
+                        this.elements.put(element.key(),element);
                         nodesList.add(nodeRef);
                         trxList.add(nodeRef);
                     }
@@ -232,7 +233,7 @@ public class GnpyTopoImpl {
             throw new GnpyException("In gnpyTopoImpl: openroadmTopo is not present");
         }
         Network1 nw1 = openRoadmTopo.get().augmentation(Network1.class);
-        List<Link> linksList = nw1.getLink();
+        Collection<Link> linksList = nw1.nonnullLink().values();
         // 1:EXPRESS-LINK    2:ADD-LINK       3:DROP-LINK
         // 4:ROADM-To-ROADM  5:XPONDER-INPUT  6:XPONDER-OUTPUT
         int[] externalLink = {OpenroadmLinkType.ROADMTOROADM.getIntValue(),OpenroadmLinkType.XPONDERINPUT.getIntValue(),
@@ -285,12 +286,12 @@ public class GnpyTopoImpl {
     private IpAddress extractAmplifiedLink(OMSAttributes omsAttributes, String linkId, IpAddress srcIp)
         throws GnpyException {
 
-        List<AmplifiedLink> amplifiedLinkList = omsAttributes.getAmplifiedLink()
-            .getAmplifiedLink();
+        List<AmplifiedLink> amplifiedLinkList = new ArrayList<>(omsAttributes.getAmplifiedLink()
+            .nonnullAmplifiedLink().values());
         IpAddress destIp = null;
         if (!amplifiedLinkList.isEmpty()) {
-            for (AmplifiedLink amplifiedLink : amplifiedLinkList) {
-                String secElt = amplifiedLink.getSectionEltNumber().toString();
+            for (AmplifiedLink amplifiedLink: amplifiedLinkList) {
+                String secElt = amplifiedLink .getSectionEltNumber().toString();
                 //Case of ILA
                 if (amplifiedLink.getSectionElement().getSectionElement() instanceof Ila) {
                     Ila ila = (Ila) amplifiedLink.getSectionElement().getSectionElement();
@@ -331,7 +332,7 @@ public class GnpyTopoImpl {
                 ila.getGain().getValue(), ila.getTilt().getValue(),
                 ila.getOutVoaAtt().getValue(), "std_medium_gain",
                 ipEdfa.getIpv4Address().getValue());
-        this.elements.add(element);
+        this.elements.put(element.key(),element);
         return ipEdfa;
     }
 
@@ -339,7 +340,7 @@ public class GnpyTopoImpl {
         IpAddress ipFiber = new IpAddress(fiberId);
 
         if (!mapLinkFiber.containsKey(linkId)) {
-            mapLinkFiber.put(linkId, new ArrayList<String>());
+            mapLinkFiber.put(linkId, new ArrayList<>());
         }
         mapLinkFiber.get(linkId).add(subLinkId);
         mapFiberIp.put(subLinkId, ipFiber);
@@ -350,8 +351,7 @@ public class GnpyTopoImpl {
         String typeVariety = "SSMF";
         double length = 0;
         // Compute the length of the link
-        List<LinkConcatenation> linkConcatenationList = span.getLinkConcatenation();
-        for (LinkConcatenation linkConcatenation : linkConcatenationList) {
+        for (LinkConcatenation linkConcatenation : span.nonnullLinkConcatenation().values()) {
             double srlgLength = linkConcatenation.getSRLGLength().toJava();
             //convert to kilometer
             length += srlgLength / CONVERT_KM_M;
@@ -363,7 +363,7 @@ public class GnpyTopoImpl {
         double lossCoef = span.getSpanlossCurrent().getValue().doubleValue() / length;
         Elements element = createElementsFiber(LATITUDE, LONGITUTE, REGION, CITY,
             ipFiber.getIpv4Address().getValue(), length, attIn, lossCoef, connIn, connOut, typeVariety);
-        this.elements.add(element);
+        this.elements.put(element.key(),element);
         return ipFiber;
 
     }
@@ -493,11 +493,11 @@ public class GnpyTopoImpl {
         return new Ipv4Address(nidString);
     }
 
-    public List<Elements> getElements() {
+    public Map<ElementsKey, Elements> getElements() {
         return elements;
     }
 
-    public void setElements(List<Elements> elements) {
+    public void setElements(Map<ElementsKey, Elements> elements) {
         this.elements = elements;
     }