Constants for service type
[transportpce.git] / pce / src / main / java / org / opendaylight / transportpce / pce / networkanalyzer / PceCalculation.java
index 033b3a9eb7b1cc8ffd24594a31668324a0850b1b..125eeed75407796d0ac0bffb3323d65a4be87e23 100644 (file)
@@ -20,6 +20,9 @@ import java.util.stream.Collectors;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.NetworkUtils;
 import org.opendaylight.transportpce.common.ResponseCodes;
+import org.opendaylight.transportpce.common.StringConstants;
+import org.opendaylight.transportpce.common.mapping.MappingUtils;
+import org.opendaylight.transportpce.common.mapping.MappingUtilsImpl;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.pce.constraints.PceConstraints;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev200128.PathComputationRequestInput;
@@ -36,7 +39,6 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.top
 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.opendaylight.yangtools.yang.common.Decimal64;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -79,6 +81,8 @@ public class PceCalculation {
         NONE, HARD_EXCLUDE, HARD_INCLUDE, HARD_DIVERSITY, SOFT_EXCLUDE, SOFT_INCLUDE, SOFT_DIVERSITY;
     }
 
+    private MappingUtils mappingUtils;
+
     public PceCalculation(PathComputationRequestInput input, NetworkTransactionService networkTransactionService,
             PceConstraints pceHardConstraints, PceConstraints pceSoftConstraints, PceResult rc) {
         this.input = input;
@@ -86,6 +90,7 @@ public class PceCalculation {
         this.returnStructure = rc;
 
         this.pceHardConstraints = pceHardConstraints;
+        this.mappingUtils = new MappingUtilsImpl(networkTransactionService.getDataBroker());
         parseInput();
     }
 
@@ -126,13 +131,13 @@ public class PceCalculation {
             switch (serviceFormatA) {
                 case "Ethernet":
                 case "OC":
-                    serviceType = "100GE";
+                    serviceType = StringConstants.SERVICE_TYPE_100GE;
                     break;
                 case "OTU":
-                    serviceType = "OTU4";
+                    serviceType = StringConstants.SERVICE_TYPE_OTU4;
                     break;
                 case "ODU":
-                    serviceType = "ODU4";
+                    serviceType = StringConstants.SERVICE_TYPE_ODU4;
                     break;
                 default:
                     LOG.debug("parseInput: unsupported service type: Format {} Rate 100L", serviceFormatA);
@@ -146,9 +151,9 @@ public class PceCalculation {
         } else if ("Ethernet".equals(serviceFormatA)) {
         //only rate 100L is currently supported except in Ethernet
             if (serviceRate == 10L) {
-                serviceType = "10GE";
+                serviceType = StringConstants.SERVICE_TYPE_10GE;
             } else if (serviceRate == 1L) {
-                serviceType = "1GE";
+                serviceType = StringConstants.SERVICE_TYPE_1GE;
             } else {
                 LOG.debug("parseInput: unsupported service type: Format Ethernet Rate {}", serviceRate);
             }
@@ -156,7 +161,9 @@ public class PceCalculation {
             LOG.debug("parseInput: unsupported service type: Format {} Rate {}",
                 serviceFormatA, serviceRate);
         }
-        if ("ODU4".equals(serviceType) || "10GE".equals(serviceType)  || "1GE".equals(serviceType)) {
+        if (StringConstants.SERVICE_TYPE_ODU4.equals(serviceType)
+                || StringConstants.SERVICE_TYPE_10GE.equals(serviceType)
+                || StringConstants.SERVICE_TYPE_1GE.equals(serviceType)) {
             anodeId = input.getServiceAEnd().getTxDirection().getPort().getPortDeviceName();
             znodeId = input.getServiceZEnd().getTxDirection().getPort().getPortDeviceName();
         } else {
@@ -239,7 +246,8 @@ public class PceCalculation {
 
         LOG.debug("analyzeNw: allNodes size {}, allLinks size {}", allNodes.size(), allLinks.size());
 
-        if (("100GE".equals(serviceType)) || ("OTU4".equals(serviceType))) {
+        if ((StringConstants.SERVICE_TYPE_100GE.equals(serviceType))
+                || (StringConstants.SERVICE_TYPE_OTU4.equals(serviceType))) {
             // 100GE service and OTU4 service are handled at the openroadm-topology layer
             for (Node node : allNodes) {
                 validateNode(node);
@@ -354,7 +362,8 @@ public class PceCalculation {
             return false;
         }
 
-        if (("100GE".equals(serviceType)) || ("OTU4".equals(serviceType))) {
+        if ((StringConstants.SERVICE_TYPE_100GE.equals(serviceType))
+                || (StringConstants.SERVICE_TYPE_OTU4.equals(serviceType))) {
             // 100GE or OTU4 services are handled at WDM Layer
             PceLink pcelink = new PceLink(link, source, dest);
             if (!pcelink.isValid()) {
@@ -424,7 +433,9 @@ public class PceCalculation {
             }
             return true;
 
-        } else if (("ODU4".equals(serviceType)) || ("10GE".equals(serviceType)) || ("1GE".equals(serviceType))) {
+        } else if ((StringConstants.SERVICE_TYPE_ODU4.equals(serviceType))
+                || (StringConstants.SERVICE_TYPE_10GE.equals(serviceType))
+                || (StringConstants.SERVICE_TYPE_1GE.equals(serviceType))) {
             // ODU4, 1GE and 10GE services relying on ODU2, ODU2e or ODU0 services are handled at OTN layer
             PceLink pceOtnLink = new PceLink(link, source, dest);
 
@@ -465,7 +476,6 @@ public class PceCalculation {
 
     private boolean validateNode(Node node) {
         LOG.debug("validateNode: node {} ", node);
-
         // PceNode will be used in Graph algorithm
         Node1 node1 = node.augmentation(Node1.class);
         if (node1 == null) {
@@ -473,10 +483,15 @@ public class PceCalculation {
             return false;
         }
         OpenroadmNodeType nodeType = node1.getNodeType();
-
-        PceOpticalNode pceNode = new PceOpticalNode(node, nodeType, node.getNodeId(),
-            input.getServiceAEnd().getServiceFormat(), "optical");
-        pceNode.validateAZxponder(anodeId, znodeId);
+        String deviceNodeId = MapUtils.getSupNetworkNode(node);
+        // Should never happen but because of existing topology test files
+        // we have to manage this case
+        if (deviceNodeId == null || deviceNodeId.isBlank()) {
+            deviceNodeId = node.getNodeId().getValue();
+        }
+        LOG.info("Device node id {} for {}", deviceNodeId, node);
+        PceOpticalNode pceNode = new PceOpticalNode(node, nodeType, mappingUtils.getOpenRoadmVersion(deviceNodeId));
+        pceNode.validateAZxponder(anodeId, znodeId, input.getServiceAEnd().getServiceFormat());
         pceNode.initWLlist();
 
         if (!pceNode.isValid()) {
@@ -553,15 +568,6 @@ public class PceCalculation {
             LOG.error("ValidateOtnNode: no node-type augmentation. Node {} is ignored", node.getNodeId().getValue());
             return false;
         }
-
-//        if (mode == "AZ") {
-//            pceOtnNode.validateAZxponder(anodeId, znodeId);
-//        } else if (mode == "intermediate") {
-//            pceOtnNode.validateIntermediateSwitch();
-//        } else {
-//            LOG.error("validateOtnNode: unproper mode passed to the method : {} not supported", mode);
-//            return null;
-//        }
     }
 
     private ConstraintTypes validateNodeConstraints(PceNode pcenode) {
@@ -616,7 +622,7 @@ public class PceCalculation {
                 this.azSrgs.add(nodeId);
                 break;
             case XPONDER:
-                pceNode.initXndrTps();
+                pceNode.initXndrTps(input.getServiceAEnd().getServiceFormat());
                 break;
             default:
                 LOG.warn("endPceNode: Node {} is not SRG or XPONDER !", nodeId);