Refactor OtnDeviceRendererServiceImpl class 85/97085/3
authorguillaume.lambert <guillaume.lambert@orange.com>
Thu, 5 Aug 2021 15:36:58 +0000 (17:36 +0200)
committerguillaume.lambert <guillaume.lambert@orange.com>
Thu, 5 Aug 2021 19:56:07 +0000 (21:56 +0200)
JIRA: TRNSPRTPCE-491
Signed-off-by: guillaume.lambert <guillaume.lambert@orange.com>
Change-Id: I507097db8ce2fb7ae6ca369226fb727f1251a431

renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/OtnDeviceRendererServiceImpl.java

index 6c5cb39cbc1e5de1fc94b264483ecb6924503b68..241ea4cb72708e9074343dbc7d1a854e5697b049 100644 (file)
@@ -63,25 +63,24 @@ public class OtnDeviceRendererServiceImpl implements OtnDeviceRendererService {
         this.networkModelService = networkModelService;
     }
 
+//TODO Align log messages and returned results messages
     @Override
     public OtnServicePathOutput setupOtnServicePath(OtnServicePathInput input) {
         LOG.info("Calling setup otn-service path");
-        boolean success = true;
-        List<NodeInterface> nodeInterfaces = new ArrayList<>();
-        List<String> results = new ArrayList<>();
         if (input.getServiceFormat() == null || input.getServiceRate() == null) {
-            OtnServicePathOutputBuilder otnServicePathOutputBuilder = new OtnServicePathOutputBuilder()
+            return new OtnServicePathOutputBuilder()
                 .setSuccess(false)
-                .setResult("Error - service-type and service-rate must be presents");
-            return otnServicePathOutputBuilder.build();
+                .setResult("Error - service-type and service-rate must be present")
+                .build();
         }
+        List<NodeInterface> nodeInterfaces = new ArrayList<>();
         CopyOnWriteArrayList<LinkTp> otnLinkTps = new CopyOnWriteArrayList<>();
         String serviceType = ServiceTypes.getOtnServiceType(input.getServiceFormat(), input.getServiceRate());
-        switch (serviceType) {
-            case StringConstants.SERVICE_TYPE_1GE:
-            case StringConstants.SERVICE_TYPE_10GE:
-            case StringConstants.SERVICE_TYPE_100GE_M:
-                try {
+        try {
+            switch (serviceType) {
+                case StringConstants.SERVICE_TYPE_1GE:
+                case StringConstants.SERVICE_TYPE_10GE:
+                case StringConstants.SERVICE_TYPE_100GE_M:
                     LOG.info("Calling Node interfaces {} {} {} {} {} {} {}",
                         input.getServiceRate(), input.getEthernetEncoding(),
                         input.getServiceFormat(), input.getOperation(), input.getTribPortNumber(),
@@ -90,56 +89,60 @@ public class OtnDeviceRendererServiceImpl implements OtnDeviceRendererService {
                         createLowOrderInterfaces(input, nodeInterfaces, otnLinkTps);
                         LOG.info("Node interfaces created just fine ");
                     }
-                } catch (OpenRoadmInterfaceException e) {
-                    LOG.warn("Set up service path failed", e);
-                    success = false;
-                }
-                break;
-            case StringConstants.SERVICE_TYPE_ODU4:
-                try {
+                    break;
+                case StringConstants.SERVICE_TYPE_ODU4:
                     createODU4TtpInterface(input, nodeInterfaces, otnLinkTps);
-                } catch (OpenRoadmInterfaceException e) {
-                    LOG.warn("Set up service path failed", e);
-                    success = false;
-                }
-                break;
-            case StringConstants.SERVICE_TYPE_ODUC4:
-                try {
+                    break;
+                case StringConstants.SERVICE_TYPE_ODUC4:
                     createOduc4TtpInterface(input, nodeInterfaces, otnLinkTps);
-                } catch (OpenRoadmInterfaceException e) {
-                    LOG.warn("Set up service path failed", e);
-                    success = false;
-                }
-                break;
-            default:
-                LOG.error("service-type {} not managed yet", serviceType);
-                break;
-        }
-        if (success) {
-            LOG.info("Result is success");
+                    break;
+                default:
+                    LOG.error("Service-type {} not managed yet", serviceType);
+                    return new OtnServicePathOutputBuilder()
+                        .setSuccess(false)
+                        .setResult("Service-type not managed")
+                        .build();
+            }
+        } catch (OpenRoadmInterfaceException e) {
+            LOG.warn("Service path set-up failed", e);
+            Map<NodeInterfaceKey,NodeInterface> nodeInterfacesMap = new HashMap<>();
             for (NodeInterface nodeInterface : nodeInterfaces) {
-                results.add("Otn Service path was set up successfully for node :" + nodeInterface.getNodeId());
+                if (nodeInterface != null) {
+                    nodeInterfacesMap.put(nodeInterface.key(), nodeInterface);
+                }
             }
+            //TODO check if we need to set a NodeInterface Map in the result in that case
+            return new OtnServicePathOutputBuilder()
+                    .setSuccess(false)
+                    .setNodeInterface(nodeInterfacesMap)
+                    .setResult("Service path set-up failed")
+                    .setLinkTp(otnLinkTps)
+                    .build();
         }
+        LOG.info("Service path set-up succeed");
+        List<String> results = new ArrayList<>();
         Map<NodeInterfaceKey,NodeInterface> nodeInterfacesMap = new HashMap<>();
         for (NodeInterface nodeInterface : nodeInterfaces) {
             if (nodeInterface != null) {
+                results.add("Otn Service path was set up successfully for node :" + nodeInterface.getNodeId());
                 nodeInterfacesMap.put(nodeInterface.key(), nodeInterface);
             }
         }
-        OtnServicePathOutputBuilder otnServicePathOutputBuilder = new OtnServicePathOutputBuilder()
-                .setSuccess(success)
+        return new OtnServicePathOutputBuilder()
+                .setSuccess(true)
                 .setNodeInterface(nodeInterfacesMap)
                 .setResult(String.join("\n", results))
-                .setLinkTp(otnLinkTps);
-        return otnServicePathOutputBuilder.build();
+                .setLinkTp(otnLinkTps)
+                .build();
     }
 
     public OtnServicePathOutput deleteOtnServicePath(OtnServicePathInput input) {
         if (input.getNodes() == null) {
             LOG.error("Unable to delete otn service path. input nodes = null");
-            return new OtnServicePathOutputBuilder().setResult("Unable to delete otn service path. input nodes = null")
-                .setSuccess(false).build();
+            return new OtnServicePathOutputBuilder()
+                .setResult("Unable to delete otn service path. input nodes = null")
+                .setSuccess(false)
+                .build();
         }
         List<Nodes> nodes = input.getNodes();
         AtomicBoolean success = new AtomicBoolean(true);
@@ -147,71 +150,15 @@ public class OtnDeviceRendererServiceImpl implements OtnDeviceRendererService {
         CopyOnWriteArrayList<LinkTp> otnLinkTps = new CopyOnWriteArrayList<>();
         ForkJoinPool forkJoinPool = new ForkJoinPool();
         ForkJoinTask forkJoinTask = forkJoinPool.submit(() -> nodes.parallelStream().forEach(node -> {
-            List<String> interfacesToDelete = new LinkedList<>();
             String nodeId = node.getNodeId();
             LOG.info("Deleting service setup on node {}", nodeId);
             String networkTp = node.getNetworkTp();
             if (networkTp == null || input.getServiceRate() == null || input.getServiceFormat() == null) {
-                LOG.error("destination ({}) or service-rate ({}) or service-format ({}) is null.", networkTp,
-                    input.getServiceRate(), input.getServiceFormat());
+                LOG.error("destination ({}) or service-rate ({}) or service-format ({}) is null.",
+                    networkTp, input.getServiceRate(), input.getServiceFormat());
                 return;
             }
-            // if the node is currently mounted then proceed.
-            if (this.deviceTransactionManager.isDeviceMounted(nodeId)) {
-                String connectionNumber = "";
-                switch (input.getServiceRate().intValue()) {
-                    case 100:
-                        if ("ODU".equals(input.getServiceFormat())) {
-                            interfacesToDelete.add(networkTp + "-ODU4");
-                            if (node.getNetwork2Tp() != null) {
-                                interfacesToDelete.add(node.getNetwork2Tp() + "-ODU4");
-                            }
-                        } else if ("Ethernet".equals(input.getServiceFormat())) {
-                            connectionNumber = getConnectionNumber(input.getServiceName(), node, networkTp, "ODU4");
-                        }
-                        break;
-                    case 400:
-                        if ("ODU".equals(input.getServiceFormat())) {
-                            interfacesToDelete.add(networkTp + "-ODUC4");
-                            if (node.getNetwork2Tp() != null) {
-                                interfacesToDelete.add(node.getNetwork2Tp() + "-ODUC4");
-                            }
-                        }
-                        break;
-                    case 10:
-                        connectionNumber = getConnectionNumber(input.getServiceName(), node, networkTp, "ODU2e");
-                        break;
-                    case 1:
-                        connectionNumber = getConnectionNumber(input.getServiceName(), node, networkTp, "ODU0");
-                        break;
-                    default:
-                        LOG.error("service rate {} not managed yet", input.getServiceRate());
-                        String result = input.getServiceRate() + " is not supported";
-                        results.add(result);
-                        success.set(false);
-                        return;
-                }
-                List<String> intToDelete = this.crossConnect.deleteCrossConnect(nodeId, connectionNumber, true);
-                if (intToDelete != null) {
-                    for (String interf : intToDelete) {
-                        if (!this.openRoadmInterfaceFactory.isUsedByOtnXc(nodeId, interf, connectionNumber,
-                            this.deviceTransactionManager)) {
-
-                            interfacesToDelete.add(interf);
-                            String supportedInterface = this.openRoadmInterfaces.getSupportedInterface(nodeId, interf);
-                            if (input.getServiceRate().intValue() == 100) {
-                                if (!supportedInterface.contains("ODUC4")) {
-                                    interfacesToDelete.add(supportedInterface);
-                                }
-                            } else {
-                                if (!supportedInterface.contains("ODU4")) {
-                                    interfacesToDelete.add(supportedInterface);
-                                }
-                            }
-                        }
-                    }
-                }
-            } else {
+            if (!this.deviceTransactionManager.isDeviceMounted(nodeId)) {
                 String result = nodeId + " is not mounted on the controller";
                 results.add(result);
                 success.set(false);
@@ -220,6 +167,59 @@ public class OtnDeviceRendererServiceImpl implements OtnDeviceRendererService {
                 return;
                 // TODO should deletion end here?
             }
+            // if the node is currently mounted then proceed.
+            List<String> interfacesToDelete = new LinkedList<>();
+            String connectionNumber = "";
+            switch (input.getServiceRate().intValue()) {
+                case 100:
+                    if ("ODU".equals(input.getServiceFormat())) {
+                        interfacesToDelete.add(networkTp + "-ODU4");
+                        if (node.getNetwork2Tp() != null) {
+                            interfacesToDelete.add(node.getNetwork2Tp() + "-ODU4");
+                        }
+                    } else if ("Ethernet".equals(input.getServiceFormat())) {
+                        connectionNumber = getConnectionNumber(input.getServiceName(), node, networkTp, "ODU4");
+                    }
+                    break;
+                case 400:
+                    if ("ODU".equals(input.getServiceFormat())) {
+                        interfacesToDelete.add(networkTp + "-ODUC4");
+                        if (node.getNetwork2Tp() != null) {
+                            interfacesToDelete.add(node.getNetwork2Tp() + "-ODUC4");
+                        }
+                    }
+                    break;
+                case 10:
+                    connectionNumber = getConnectionNumber(input.getServiceName(), node, networkTp, "ODU2e");
+                    break;
+                case 1:
+                    connectionNumber = getConnectionNumber(input.getServiceName(), node, networkTp, "ODU0");
+                    break;
+                default:
+                    LOG.error("service rate {} not managed yet", input.getServiceRate());
+                    String result = input.getServiceRate() + " is not supported";
+                    results.add(result);
+                    success.set(false);
+                    return;
+            }
+            List<String> intToDelete = this.crossConnect.deleteCrossConnect(nodeId, connectionNumber, true);
+            for (String interf : intToDelete == null ? new ArrayList<String>() : intToDelete) {
+                if (!this.openRoadmInterfaceFactory.isUsedByOtnXc(nodeId, interf, connectionNumber,
+                        this.deviceTransactionManager)) {
+                    interfacesToDelete.add(interf);
+                    String supportedInterface = this.openRoadmInterfaces.getSupportedInterface(nodeId, interf);
+                    if (input.getServiceRate().intValue() == 100) {
+                        if (!supportedInterface.contains("ODUC4")) {
+                            interfacesToDelete.add(supportedInterface);
+                        }
+                    } else {
+                        if (!supportedInterface.contains("ODU4")) {
+                            interfacesToDelete.add(supportedInterface);
+                        }
+                    }
+                }
+            }
+
             for (String interfaceId : interfacesToDelete) {
                 try {
                     this.openRoadmInterfaces.deleteInterface(nodeId, interfaceId);
@@ -230,16 +230,14 @@ public class OtnDeviceRendererServiceImpl implements OtnDeviceRendererService {
                     results.add(result);
                 }
             }
-            List<String> interList = interfacesToDelete.stream().filter(ele -> ele.contains("NETWORK"))
-                .collect(Collectors.toList());
+            List<String> interList =
+                    interfacesToDelete.stream().filter(ele -> ele.contains("NETWORK")).collect(Collectors.toList());
             if (!interList.isEmpty()) {
                 for (String inter : interList) {
-                    String tp = inter.split("-ODU")[0];
-                    LinkTp otnLinkTp = new LinkTpBuilder()
-                        .setNodeId(nodeId)
-                        .setTpId(tp)
-                        .build();
-                    otnLinkTps.add(otnLinkTp);
+                    otnLinkTps.add(new LinkTpBuilder()
+                            .setNodeId(nodeId)
+                            .setTpId(inter.split("-ODU")[0])
+                            .build());
                 }
             }
         }));
@@ -247,18 +245,20 @@ public class OtnDeviceRendererServiceImpl implements OtnDeviceRendererService {
             forkJoinTask.get();
         } catch (InterruptedException | ExecutionException e) {
             LOG.error("Error while deleting service paths!", e);
-            return new OtnServicePathOutputBuilder().setResult("Error while deleting service paths!")
-                .setSuccess(false).build();
+            return new OtnServicePathOutputBuilder()
+                .setResult("Error while deleting service paths!")
+                .setSuccess(false)
+                .build();
         }
         forkJoinPool.shutdown();
-        OtnServicePathOutputBuilder delServBldr = new OtnServicePathOutputBuilder()
-            .setSuccess(success.get())
-            .setLinkTp(otnLinkTps);
-        if (results.isEmpty()) {
-            return delServBldr.setResult("Request processed").build();
-        } else {
-            return delServBldr.setResult(String.join("\n", results)).build();
-        }
+        return new OtnServicePathOutputBuilder()
+                .setSuccess(success.get())
+                .setLinkTp(otnLinkTps)
+                .setResult(
+                    results.isEmpty()
+                        ? "Request processed"
+                        : String.join("\n", results))
+                .build();
     }
 
     private String getConnectionNumber(String serviceName, Nodes node, String networkTp, String oduType) {
@@ -297,22 +297,16 @@ public class OtnDeviceRendererServiceImpl implements OtnDeviceRendererService {
                     createdOduInterfaces.add(
                         openRoadmInterfaceFactory.createOpenRoadmOdu0Interface(node.getNodeId(), node.getNetworkTp(),
                             input.getServiceName(), PT_07, true, input.getTribPortNumber(), input.getTribSlot()));
-                    LinkTp otnLinkTp = new LinkTpBuilder()
-                        .setNodeId(node.getNodeId())
-                        .setTpId(node.getNetworkTp())
-                        .build();
-                    linkTpList.add(otnLinkTp);
+                    linkTpList.add(
+                        new LinkTpBuilder().setNodeId(node.getNodeId()).setTpId(node.getNetworkTp()).build());
                     if (node.getNetwork2Tp() != null) {
                         createdOduInterfaces.add(
                             // supporting interface? payload ?
                             openRoadmInterfaceFactory.createOpenRoadmOdu0Interface(node.getNodeId(),
                                 node.getNetwork2Tp(), input.getServiceName(), PT_07, true, input.getTribPortNumber(),
                                 input.getTribSlot()));
-                        LinkTp otnLinkTp2 = new LinkTpBuilder()
-                            .setNodeId(node.getNodeId())
-                            .setTpId(node.getNetworkTp())
-                            .build();
-                        linkTpList.add(otnLinkTp2);
+                        linkTpList.add(
+                            new LinkTpBuilder().setNodeId(node.getNodeId()).setTpId(node.getNetworkTp()).build());
                     }
                     break;
                 case 10:
@@ -330,22 +324,16 @@ public class OtnDeviceRendererServiceImpl implements OtnDeviceRendererService {
                         // supporting interface? payload ?
                         openRoadmInterfaceFactory.createOpenRoadmOdu2eInterface(node.getNodeId(), node.getNetworkTp(),
                             input.getServiceName(), PT_03, true, input.getTribPortNumber(), input.getTribSlot()));
-                    LinkTp otnLinkTp3 = new LinkTpBuilder()
-                        .setNodeId(node.getNodeId())
-                        .setTpId(node.getNetworkTp())
-                        .build();
-                    linkTpList.add(otnLinkTp3);
+                    linkTpList.add(
+                        new LinkTpBuilder().setNodeId(node.getNodeId()).setTpId(node.getNetworkTp()).build());
                     if (node.getNetwork2Tp() != null) {
                         createdOduInterfaces.add(
                             // supporting interface? payload ?
                             openRoadmInterfaceFactory.createOpenRoadmOdu2eInterface(node.getNodeId(),
                                 node.getNetwork2Tp(), input.getServiceName(), PT_03, true, input.getTribPortNumber(),
                                 input.getTribSlot()));
-                        LinkTp otnLinkTp4 = new LinkTpBuilder()
-                            .setNodeId(node.getNodeId())
-                            .setTpId(node.getNetworkTp())
-                            .build();
-                        linkTpList.add(otnLinkTp4);
+                        linkTpList.add(
+                            new LinkTpBuilder().setNodeId(node.getNodeId()).setTpId(node.getNetworkTp()).build());
                     }
                     break;
                 case 100:
@@ -370,11 +358,8 @@ public class OtnDeviceRendererServiceImpl implements OtnDeviceRendererService {
                         openRoadmInterfaceFactory.createOpenRoadmOtnOdu4LoInterface(node.getNodeId(),
                             node.getNetworkTp(), input.getServiceName(), PT_07, true, minOpucnTs,
                             maxOpucnTs));
-                    LinkTp otnLinkTp5 = new LinkTpBuilder()
-                        .setNodeId(node.getNodeId())
-                        .setTpId(node.getNetworkTp())
-                        .build();
-                    linkTpList.add(otnLinkTp5);
+                    linkTpList.add(
+                        new LinkTpBuilder().setNodeId(node.getNodeId()).setTpId(node.getNetworkTp()).build());
                     // Here payload-type is optional and is not used for service creation
                     // This is needed if there is an intermediate node
                     if (node.getNetwork2Tp() != null) {
@@ -382,11 +367,8 @@ public class OtnDeviceRendererServiceImpl implements OtnDeviceRendererService {
                             openRoadmInterfaceFactory.createOpenRoadmOtnOdu4LoInterface(node.getNodeId(),
                                 node.getNetwork2Tp(), input.getServiceName(), PT_07, true, minOpucnTs,
                                 maxOpucnTs));
-                        LinkTp otnLinkTp6 = new LinkTpBuilder()
-                            .setNodeId(node.getNodeId())
-                            .setTpId(node.getNetworkTp())
-                            .build();
-                        linkTpList.add(otnLinkTp6);
+                        linkTpList.add(
+                            new LinkTpBuilder().setNodeId(node.getNodeId()).setTpId(node.getNetworkTp()).build());
                     }
                     break;
                 default:
@@ -401,13 +383,13 @@ public class OtnDeviceRendererServiceImpl implements OtnDeviceRendererService {
                 createdConnections.add(connectionNameOpt.get());
                 LOG.info("Created cross connects");
             }
-            NodeInterfaceBuilder nodeInterfaceBuilder = new NodeInterfaceBuilder()
-                .withKey(new NodeInterfaceKey(node.getNodeId()))
-                .setNodeId(node.getNodeId())
-                .setConnectionId(createdConnections)
-                .setEthInterfaceId(createdEthInterfaces)
-                .setOduInterfaceId(createdOduInterfaces);
-            nodeInterfaces.add(nodeInterfaceBuilder.build());
+            nodeInterfaces.add(new NodeInterfaceBuilder()
+                    .withKey(new NodeInterfaceKey(node.getNodeId()))
+                    .setNodeId(node.getNodeId())
+                    .setConnectionId(createdConnections)
+                    .setEthInterfaceId(createdEthInterfaces)
+                    .setOduInterfaceId(createdOduInterfaces)
+                    .build());
         }
     }
 
@@ -420,25 +402,22 @@ public class OtnDeviceRendererServiceImpl implements OtnDeviceRendererService {
         for (int i = 0; i < input.getNodes().size(); i++) {
             Nodes node = input.getNodes().get(i);
             String supportingOtuInterface = node.getNetworkTp() + "-OTUC4";
-            List<String> createdOduc4Interfaces = new ArrayList<>();
-            // Adding SAPI/DAPI information to the
-            Nodes tgtNode = null;
-            if (i + 1 == input.getNodes().size()) {
+
+            Nodes tgtNode =
+                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);
-            }
-            createdOduc4Interfaces.add(openRoadmInterfaceFactory.createOpenRoadmOtnOduc4Interface(node.getNodeId(),
-                node.getNetworkTp(), supportingOtuInterface, tgtNode.getNodeId(), tgtNode.getNetworkTp()));
+                    ? input.getNodes().get(0)
+                    : input.getNodes().get(i + 1);
 
-            NodeInterfaceBuilder nodeInterfaceBuilder = new NodeInterfaceBuilder()
-                .withKey(new NodeInterfaceKey(node.getNodeId()))
-                .setNodeId(node.getNodeId())
-                .setOduInterfaceId(createdOduc4Interfaces); // though this is odu, actually it has ODUC4 interfaces
-            nodeInterfaces.add(nodeInterfaceBuilder.build());
-            LinkTp otnLinkTp = new LinkTpBuilder().setNodeId(node.getNodeId()).setTpId(node.getNetworkTp()).build();
-            linkTpList.add(otnLinkTp);
+            nodeInterfaces.add(new NodeInterfaceBuilder()
+                    .withKey(new NodeInterfaceKey(node.getNodeId()))
+                    .setNodeId(node.getNodeId())
+                    .setOduInterfaceId(List.of(
+                        // though this is odu, actually it has ODUC4 interfaces
+                        openRoadmInterfaceFactory.createOpenRoadmOtnOduc4Interface(node.getNodeId(),
+                            node.getNetworkTp(), supportingOtuInterface, tgtNode.getNodeId(), tgtNode.getNetworkTp())))
+                    .build());
+            linkTpList.add(new LinkTpBuilder().setNodeId(node.getNodeId()).setTpId(node.getNetworkTp()).build());
         }
     }
 
@@ -451,25 +430,21 @@ public class OtnDeviceRendererServiceImpl implements OtnDeviceRendererService {
         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()) {
+
+            Nodes tgtNode =
+                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);
-            }
+                    ? input.getNodes().get(0)
+                    : input.getNodes().get(i + 1);
 
-            createdOdu4Interfaces.add(openRoadmInterfaceFactory.createOpenRoadmOtnOdu4Interface(node.getNodeId(),
-                node.getNetworkTp(), supportingOtuInterface, tgtNode.getNodeId(), tgtNode.getNetworkTp()));
-            NodeInterfaceBuilder nodeInterfaceBuilder = new NodeInterfaceBuilder()
-                .withKey(new NodeInterfaceKey(node.getNodeId()))
-                .setNodeId(node.getNodeId())
-                .setOduInterfaceId(createdOdu4Interfaces);
-            nodeInterfaces.add(nodeInterfaceBuilder.build());
-            LinkTp otnLinkTp = new LinkTpBuilder().setNodeId(node.getNodeId()).setTpId(node.getNetworkTp()).build();
-            linkTpList.add(otnLinkTp);
+            nodeInterfaces.add(new NodeInterfaceBuilder()
+                    .withKey(new NodeInterfaceKey(node.getNodeId()))
+                    .setNodeId(node.getNodeId())
+                    .setOduInterfaceId(List.of(
+                        openRoadmInterfaceFactory.createOpenRoadmOtnOdu4Interface(node.getNodeId(),
+                            node.getNetworkTp(), supportingOtuInterface, tgtNode.getNodeId(), tgtNode.getNetworkTp())))
+                    .build());
+            linkTpList.add(new LinkTpBuilder().setNodeId(node.getNodeId()).setTpId(node.getNetworkTp()).build());
         }
     }
 }