Upgrade Network model from 2.1 to 4.1
[transportpce.git] / pce / src / main / java / org / opendaylight / transportpce / pce / PceCalculation.java
index d9b5f029d42431d205972bc39dd412a265cf1d1a..177fb7323bfc007cb24d5aebb959d293ea6729fd 100644 (file)
@@ -15,6 +15,7 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ExecutionException;
+import java.util.stream.Collectors;
 
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
@@ -22,16 +23,17 @@ import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.NetworkUtils;
 import org.opendaylight.transportpce.common.ResponseCodes;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev171017.PathComputationRequestInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.Node1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev170929.OpenroadmNodeType;
-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.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.Node;
-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.network.Link;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmNodeType;
+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.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.networks.network.Link;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -105,8 +107,8 @@ public class PceCalculation {
 
     private boolean readMdSal() {
         LOG.info("readMdSal: network {}", NetworkUtils.OVERLAY_NETWORK_ID);
-        InstanceIdentifier<Network> nwInstanceIdentifier = InstanceIdentifier
-                .builder(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))).build();
+        InstanceIdentifier<Network> nwInstanceIdentifier = InstanceIdentifier.builder(Networks.class)
+            .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))).build();
         ReadOnlyTransaction readOnlyTransaction = this.dataBroker.newReadOnlyTransaction();
         Network nw = null;
         try {
@@ -128,7 +130,9 @@ public class PceCalculation {
             LOG.error("readMdSal: network is null: {}", nwInstanceIdentifier);
             return false;
         }
-        this.allNodes = nw.getNode();
+        this.allNodes = nw.getNode().stream()
+                .sorted((node1, node2) -> node1.getNodeId().getValue().compareTo(node2.getNodeId().getValue()))
+                .collect(Collectors.toList());
         Network1 nw1 = nw.augmentation(Network1.class);
         this.allLinks = nw1.getLink();
         if ((this.allNodes == null) || this.allNodes.isEmpty()) {
@@ -149,7 +153,7 @@ public class PceCalculation {
         for (Node node : this.allNodes) {
             validateNode(node);
         }
-        LOG.info("analyzeNw: allPceNodes size {} : {}", this.allPceNodes.size(), this.allPceNodes.toString());
+        LOG.debug("analyzeNw: allPceNodes size {} : {}", this.allPceNodes.size(), this.allPceNodes.toString());
         if ((this.aendPceNode == null) || (this.zendPceNode == null)) {
             LOG.error("analyzeNw: Error in reading nodes: A or Z do not present in the network");
             return false;
@@ -185,7 +189,7 @@ public class PceCalculation {
         }
         // remove the SRG from PceNodes, as it is not directly connected to A/Z
         this.allPceNodes.remove(nodeId);
-        LOG.info("analyzeNw: SRG removed {}", nodeId.getValue());
+        LOG.debug("analyzeNw: SRG removed {}", nodeId.getValue());
         return false;
     }
 
@@ -199,7 +203,7 @@ public class PceCalculation {
         }
         // remove the SRG from PceNodes, as it is not directly connected to A/Z
         this.allPceNodes.remove(pcelink.getDestId());
-        LOG.info("analyzeNw: SRG removed {}", nodeId.getValue());
+        LOG.debug("analyzeNw: SRG removed {}", nodeId.getValue());
         return false;
     }
 
@@ -237,12 +241,12 @@ public class PceCalculation {
                 LOG.info("validateLink: EXPRESS-LINK added to allPceLinks {}", pcelink.toString());
                 break;
             case ADDLINK :
-                pcelink.setClient(source.getRdmSrgClient(pcelink.getSourceTP().toString()));
+                pcelink.setClient(source.getRdmSrgClient(pcelink.getSourceTP().toString(), true));
                 this.addLinks.add(pcelink);
-                LOG.debug("validateLink: ADD-LINK saved  {}", pcelink.toString());
+                LOG.info("validateLink: ADD-LINK saved  {}", pcelink.toString());
                 break;
             case DROPLINK :
-                pcelink.setClient(dest.getRdmSrgClient(pcelink.getDestTP().toString()));
+                pcelink.setClient(dest.getRdmSrgClient(pcelink.getDestTP().toString(), false));
                 this.dropLinks.add(pcelink);
                 LOG.info("validateLink: DROP-LINK saved  {}", pcelink.toString());
                 break;
@@ -328,21 +332,29 @@ public class PceCalculation {
             return false;
         }
         if (supNodeId.equals(this.anodeId)) {
-            if (endPceNode(nodeType, nodeId, pceNode, true)) {
-                if (!pceNode.isValid()) {
-                    LOG.error("validateNode: There are no available wavelengths in node {}", nodeId.getValue());
-                    return false;
+            if (this.aendPceNode == null) {
+                if (endPceNode(nodeType, nodeId, pceNode, true)) {
+                    if (!pceNode.isValid()) {
+                        LOG.error("validateNode: There are no available wavelengths in node {}", nodeId.getValue());
+                        return false;
+                    }
+                    this.aendPceNode = pceNode;
                 }
-                this.aendPceNode = pceNode;
+            } else {
+                LOG.warn("aendPceNode already gets: {}", this.aendPceNode);
             }
         }
         if (supNodeId.equals(this.znodeId)) {
-            if (endPceNode(nodeType, nodeId, pceNode, false)) {
-                if (!pceNode.isValid()) {
-                    LOG.error("validateNode: There are no available wavelengths in node {}", nodeId.getValue());
-                    return false;
+            if (this.zendPceNode == null) {
+                if (endPceNode(nodeType, nodeId, pceNode, false)) {
+                    if (!pceNode.isValid()) {
+                        LOG.error("validateNode: There are no available wavelengths in node {}", nodeId.getValue());
+                        return false;
+                    }
+                    this.zendPceNode = pceNode;
                 }
-                this.zendPceNode = pceNode;
+            } else {
+                LOG.warn("zendPceNode already gets: {}", this.zendPceNode);
             }
         }
         pceNode.initWLlist();
@@ -351,7 +363,7 @@ public class PceCalculation {
             return false;
         }
         this.allPceNodes.put(nodeId, pceNode);
-        LOG.info("validateNode: node is saved {}", nodeId.getValue());
+        LOG.debug("validateNode: node is saved {}", nodeId.getValue());
         return true;
     }
 
@@ -359,7 +371,7 @@ public class PceCalculation {
         Boolean add = true;
         switch (openroadmNodeType) {
             case SRG :
-                pceNode.initRdmSrgTps(aend);
+                pceNode.initSrgTps();
                 this.azSrgs.add(nodeId);
                 break;
             case XPONDER :