New version of transportpce common types
[transportpce.git] / renderer / src / main / java / org / opendaylight / transportpce / renderer / provisiondevice / OtnDeviceRendererServiceImpl.java
index 1713764f941e450d0158323e48cf364cce121bfa..ec8ff8a827fe3425cd9d9540e4e642db55d6662b 100644 (file)
@@ -8,8 +8,10 @@
 package org.opendaylight.transportpce.renderer.provisiondevice;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
 import java.util.Optional;
 import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.concurrent.CopyOnWriteArrayList;
@@ -18,22 +20,21 @@ import java.util.concurrent.ForkJoinPool;
 import java.util.concurrent.ForkJoinTask;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.stream.Collectors;
-
 import org.opendaylight.transportpce.common.crossconnect.CrossConnect;
 import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException;
 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces;
 import org.opendaylight.transportpce.networkmodel.service.NetworkModelService;
 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterfaceFactory;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.device.rev200128.OtnServicePathInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.device.rev200128.OtnServicePathOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.device.rev200128.OtnServicePathOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev200128.OtnServicePathInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev200128.OtnServicePathOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev200128.OtnServicePathOutputBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.interfaces.grp.Interface;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev200128.node.interfaces.NodeInterface;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev200128.node.interfaces.NodeInterfaceBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev200128.node.interfaces.NodeInterfaceKey;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev200128.otn.renderer.input.Nodes;
-import org.opendaylight.yang.gen.v1.http.transportpce.topology.rev200129.OtnLinkType;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev201211.node.interfaces.NodeInterface;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev201211.node.interfaces.NodeInterfaceBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev201211.node.interfaces.NodeInterfaceKey;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev201211.otn.renderer.input.Nodes;
+import org.opendaylight.yang.gen.v1.http.transportpce.topology.rev201019.OtnLinkType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -61,7 +62,7 @@ public class OtnDeviceRendererServiceImpl implements OtnDeviceRendererService {
 
     @Override
     public OtnServicePathOutput setupOtnServicePath(OtnServicePathInput input) {
-        LOG.info("Calling setup service path");
+        LOG.info("Calling setup otn-service path");
         boolean success = true;
         List<NodeInterface> nodeInterfaces = new ArrayList<>();
         List<String> results = new ArrayList<>();
@@ -106,7 +107,7 @@ public class OtnDeviceRendererServiceImpl implements OtnDeviceRendererService {
                         success = false;
                     }
                 } else {
-                    LOG.warn("Unsupported serivce-rate for service-type Ethernet");
+                    LOG.warn("Unsupported service-rate for service-type Ethernet");
                 }
                 break;
             case "ODU":
@@ -119,11 +120,11 @@ public class OtnDeviceRendererServiceImpl implements OtnDeviceRendererService {
                         success = false;
                     }
                 } else {
-                    LOG.warn("Unsupported serivce-rate for service-type ODU");
+                    LOG.warn("Unsupported service-rate for service-type ODU");
                 }
                 break;
             default:
-                LOG.error("service-type {} not managet yet", input.getServiceType());
+                LOG.error("service-type {} not managed yet", input.getServiceType());
                 break;
         }
         if (success) {
@@ -132,14 +133,25 @@ public class OtnDeviceRendererServiceImpl implements OtnDeviceRendererService {
                 results.add("Otn Service path was set up successfully for node :" + nodeInterface.getNodeId());
             }
         }
+        Map<NodeInterfaceKey,NodeInterface> nodeInterfacesMap = new HashMap<>();
+        for (NodeInterface nodeInterface : nodeInterfaces) {
+            if (nodeInterface != null) {
+                nodeInterfacesMap.put(nodeInterface.key(), nodeInterface);
+            }
+        }
         OtnServicePathOutputBuilder otnServicePathOutputBuilder = new OtnServicePathOutputBuilder()
                 .setSuccess(success)
-                .setNodeInterface(nodeInterfaces)
+                .setNodeInterface(nodeInterfacesMap)
                 .setResult(String.join("\n", results));
         return otnServicePathOutputBuilder.build();
     }
 
     public OtnServicePathOutput deleteOtnServicePath(OtnServicePathInput input) {
+        if (input == null) {
+            LOG.error("Unable to delete otn service path. input = null");
+            return new OtnServicePathOutputBuilder().setResult("Unable to delete otn service path. input = null")
+                .setSuccess(false).build();
+        }
         List<Nodes> nodes = input.getNodes();
         AtomicBoolean success = new AtomicBoolean(true);
         ConcurrentLinkedQueue<String> results = new ConcurrentLinkedQueue<>();
@@ -364,11 +376,24 @@ public class OtnDeviceRendererServiceImpl implements OtnDeviceRendererService {
 
     private void createODU4TtpInterface(OtnServicePathInput input, List<NodeInterface> nodeInterfaces,
         CopyOnWriteArrayList<Nodes> otnNodesProvisioned) throws OpenRoadmInterfaceException {
-        for (Nodes node : input.getNodes()) {
+        if (input.getNodes() == null) {
+            return;
+        }
+        LOG.info("Creation of ODU4 tp interface {}", input);
+        for (int i = 0; i < input.getNodes().size(); i++) {
+            Nodes node = input.getNodes().get(i);
             String supportingOtuInterface = node.getNetworkTp() + "-OTU";
             List<String> createdOdu4Interfaces = new ArrayList<>();
+            // Adding SAPI/DAPI information to the
+            Nodes tgtNode = null;
+            if (i + 1 == input.getNodes().size()) {
+                // For the end node, tgtNode becomes the first node in the list
+                tgtNode = input.getNodes().get(0);
+            } else {
+                tgtNode = input.getNodes().get(i + 1);
+            }
             createdOdu4Interfaces.add(openRoadmInterfaceFactory.createOpenRoadmOtnOdu4Interface(node.getNodeId(),
-                node.getNetworkTp(), supportingOtuInterface));
+                node.getNetworkTp(), supportingOtuInterface, tgtNode.getNodeId(), tgtNode.getNetworkTp()));
             NodeInterfaceBuilder nodeInterfaceBuilder = new NodeInterfaceBuilder()
                 .withKey(new NodeInterfaceKey(node.getNodeId()))
                 .setNodeId(node.getNodeId())