Refactor TAPI TapiNetworkModelServiceImpl 82/111482/8
authorguillaume.lambert <guillaume.lambert@orange.com>
Mon, 22 Apr 2024 14:30:57 +0000 (16:30 +0200)
committerguillaume.lambert <guillaume.lambert@orange.com>
Wed, 24 Apr 2024 14:36:54 +0000 (16:36 +0200)
JIRA: TRNSPRTPCE-735
Signed-off-by: guillaume.lambert <guillaume.lambert@orange.com>
Change-Id: I1e9ed1dd865f954f7d1626ac8e195a4cf1b3d48e

tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiNetworkModelServiceImpl.java

index 5a1669cd71b938da3030ddf3b7b57e559c12e6ca..53f50987819bc4d22be60437042c1157ff223ea5 100644 (file)
@@ -44,7 +44,6 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.re
 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev230526.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingListBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev230526.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingListKey;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmNodeType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmTpType;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.xpdr.tp.supported.interfaces.SupportedInterfaceCapability;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.xpdr.tp.supported.interfaces.SupportedInterfaceCapabilityBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.xpdr.tp.supported.interfaces.SupportedInterfaceCapabilityKey;
@@ -106,8 +105,6 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.No
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.RuleType;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.TOPOLOGYOBJECTTYPENODEEDGEPOINT;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.context.TopologyContext;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.InterRuleGroup;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.InterRuleGroupKey;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.NodeRuleGroup;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.NodeRuleGroupBuilder;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.NodeRuleGroupKey;
@@ -141,7 +138,6 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.tr
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.transfer.timing.pac.LatencyCharacteristic;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.transfer.timing.pac.LatencyCharacteristicBuilder;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.binding.Notification;
 import org.opendaylight.yangtools.yang.common.Uint16;
 import org.opendaylight.yangtools.yang.common.Uint32;
 import org.opendaylight.yangtools.yang.common.Uint64;
@@ -192,7 +188,6 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
         }
         this.sipMap.clear();
         LOG.info("Mapping of node {}: {}", orNodeId, node.getMapping().values());
-
         // check type of device, check version and create node mapping
         switch (node.getNodeInfo().getNodeType()) {
             case Rdm:
@@ -202,11 +197,8 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
                 Map<String, List<Mapping>> mapSrg = new HashMap<>();
                 List<Mapping> mappingList = new ArrayList<>(node.nonnullMapping().values());
                 mappingList.sort(Comparator.comparing(Mapping::getLogicalConnectionPoint));
-
-                List<String> nodeShardList = getRoadmNodelist(mappingList);
-
                 // populate degree and srg LCP map
-                for (String str : nodeShardList) {
+                for (String str : getRoadmNodelist(mappingList)) {
                     List<Mapping> interList = mappingList.stream()
                         .filter(x -> x.getLogicalConnectionPoint().contains(str))
                         .collect(Collectors.toList());
@@ -250,7 +242,7 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
                                 new SupportedCepLayerProtocolQualifierInstancesBuilder()
                                     .setNumberOfCepInstances(Uint64.valueOf(1))
                                     .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTS.VALUE)
-                                .build()))
+                                    .build()))
                         .collect(Collectors.toList()));
                 LOG.debug("TAPINETWORKMODELSERVICEIMPL DEG+SRG complete retrieved OnepMap {} ", onepMap);
                 // create tapi Node
@@ -258,7 +250,7 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
                 mergeNodeinTopology(Map.of(roadmNode.key(), roadmNode));
                 mergeSipsinContext(this.sipMap);
                 // TODO add states corresponding to device config -> based on mapping.
-                //  This should be possible after Gilles work is merged
+                // This should be possible after Gilles work is merged
 
                 // rdm to rdm link creation if neighbour roadm is mounted
                 LOG.info("checking if neighbor roadm exists");
@@ -271,33 +263,34 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
                 break;
 
             case Xpdr:
-                List<Mapping> networkMappings = node.nonnullMapping().values().stream()
-                        .filter(k -> k.getLogicalConnectionPoint().contains("NETWORK"))
-                        .collect(Collectors.toList());
                 Map<Integer, String> xpdrMap = new HashMap<>();
-                for (Mapping mapping : networkMappings) {
+                for (Mapping mapping : node.nonnullMapping().values().stream()
+                        .filter(k -> k.getLogicalConnectionPoint().contains("NETWORK"))
+                        .collect(Collectors.toList())) {
                     Integer xpdrNb =
                         Integer.parseInt(mapping.getLogicalConnectionPoint().split("XPDR")[1].split("-")[0]);
                     String nodeId = node.getNodeId() + TapiStringConstants.XXPDR + xpdrNb;
-                    if (!xpdrMap.containsKey(xpdrNb)) {
-                        List<Mapping> xpdrNetMaps = node.nonnullMapping().values()
-                            .stream().filter(k -> k.getLogicalConnectionPoint()
-                                .contains("XPDR" + xpdrNb + TapiStringConstants.NETWORK)).collect(Collectors.toList());
-                        List<Mapping> xpdrClMaps = node.nonnullMapping().values()
-                            .stream().filter(k -> k.getLogicalConnectionPoint()
-                                .contains("XPDR" + xpdrNb + TapiStringConstants.CLIENT)).collect(Collectors.toList());
-                        xpdrMap.put(xpdrNb, node.getNodeId());
-                        // create switching pool
-                        OduSwitchingPools oorOduSwitchingPool = createSwitchPoolForXpdr(
-                            mapping.getXpdrType().getIntValue(), xpdrClMaps, xpdrNetMaps, xpdrNb);
-                        // node transformation
-                        Map<NodeKey, Node> nodeMap = new HashMap<>(
-                            transformXpdrToTapiNode(
-                                nodeId, xpdrClMaps, xpdrNetMaps, mapping.getXpdrType(), oorOduSwitchingPool));
-                        // add nodes and sips to tapi context
-                        mergeNodeinTopology(nodeMap);
-                        mergeSipsinContext(this.sipMap);
+                    if (xpdrMap.containsKey(xpdrNb)) {
+                        continue;
                     }
+                    List<Mapping> xpdrNetMaps = node.nonnullMapping().values().stream()
+                        .filter(k -> k.getLogicalConnectionPoint()
+                            .contains("XPDR" + xpdrNb + TapiStringConstants.NETWORK))
+                        .collect(Collectors.toList());
+                    List<Mapping> xpdrClMaps = node.nonnullMapping().values().stream()
+                        .filter(k -> k.getLogicalConnectionPoint()
+                            .contains("XPDR" + xpdrNb + TapiStringConstants.CLIENT))
+                        .collect(Collectors.toList());
+                    xpdrMap.put(xpdrNb, node.getNodeId());
+                    // create switching pool
+                    OduSwitchingPools oorOduSwitchingPool =
+                        createSwitchPoolForXpdr(mapping.getXpdrType(), xpdrClMaps, xpdrNetMaps, xpdrNb);
+                    // add nodes and sips to tapi context
+                    mergeNodeinTopology(new HashMap<>(
+                        // node transformation
+                        transformXpdrToTapiNode(
+                            nodeId, xpdrClMaps, xpdrNetMaps, mapping.getXpdrType(), oorOduSwitchingPool)));
+                    mergeSipsinContext(this.sipMap);
                 }
                 LOG.info("TAPI node for or node {} successfully merged", orNodeId);
                 break;
@@ -310,8 +303,7 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
 
     @Override
     public void updateTapiTopology(String nodeId, Mapping mapping) {
-        List<Uuid> uuids = getChangedNodeUuids(nodeId, mapping);
-        List<Uuid> changedOneps = updateNeps(mapping, uuids);
+        List<Uuid> changedOneps = updateNeps(mapping, getChangedNodeUuids(nodeId, mapping));
         updateLinks(changedOneps, mapping);
         sendNotification(changedOneps, mapping);
         LOG.info("Updated TAPI topology successfully.");
@@ -319,16 +311,16 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
 
     @SuppressWarnings("rawtypes")
     private void sendNotification(List<Uuid> changedOneps, Mapping mapping) {
-        Notification notification = new NotificationBuilder()
-            .setNotificationType(NOTIFICATIONTYPEATTRIBUTEVALUECHANGE.VALUE)
-//            .setTargetObjectType(ObjectType.NODEEDGEPOINT)
-            //TODO: Change this : modification in Models 2.4 does not provide for Object type Node EdgePoint
-            .setTargetObjectType(TOPOLOGYOBJECTTYPENODEEDGEPOINT.VALUE)
-            .setChangedAttributes(getChangedAttributes(changedOneps, mapping))
-            .setUuid(tapiTopoUuid)
-            .build();
         try {
-            notificationPublishService.putNotification(notification);
+            notificationPublishService.putNotification(
+                new NotificationBuilder()
+                    .setNotificationType(NOTIFICATIONTYPEATTRIBUTEVALUECHANGE.VALUE)
+                    // .setTargetObjectType(ObjectType.NODEEDGEPOINT)
+                    //TODO: Change this : modification in Models 2.4 does not provide for Object type Node EdgePoint
+                    .setTargetObjectType(TOPOLOGYOBJECTTYPENODEEDGEPOINT.VALUE)
+                    .setChangedAttributes(getChangedAttributes(changedOneps, mapping))
+                    .setUuid(tapiTopoUuid)
+                    .build());
         } catch (InterruptedException e) {
             LOG.error("Could not send notification");
         }
@@ -337,12 +329,16 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
     private Map<ChangedAttributesKey, ChangedAttributes> getChangedAttributes(
             List<Uuid> changedOneps, Mapping mapping) {
         Map<ChangedAttributesKey, ChangedAttributes> changedAttributes = new HashMap<>();
+        String operState = mapping.getPortOperState();
+        String oldState = operState.equals("InService") ? "OutOfService" : "InService";
         for (Uuid nep : changedOneps) {
+            String nepVal = nep.getValue();
             changedAttributes.put(
-                new ChangedAttributesKey(nep.getValue()),
-                new ChangedAttributesBuilder().setValueName(nep.getValue())
-                    .setOldValue(mapping.getPortOperState().equals("InService") ? "OutOfService" : "InService")
-                    .setNewValue(mapping.getPortOperState())
+                new ChangedAttributesKey(nepVal),
+                new ChangedAttributesBuilder()
+                    .setValueName(nepVal)
+                    .setOldValue(oldState)
+                    .setNewValue(operState)
                     .build());
         }
         return changedAttributes;
@@ -350,18 +346,23 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
 
     private void updateLinks(List<Uuid> changedOneps, Mapping mapping) {
         try {
-            InstanceIdentifier<Topology> topoIID = InstanceIdentifier.builder(Context.class)
-                    .augmentation(Context1.class).child(TopologyContext.class)
-                    .child(Topology.class, new TopologyKey(tapiTopoUuid))
-                    .build();
             Optional<Topology> optTopology =
-                this.networkTransactionService.read(LogicalDatastoreType.OPERATIONAL, topoIID).get();
+                this.networkTransactionService.read(
+                        LogicalDatastoreType.OPERATIONAL,
+                        InstanceIdentifier.builder(Context.class)
+                            .augmentation(Context1.class)
+                            .child(TopologyContext.class)
+                            .child(Topology.class, new TopologyKey(tapiTopoUuid))
+                            .build())
+                    .get();
             if (optTopology.isEmpty()) {
                 LOG.error("Could not update TAPI links");
                 return;
             }
             int nbAffectedLinks = 0;
-            LOG.info("UUIDofAffectedONEPS = {} ", changedOneps.toString());
+            LOG.info("UUIDofAffectedONEPS = {} ", changedOneps);
+            AdministrativeState newAdmState = transformAdminState(mapping.getPortAdminState());
+            OperationalState newOprState = transformOperState(mapping.getPortOperState());
             for (Link link : optTopology.orElseThrow().nonnullLink().values()) {
                 List<Uuid> linkNeps = Objects.requireNonNull(link.getNodeEdgePoint()).values().stream()
                         .map(NodeEdgePointRef::getNodeEdgePointUuid)
@@ -370,14 +371,19 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
                 if (Collections.disjoint(changedOneps, linkNeps)) {
                     continue;
                 }
-                InstanceIdentifier<Link> linkIID = InstanceIdentifier.builder(Context.class)
-                        .augmentation(Context1.class).child(TopologyContext.class)
+                this.networkTransactionService.merge(
+                    LogicalDatastoreType.OPERATIONAL,
+                    InstanceIdentifier.builder(Context.class)
+                        .augmentation(Context1.class)
+                        .child(TopologyContext.class)
                         .child(Topology.class, new TopologyKey(tapiTopoUuid))
-                        .child(Link.class, new LinkKey(link.getUuid())).build();
-                Link linkblr = new LinkBuilder().setUuid(link.getUuid())
-                        .setAdministrativeState(transformAdminState(mapping.getPortAdminState()))
-                        .setOperationalState(transformOperState(mapping.getPortOperState())).build();
-                this.networkTransactionService.merge(LogicalDatastoreType.OPERATIONAL, linkIID, linkblr);
+                        .child(Link.class, new LinkKey(link.getUuid()))
+                        .build(),
+                    new LinkBuilder()
+                        .setUuid(link.getUuid())
+                        .setAdministrativeState(newAdmState)
+                        .setOperationalState(newOprState)
+                        .build());
                 nbAffectedLinks++ ;
             }
             LOG.info("AffectedLinksNb = {} ", nbAffectedLinks);
@@ -389,41 +395,47 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
 
     private List<Uuid> updateNeps(Mapping mapping, List<Uuid> uuids) {
         List<Uuid> changedOneps = new ArrayList<>();
+        AdministrativeState newAdmState = transformAdminState(mapping.getPortAdminState());
+        OperationalState newOprState = transformOperState(mapping.getPortOperState());
         for (Uuid nodeUuid : uuids) {
             try {
-                InstanceIdentifier<Node> nodeIID = InstanceIdentifier.builder(Context.class)
-                        .augmentation(Context1.class).child(TopologyContext.class)
-                        .child(Topology.class, new TopologyKey(tapiTopoUuid)).child(Node.class, new NodeKey(nodeUuid))
-                        .build();
                 Optional<Node> optionalNode =
-                    this.networkTransactionService.read(LogicalDatastoreType.OPERATIONAL, nodeIID).get();
+                    this.networkTransactionService.read(
+                            LogicalDatastoreType.OPERATIONAL,
+                            InstanceIdentifier.builder(Context.class)
+                                .augmentation(Context1.class)
+                                .child(TopologyContext.class)
+                                .child(Topology.class, new TopologyKey(tapiTopoUuid))
+                                .child(Node.class, new NodeKey(nodeUuid))
+                                .build())
+                        .get();
                 if (optionalNode.isEmpty()) {
                     continue;
                 }
-                Node node = optionalNode.orElseThrow();
-                List<OwnedNodeEdgePoint> oneps = node.getOwnedNodeEdgePoint().values().stream()
+                for (OwnedNodeEdgePoint onep : optionalNode.orElseThrow().getOwnedNodeEdgePoint().values().stream()
                         .filter(onep -> ((Name) onep.getName().values().toArray()[0]).getValue()
                                 .contains(mapping.getLogicalConnectionPoint()))
-                        .collect(Collectors.toList());
-                for (OwnedNodeEdgePoint onep : oneps) {
+                        .collect(Collectors.toList())) {
                     changedOneps.add(onep.getUuid());
                     updateSips(mapping, onep);
-                    CepList cepList = getUpdatedCeps(mapping, onep);
-                    InstanceIdentifier<OwnedNodeEdgePoint> onepIID = InstanceIdentifier.builder(Context.class)
-                            .augmentation(Context1.class).child(TopologyContext.class)
+                    this.networkTransactionService.merge(
+                        LogicalDatastoreType.OPERATIONAL,
+                        InstanceIdentifier.builder(Context.class)
+                            .augmentation(Context1.class)
+                            .child(TopologyContext.class)
                             .child(Topology.class, new TopologyKey(tapiTopoUuid))
                             .child(Node.class, new NodeKey(nodeUuid))
                             .child(OwnedNodeEdgePoint.class, new OwnedNodeEdgePointKey(onep.getUuid()))
-                            .build();
-                    OwnedNodeEdgePoint onepblr = new OwnedNodeEdgePointBuilder().setUuid(onep.getUuid())
-                            .addAugmentation(new OwnedNodeEdgePoint1Builder().setCepList(cepList).build())
-                            .setAdministrativeState(transformAdminState(mapping.getPortAdminState()))
-                            .setOperationalState(transformOperState(mapping.getPortOperState())).build();
-                    this.networkTransactionService.merge(LogicalDatastoreType.OPERATIONAL, onepIID, onepblr);
+                            .build(),
+                        new OwnedNodeEdgePointBuilder()
+                            .setUuid(onep.getUuid())
+                            .addAugmentation(
+                                new OwnedNodeEdgePoint1Builder().setCepList(getUpdatedCeps(mapping, onep)).build())
+                            .setAdministrativeState(newAdmState)
+                            .setOperationalState(newOprState)
+                            .build());
                     LOG.info("UpdatedNEP {} of UUID {} to ADMIN {} OPER {}",
-                        onep.getName().toString(), onep.getUuid(),
-                        transformAdminState(mapping.getPortAdminState()),
-                        transformOperState(mapping.getPortOperState()));
+                        onep.getName(), onep.getUuid(), newAdmState, newOprState);
                 }
                 this.networkTransactionService.commit().get();
             } catch (InterruptedException | ExecutionException e) {
@@ -435,24 +447,23 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
 
     private CepList getUpdatedCeps(Mapping mapping, OwnedNodeEdgePoint onep) {
         OwnedNodeEdgePoint1 onep1 = onep.augmentation(OwnedNodeEdgePoint1.class);
-        CepList guardClauseCepList = new CepListBuilder().setConnectionEndPoint(new HashMap<>()).build();
         if (onep1 == null) {
-            return guardClauseCepList;
+            return new CepListBuilder().setConnectionEndPoint(new HashMap<>()).build();
         }
         CepList onep1CepList = onep1.getCepList();
         if (onep1CepList == null) {
-            return guardClauseCepList;
+            return new CepListBuilder().setConnectionEndPoint(new HashMap<>()).build();
         }
         var onep1CepListConnEndPoint = onep1CepList.getConnectionEndPoint();
         if (onep1CepListConnEndPoint == null) {
-            return guardClauseCepList;
+            return new CepListBuilder().setConnectionEndPoint(new HashMap<>()).build();
         }
         Map<ConnectionEndPointKey, ConnectionEndPoint> cepMap = new HashMap<>();
+        OperationalState newOprState = transformOperState(mapping.getPortOperState());
         for (Map.Entry<ConnectionEndPointKey, ConnectionEndPoint> entry : onep1CepListConnEndPoint.entrySet()) {
-            ConnectionEndPoint cep = new ConnectionEndPointBuilder(entry.getValue())
-                    .setOperationalState(transformOperState(mapping.getPortOperState()))
-                    .build();
-            cepMap.put(entry.getKey(), cep);
+            cepMap.put(
+                entry.getKey(),
+                new ConnectionEndPointBuilder(entry.getValue()).setOperationalState(newOprState).build());
         }
         return new CepListBuilder().setConnectionEndPoint(cepMap).build();
     }
@@ -466,11 +477,16 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
         }
         if (nodeId.contains("PDR")) {
             LOG.debug("ANALYSING change in {}", nodeId);
-            int xpdrNb = Integer.parseInt(mapping.getLogicalConnectionPoint().split("XPDR")[1].split("-")[0]);
-            String xpdrNodeId = nodeId + TapiStringConstants.XXPDR + xpdrNb;
             return new ArrayList<>(List.of(new Uuid(
                 UUID.nameUUIDFromBytes(
-                        (String.join("+", xpdrNodeId, TapiStringConstants.XPDR)).getBytes(StandardCharsets.UTF_8))
+                        (String.join("+",
+                                //xpdrNodeId,
+                                nodeId + TapiStringConstants.XXPDR
+                                    // + xpdrNb,
+                                    + Integer.parseInt(
+                                        mapping.getLogicalConnectionPoint().split("XPDR")[1].split("-")[0]),
+                                TapiStringConstants.XPDR))
+                            .getBytes(StandardCharsets.UTF_8))
                     .toString())));
         }
         LOG.error("Updating this device is currently not supported");
@@ -478,65 +494,55 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
     }
 
     private void updateSips(Mapping mapping, OwnedNodeEdgePoint onep) {
-        if (onep.getMappedServiceInterfacePoint() == null || onep.getMappedServiceInterfacePoint().size() == 0) {
+        if (onep.getMappedServiceInterfacePoint() == null) {
             return;
         }
-        //TODO remove onep.getMappedServiceInterfacePoint().size() == 0 check -> a for-loop on empty list won't harm
+        AdministrativeState newAdmState = transformAdminState(mapping.getPortAdminState());
+        OperationalState newOprState = transformOperState(mapping.getPortOperState());
         for (MappedServiceInterfacePoint msip : onep.getMappedServiceInterfacePoint().values()) {
-            InstanceIdentifier<ServiceInterfacePoint> sipIID = InstanceIdentifier
+            this.networkTransactionService.merge(
+                LogicalDatastoreType.OPERATIONAL,
+                InstanceIdentifier
                     .builder(Context.class)
                     .child(ServiceInterfacePoint.class,
                             new ServiceInterfacePointKey(msip.getServiceInterfacePointUuid()))
-                    .build();
-            ServiceInterfacePoint sipblr = new ServiceInterfacePointBuilder()
+                    .build(),
+                new ServiceInterfacePointBuilder()
                     .setUuid(msip.getServiceInterfacePointUuid())
-                    .setAdministrativeState(transformAdminState(mapping.getPortAdminState()))
-                    .setOperationalState(transformOperState(mapping.getPortOperState())).build();
-            this.networkTransactionService.merge(LogicalDatastoreType.OPERATIONAL, sipIID, sipblr);
+                    .setAdministrativeState(newAdmState)
+                    .setOperationalState(newOprState)
+                    .build());
         }
-
     }
 
     private Map<NodeKey, Node> transformXpdrToTapiNode(String nodeId, List<Mapping> xpdrClMaps,
             List<Mapping> xpdrNetMaps, XpdrNodeTypes xponderType, OduSwitchingPools oorOduSwitchingPool) {
-        Map<NodeKey, Node> nodeMap = new HashMap<>();
         LOG.info("creation of a DSR/ODU node for {}", nodeId);
-        Uuid nodeUuidDsr = new Uuid(
-            UUID.nameUUIDFromBytes(
-                    (String.join("+", nodeId, TapiStringConstants.XPDR)).getBytes(StandardCharsets.UTF_8))
-                .toString());
-        Name nameDsr = new NameBuilder()
-                .setValueName("dsr/odu node name")
-                .setValue(String.join("+", nodeId, TapiStringConstants.XPDR))
-                .build();
-        Name nameOtsi =  new NameBuilder()
-                .setValueName("otsi node name")
-                .setValue(String.join("+", nodeId, TapiStringConstants.XPDR))
-                .build();
+        String nameVal = String.join("+", nodeId, TapiStringConstants.XPDR);
+        Name nameDsr = new NameBuilder().setValueName("dsr/odu node name").setValue(nameVal).build();
+        Name nameOtsi =  new NameBuilder().setValueName("otsi node name").setValue(nameVal).build();
         Name nameNodeType = new NameBuilder().setValueName("Node Type").setValue(getNodeType(xponderType)).build();
-        Set<LayerProtocolName> dsrLayerProtocols = Set.of(
-            LayerProtocolName.DSR, LayerProtocolName.ODU,
-            LayerProtocolName.DIGITALOTN, LayerProtocolName.PHOTONICMEDIA);
         Node dsrNode = createTapiXpdrNode(
-                Map.of(nameDsr.key(), nameDsr, nameOtsi.key(), nameOtsi, nameNodeType.key(), nameNodeType),
-                dsrLayerProtocols, nodeId, nodeUuidDsr, xpdrClMaps, xpdrNetMaps, xponderType, oorOduSwitchingPool);
-        nodeMap.put(dsrNode.key(), dsrNode);
-        return nodeMap;
+            Map.of(nameDsr.key(), nameDsr, nameOtsi.key(), nameOtsi, nameNodeType.key(), nameNodeType),
+            Set.of(LayerProtocolName.DSR, LayerProtocolName.ODU,
+                LayerProtocolName.DIGITALOTN, LayerProtocolName.PHOTONICMEDIA),
+            nodeId, new Uuid(UUID.nameUUIDFromBytes(nameVal.getBytes(StandardCharsets.UTF_8)).toString()),
+            xpdrClMaps, xpdrNetMaps, xponderType, oorOduSwitchingPool);
+        return new HashMap<>(Map.of(dsrNode.key(), dsrNode));
     }
 
     private OduSwitchingPools createSwitchPoolForXpdr(
-            int xpdrType, List<Mapping> xpdrClMaps, List<Mapping> xpdrNetMaps, Integer xpdrNb) {
+            XpdrNodeTypes xpdrType, List<Mapping> xpdrClMaps, List<Mapping> xpdrNetMaps, Integer xpdrNb) {
         //TODO are switching pool correct here??
         switch (xpdrType) {
-            case 1:
-                // Tpdr
+            case Tpdr:
                 return createTpdrSwitchPool(xpdrNetMaps);
-            case 2:
-                // Mux
+            case Mpdr:
                 return createMuxSwitchPool(xpdrClMaps, xpdrNetMaps, xpdrNb);
-            case 3:
-                // Switch
+            case Switch:
                 return createSwtchSwitchPool(xpdrClMaps, xpdrNetMaps, xpdrNb);
+            // case Regen:
+            // case RegenUni:
             default:
                 LOG.warn("Xpdr type {} not supported", xpdrType);
         }
@@ -550,7 +556,7 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
         //List<TerminationPoint> tpList = new ArrayList<>();
         for (Map.Entry<String, List<Mapping>> entry : mapSrg.entrySet()) {
             // For each srg node. Loop through the LCPs and create neps and sips for PP
-            for (Mapping m:entry.getValue()) {
+            for (Mapping m : entry.getValue()) {
                 String tpId = m.getLogicalConnectionPoint();
                 String overlayNodeId = String.join("-", orNodeId, tpId.split("\\-")[0]);
                 if (!tpId.contains("PP")) {
@@ -559,37 +565,40 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
                 }
                 int counter = 50;
                 do {
-                    counter--;
+                    var netTP1fromDS = getNetworkTerminationPoint1FromDatastore(overlayNodeId, tpId);
+                    if (netTP1fromDS != null) {
+                        //tpList.add(netTP1fromDS);
+                        tpMap.put(tpId, netTP1fromDS);
+                        LOG.debug("LCP {} is not empty for augmentation TP1", tpId);
+                        break;
+                    }
                     try {
                         Thread.sleep(1);
                     } catch (InterruptedException e) {
                         // TODO Auto-generated catch block
                         LOG.debug("Waiting until PP is backported in Topology, Exception raised", e);
                     }
-                } while (getNetworkTerminationPoint1FromDatastore(overlayNodeId, tpId) == null && counter != 0);
-                if (getNetworkTerminationPoint1FromDatastore(overlayNodeId, tpId) != null) {
-                    //tpList.add(getNetworkTerminationPointFromDatastore(overlayNodeId, tpId));
-                    tpMap.put(tpId, getNetworkTerminationPoint1FromDatastore(overlayNodeId, tpId));
-                    LOG.debug("LCP {} is not empty for augmentation TP1", tpId);
-                } else {
+                    counter--;
+                } while (counter > 0);
+                if (counter == 0) {
                     LOG.error("CREATENEP transformSrgToOnep, No Tp1 found in topology for LCP {}, of NodeId {} ",
                         tpId, overlayNodeId);
                 }
-                if (getNetworkTerminationPoint11FromDatastore(overlayNodeId, tpId) != null) {
-                    LOG.info("LCP {} is not empty for augmentation TP11", tpId);
-                } else {
+                if (getNetworkTerminationPoint11FromDatastore(overlayNodeId, tpId) == null) {
                     LOG.error("CREATENEP transformSrgToOnep, No Tp11 found in topology for LCP {}, of NodeId {} ",
                         tpId, overlayNodeId);
+                } else {
+                    LOG.info("LCP {} is not empty for augmentation TP11", tpId);
                 }
             }
         }
         LOG.debug("TransformSRGToONep for tps {}, of NodeId {} ",
-            tpMap.entrySet().stream().map(tp -> tp.getKey()).collect(Collectors.toList()).toString(), orNodeId);
+            tpMap.entrySet().stream().map(tp -> tp.getKey()).collect(Collectors.toList()), orNodeId);
         return populateNepsForRdmNode(orNodeId, tpMap, false, TapiStringConstants.PHTNC_MEDIA_OTS);
     }
 
-    private Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> transformDegToOnep(String orNodeId,
-                Map<String, List<Mapping>> mapDeg) {
+    private Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> transformDegToOnep(
+                String orNodeId, Map<String, List<Mapping>> mapDeg) {
         LOG.debug("CREATENEP transformDegToOnep, ListOfMapping {}, of NodeId {} ", mapDeg, orNodeId);
         Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> degOnepMap = new HashMap<>();
         Map<String, TerminationPoint1> tpMap = new HashMap<>();
@@ -603,13 +612,14 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
                     continue;
                 }
                 String overlayNodeId = String.join("-", orNodeId, tpId.split("\\-")[0]);
-                if (getNetworkTerminationPoint1FromDatastore(overlayNodeId, tpId) == null) {
+                var netTP1fromDS = getNetworkTerminationPoint1FromDatastore(overlayNodeId, tpId);
+                if (netTP1fromDS == null) {
                     LOG.error("CREATENEP transformDegToOnep, No Tp found in topology for LCP {}, of NodeId {} ",
                         tpId, overlayNodeId);
                     continue;
                 }
                 //tpList.add(getNetworkTerminationPointFromDatastore(overlayNodeId, tpId));
-                tpMap.put(tpId, getNetworkTerminationPoint1FromDatastore(overlayNodeId, tpId));
+                tpMap.put(tpId, netTP1fromDS);
                 LOG.info("LCP {} is not empty for augmentation TP1", tpId);
             }
         }
@@ -713,13 +723,14 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
             return;
         }
         Map<ServiceInterfacePointKey, ServiceInterfacePoint> sips = context.getServiceInterfacePoint();
-        if (sips != null) {
-            for (ServiceInterfacePoint sip:sips.values()) {
-                if (sip.getName().values().stream().anyMatch(name -> name.getValue().contains(nodeId))) {
-                    // Update state of services that have this sip as an endpoint and also connections
-                    updateConnectivityServicesState(sip.getUuid(), nodeId);
-                    deleteSipFromTopo(sip.getUuid());
-                }
+        if (sips == null) {
+            return;
+        }
+        for (ServiceInterfacePoint sip:sips.values()) {
+            if (sip.getName().values().stream().anyMatch(name -> name.getValue().contains(nodeId))) {
+                // Update state of services that have this sip as an endpoint and also connections
+                updateConnectivityServicesState(sip.getUuid(), nodeId);
+                deleteSipFromTopo(sip.getUuid());
             }
         }
     }
@@ -729,26 +740,23 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
             String nodeId, Uuid nodeUuid,
             List<Mapping> xpdrClMaps, List<Mapping> xpdrNetMaps,
             XpdrNodeTypes xponderType, OduSwitchingPools oorOduSwitchingPool) {
-        Map<RuleKey, Rule> ruleList = new HashMap<>();
-        Set<RuleType> ruleTypes = new HashSet<>();
-        ruleTypes.add(RuleType.FORWARDING);
+        if (!layerProtocols.contains(LayerProtocolName.DSR)
+                || !layerProtocols.contains(LayerProtocolName.PHOTONICMEDIA)) {
+            LOG.error("Undefined LayerProtocolName for {} node {}",
+                nameMap.get(nameMap.keySet().iterator().next()).getValueName(),
+                nameMap.get(nameMap.keySet().iterator().next()).getValue());
+        }
+        Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepl =
+            new HashMap<>(createXpdrDsrOduNeps(nodeId, xpdrClMaps, xpdrNetMaps, xponderType));
         Rule rule = new RuleBuilder()
                 .setLocalId("forward")
                 .setForwardingRule(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE)
-                .setRuleType(ruleTypes)
+                .setRuleType(new HashSet<>(Set.of(RuleType.FORWARDING)))
                 .build();
-        ruleList.put(rule.key(), rule);
-        if (!(layerProtocols.contains(LayerProtocolName.DSR)
-                && layerProtocols.contains(LayerProtocolName.PHOTONICMEDIA))) {
-            LOG.error("Undefined LayerProtocolName for {} node {}", nameMap.get(nameMap.keySet().iterator().next())
-                .getValueName(), nameMap.get(nameMap.keySet().iterator().next()).getValue());
-        }
-        Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepl = new HashMap<>();
-        onepl.putAll(createXpdrDsrOduNeps(nodeId, xpdrClMaps, xpdrNetMaps, xponderType));
-        Map<NodeRuleGroupKey, NodeRuleGroup> nodeRuleGroupList = createNodeRuleGroupForDsrNode(
-                    nodeId, oorOduSwitchingPool, ruleList, onepl);
+        Map<NodeRuleGroupKey, NodeRuleGroup> nodeRuleGroupList =
+            createNodeRuleGroupForDsrNode(nodeId, oorOduSwitchingPool, new HashMap<>(Map.of(rule.key(), rule)), onepl);
         onepl.putAll(createXpdrPhtnMdNeps(nodeId, xpdrNetMaps));
-        LOG.debug("TapiNetworkModelServiceImpl line 721, total NEP map = {}", onepl.toString());
+        LOG.debug("TapiNetworkModelServiceImpl line 721, total NEP map = {}", onepl);
 
         // Empty random creation of mandatory fields for avoiding errors....
         CostCharacteristic costCharacteristic = new CostCharacteristicBuilder()
@@ -794,19 +802,19 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
                 builtNode.getOwnedNodeEdgePoint().entrySet()) {
             if (entry.getValue().getSupportedCepLayerProtocolQualifierInstances().stream()
                         .filter(sclpqi -> sclpqi.getLayerProtocolQualifier().equals(PHOTONICLAYERQUALIFIEROTS.VALUE))
-                        .collect(Collectors.toList()).isEmpty()
-                    || entry.getValue().augmentationOrElseThrow(
-                                org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121
-                            .OwnedNodeEdgePoint1.class) == null
-                    || entry.getValue().augmentationOrElseThrow(
+                        .collect(Collectors.toList()).isEmpty()) {
+                continue;
+            }
+            var aug1 = entry.getValue().augmentationOrElseThrow(
                                 org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121
-                            .OwnedNodeEdgePoint1.class).getPhotonicMediaNodeEdgePointSpec() == null) {
+                            .OwnedNodeEdgePoint1.class);
+            if (aug1 == null) {
                 continue;
             }
-            pmnepspecList.add(entry.getValue()
-                .augmentationOrElseThrow(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121
-                        .OwnedNodeEdgePoint1.class)
-                .getPhotonicMediaNodeEdgePointSpec());
+            var phMedNepSpec = aug1.getPhotonicMediaNodeEdgePointSpec();
+            if (phMedNepSpec != null) {
+                pmnepspecList.add(phMedNepSpec);
+            }
         }
         LOG.debug("TapiNetworkModelServiceImpl line 775, List of non empty PMNEPSEC is = {}", pmnepspecList);
         return builtNode;
@@ -816,143 +824,94 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
             String nodeId, List<Mapping> xpdrNetMaps) {
         Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepl = new HashMap<>();
         // eNep creation on otsi node
-        for (int i = 0; i < xpdrNetMaps.size(); i++) {
-            Uuid nepUuid2 = new Uuid(UUID.nameUUIDFromBytes(
-                (String.join("+", nodeId, TapiStringConstants.PHTNC_MEDIA_OTS,
-                    xpdrNetMaps.get(i).getLogicalConnectionPoint())).getBytes(StandardCharsets.UTF_8)).toString());
-            Name onedName = new NameBuilder()
-                .setValueName("eNodeEdgePoint")
-                .setValue(String.join("+", nodeId, TapiStringConstants.PHTNC_MEDIA_OTS,
-                    xpdrNetMaps.get(i).getLogicalConnectionPoint()))
-                .build();
-
-            List<SupportedIfCapability> newSupIfCapList =
-                new ArrayList<>(xpdrNetMaps.get(i).getSupportedInterfaceCapability());
-            List<String> opModeList = new ArrayList<>();
-            if (xpdrNetMaps.get(i).getSupportedOperationalMode() != null) {
-                opModeList.addAll(xpdrNetMaps.get(i).getSupportedOperationalMode());
-            }
-
-            OwnedNodeEdgePoint onep = createNep(nodeId, nepUuid2, xpdrNetMaps.get(i).getLogicalConnectionPoint(),
-                Map.of(onedName.key(), onedName), LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA,
-                true, String.join("+", nodeId, TapiStringConstants.PHTNC_MEDIA_OTS), newSupIfCapList, opModeList,
-                transformOperState(xpdrNetMaps.get(i).getPortOperState()),
-                transformAdminState(xpdrNetMaps.get(i).getPortAdminState()));
+        for (Mapping mapping : xpdrNetMaps) {
+            var lcp = mapping.getLogicalConnectionPoint();
+            String onedNameVal = String.join("+", nodeId, TapiStringConstants.PHTNC_MEDIA_OTS, lcp);
+            Name onedName = new NameBuilder().setValueName("eNodeEdgePoint").setValue(onedNameVal).build();
+            var supOpModes = mapping.getSupportedOperationalMode();
+            List<String> opModeList = supOpModes == null ? new ArrayList<>() : new ArrayList<>(supOpModes);
+            AdministrativeState newAdmState = transformAdminState(mapping.getPortAdminState());
+            OperationalState newOprState = transformOperState(mapping.getPortOperState());
+            OwnedNodeEdgePoint onep = createNep(
+                nodeId,
+                new Uuid(UUID.nameUUIDFromBytes(onedNameVal.getBytes(StandardCharsets.UTF_8)).toString()),
+                lcp, Map.of(onedName.key(), onedName),
+                LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA, true,
+                String.join("+", nodeId, TapiStringConstants.PHTNC_MEDIA_OTS),
+                new ArrayList<>(mapping.getSupportedInterfaceCapability()), opModeList, newOprState, newAdmState);
             onepl.put(onep.key(), onep);
-        }
         // OTSi_MC Nep creation on otsi node
-        for (int i = 0; i < xpdrNetMaps.size(); i++) {
-            Uuid nepUuid3 = new Uuid(UUID.nameUUIDFromBytes(
-                (String.join("+", nodeId, TapiStringConstants.OTSI_MC,
-                    xpdrNetMaps.get(i).getLogicalConnectionPoint())).getBytes(StandardCharsets.UTF_8)).toString());
-            Name onedName = new NameBuilder()
-                .setValueName("PhotMedNodeEdgePoint")
-                .setValue(String.join("+", nodeId, TapiStringConstants.OTSI_MC,
-                    xpdrNetMaps.get(i).getLogicalConnectionPoint()))
-                .build();
-
-            List<SupportedIfCapability> newSupIfCapList =
-                    new ArrayList<>(xpdrNetMaps.get(i).getSupportedInterfaceCapability());
-            List<String> opModeList = new ArrayList<>();
-            if (xpdrNetMaps.get(i).getSupportedOperationalMode() != null) {
-                opModeList.addAll(xpdrNetMaps.get(i).getSupportedOperationalMode());
-            }
-
-            OwnedNodeEdgePoint onep = createNep(nodeId, nepUuid3, xpdrNetMaps.get(i).getLogicalConnectionPoint(),
-                Map.of(onedName.key(), onedName), LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA,
-                false, String.join("+", nodeId, TapiStringConstants.OTSI_MC), newSupIfCapList, opModeList,
-                transformOperState(xpdrNetMaps.get(i).getPortOperState()),
-                transformAdminState(xpdrNetMaps.get(i).getPortAdminState()));
-            onepl.put(onep.key(), onep);
+            String onedNameVal2 = String.join("+", nodeId, TapiStringConstants.OTSI_MC, lcp);
+            Name onedName2 = new NameBuilder().setValueName("PhotMedNodeEdgePoint").setValue(onedNameVal2).build();
+            OwnedNodeEdgePoint onep2 = createNep(
+                nodeId,
+                new Uuid(UUID.nameUUIDFromBytes(onedNameVal2.getBytes(StandardCharsets.UTF_8)).toString()),
+                lcp, Map.of(onedName2.key(), onedName2),
+                LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA, false,
+                String.join("+", nodeId, TapiStringConstants.OTSI_MC),
+                new ArrayList<>(mapping.getSupportedInterfaceCapability()), opModeList, newOprState, newAdmState);
+            onepl.put(onep2.key(), onep2);
         }
         return onepl;
     }
 
-    private Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> createXpdrDsrOduNeps(String nodeId, List<Mapping> xpdrClMaps,
-                                                                                List<Mapping> xpdrNetMaps,
-                                                                                XpdrNodeTypes xponderType) {
+    private Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> createXpdrDsrOduNeps(
+            String nodeId, List<Mapping> xpdrClMaps, List<Mapping> xpdrNetMaps, XpdrNodeTypes xponderType) {
         Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepl = new HashMap<>();
         // client nep creation on DSR node
-        for (int i = 0; i < xpdrClMaps.size(); i++) {
-            LOG.info("Client NEP = {}",
-                String.join("+", nodeId, TapiStringConstants.DSR, xpdrClMaps.get(i).getLogicalConnectionPoint()));
-            Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes(
-                (String.join("+", nodeId, TapiStringConstants.DSR,
-                    xpdrClMaps.get(i).getLogicalConnectionPoint())).getBytes(StandardCharsets.UTF_8)).toString());
-            NameBuilder nameBldr = new NameBuilder().setValue(String.join("+", nodeId,
-                TapiStringConstants.DSR, xpdrClMaps.get(i).getLogicalConnectionPoint()));
-            Name name = nameBldr
+        for (Mapping mapping : xpdrClMaps) {
+            var lcp = mapping.getLogicalConnectionPoint();
+            String nepvalue = String.join("+", nodeId, TapiStringConstants.DSR, lcp);
+            LOG.info("Client NEP = {}", nepvalue);
+            Name name = new NameBuilder()
+                .setValue(nepvalue)
                 .setValueName(OpenroadmNodeType.TPDR.getName().equalsIgnoreCase(xponderType.getName())
                         ? "100G-tpdr" : "NodeEdgePoint_C")
                 .build();
-            List<SupportedIfCapability> newSupIfCapList =
-                    new ArrayList<>(xpdrClMaps.get(i).getSupportedInterfaceCapability());
-            OwnedNodeEdgePoint onep = createNep(nodeId, nepUuid, xpdrClMaps.get(i).getLogicalConnectionPoint(),
-                Map.of(name.key(), name), LayerProtocolName.DSR, LayerProtocolName.DSR, true,
-                String.join("+", nodeId, TapiStringConstants.DSR), newSupIfCapList, null,
-                transformOperState(xpdrClMaps.get(i).getPortOperState()),
-                transformAdminState(xpdrClMaps.get(i).getPortAdminState()));
+            AdministrativeState newAdmState = transformAdminState(mapping.getPortAdminState());
+            OperationalState newOprState = transformOperState(mapping.getPortOperState());
+            OwnedNodeEdgePoint onep = createNep(
+                nodeId, new Uuid(UUID.nameUUIDFromBytes(nepvalue.getBytes(StandardCharsets.UTF_8)).toString()),
+                lcp, Map.of(name.key(), name), LayerProtocolName.DSR, LayerProtocolName.DSR, true,
+                String.join("+", nodeId, TapiStringConstants.DSR),
+                new ArrayList<>(mapping.getSupportedInterfaceCapability()), null, newOprState, newAdmState);
             onepl.put(onep.key(), onep);
+        // network nep creation on E_ODU node
+            String onedNameVal = String.join("+", nodeId, TapiStringConstants.E_ODU, lcp);
+            LOG.info("eODU NEP = {}", onedNameVal);
+            Name onedName = new NameBuilder().setValueName("eNodeEdgePoint_N").setValue(onedNameVal).build();
+            OwnedNodeEdgePoint onep2 = createNep(
+                nodeId, new Uuid(UUID.nameUUIDFromBytes(onedNameVal.getBytes(StandardCharsets.UTF_8)).toString()),
+                lcp, Map.of(onedName.key(), onedName), LayerProtocolName.ODU, LayerProtocolName.DSR, true,
+                String.join("+", nodeId, TapiStringConstants.E_ODU),
+                new ArrayList<>(mapping.getSupportedInterfaceCapability()), null, newOprState, newAdmState);
+            onepl.put(onep2.key(), onep2);
         }
         // network nep creation on I_ODU node
-        for (int i = 0; i < xpdrNetMaps.size(); i++) {
-            LOG.info("iODU NEP = {}", String.join("+", nodeId, TapiStringConstants.I_ODU,
-                xpdrNetMaps.get(i).getLogicalConnectionPoint()));
-            Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes(
-                (String.join("+", nodeId, TapiStringConstants.I_ODU,
-                    xpdrNetMaps.get(i).getLogicalConnectionPoint())).getBytes(StandardCharsets.UTF_8)).toString());
-            Name onedName = new NameBuilder()
-                .setValueName("iNodeEdgePoint_N")
-                .setValue(String.join("+", nodeId, TapiStringConstants.I_ODU,
-                    xpdrNetMaps.get(i).getLogicalConnectionPoint()))
-                .build();
-
-            List<SupportedIfCapability> newSupIfCapList =
-                    new ArrayList<>(xpdrNetMaps.get(i).getSupportedInterfaceCapability());
-            OwnedNodeEdgePoint onep = createNep(nodeId, nepUuid, xpdrNetMaps.get(i).getLogicalConnectionPoint(),
-                Map.of(onedName.key(), onedName),
-                LayerProtocolName.ODU, LayerProtocolName.DSR, true,
-                String.join("+", nodeId, TapiStringConstants.I_ODU), newSupIfCapList, null,
-                transformOperState(xpdrNetMaps.get(i).getPortOperState()),
-                transformAdminState(xpdrNetMaps.get(i).getPortAdminState()));
-            onepl.put(onep.key(), onep);
-        }
-        // network nep creation on E_ODU node
-        for (int i = 0; i < xpdrClMaps.size(); i++) {
-            LOG.info("eODU NEP = {}", String.join("+", nodeId, TapiStringConstants.E_ODU,
-                xpdrClMaps.get(i).getLogicalConnectionPoint()));
-            Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes(
-                (String.join("+", nodeId, TapiStringConstants.E_ODU,
-                    xpdrClMaps.get(i).getLogicalConnectionPoint())).getBytes(StandardCharsets.UTF_8)).toString());
-            Name onedName = new NameBuilder()
-                .setValueName("eNodeEdgePoint_N")
-                .setValue(
-                    String.join("+", nodeId, TapiStringConstants.E_ODU, xpdrClMaps.get(i).getLogicalConnectionPoint()))
-                .build();
-
-            List<SupportedIfCapability> newSupIfCapList =
-                    new ArrayList<>(xpdrClMaps.get(i).getSupportedInterfaceCapability());
-
-            OwnedNodeEdgePoint onep = createNep(nodeId, nepUuid, xpdrClMaps.get(i).getLogicalConnectionPoint(),
-                Map.of(onedName.key(), onedName),
-                LayerProtocolName.ODU, LayerProtocolName.DSR, true,
-                String.join("+", nodeId, TapiStringConstants.E_ODU), newSupIfCapList, null,
-                transformOperState(xpdrClMaps.get(i).getPortOperState()),
-                transformAdminState(xpdrClMaps.get(i).getPortAdminState()));
+        for (Mapping mapping : xpdrNetMaps) {
+            var lcp = mapping.getLogicalConnectionPoint();
+            String onedNameVal = String.join("+", nodeId, TapiStringConstants.I_ODU, lcp);
+            LOG.info("iODU NEP = {}", onedNameVal);
+            Name onedName = new NameBuilder().setValueName("iNodeEdgePoint_N").setValue(onedNameVal).build();
+            OwnedNodeEdgePoint onep = createNep(
+                nodeId, new Uuid(UUID.nameUUIDFromBytes(onedNameVal.getBytes(StandardCharsets.UTF_8)).toString()),
+                lcp, Map.of(onedName.key(), onedName), LayerProtocolName.ODU, LayerProtocolName.DSR, true,
+                String.join("+", nodeId, TapiStringConstants.I_ODU),
+                new ArrayList<>(mapping.getSupportedInterfaceCapability()),
+                null, transformOperState(mapping.getPortOperState()),transformAdminState(mapping.getPortAdminState()));
             onepl.put(onep.key(), onep);
         }
         return onepl;
     }
 
     private OperationalState transformOperState(String operString) {
-        State operState = org.opendaylight.transportpce.networkmodel.util.TopologyUtils.setNetworkOperState(operString);
-        return operState.equals(State.InService) ? OperationalState.ENABLED : OperationalState.DISABLED;
+        return org.opendaylight.transportpce.networkmodel.util.TopologyUtils.setNetworkOperState(operString)
+                .equals(State.InService) ? OperationalState.ENABLED : OperationalState.DISABLED;
     }
 
     private AdministrativeState transformAdminState(String adminString) {
-        AdminStates adminState = org.opendaylight.transportpce.networkmodel.util.TopologyUtils
-            .setNetworkAdminState(adminString);
-        return adminState.equals(AdminStates.InService) ? AdministrativeState.UNLOCKED : AdministrativeState.LOCKED;
+        return org.opendaylight.transportpce.networkmodel.util.TopologyUtils.setNetworkAdminState(adminString)
+                .equals(AdminStates.InService) ? AdministrativeState.UNLOCKED : AdministrativeState.LOCKED;
     }
 
     private OwnedNodeEdgePoint createNep(String nodeId, Uuid nepUuid, String tpid, Map<NameKey, Name> nepNames,
@@ -962,11 +921,10 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
         List<SupportedInterfaceCapability> sicListTemp = new ArrayList<>();
         List<OperationalModeKey> keyedOpModeList = new ArrayList<>();
         for (SupportedIfCapability supInterCapa : sicList) {
-            SupportedInterfaceCapability supIfCapa = new SupportedInterfaceCapabilityBuilder()
+            sicListTemp.add(new SupportedInterfaceCapabilityBuilder()
                     .withKey(new SupportedInterfaceCapabilityKey(supInterCapa))
                     .setIfCapType(supInterCapa)
-                    .build();
-            sicListTemp.add(supIfCapa);
+                    .build());
         }
         Collection<SupportedInterfaceCapability> sicColl = sicListTemp;
         OwnedNodeEdgePointBuilder onepBldr = new OwnedNodeEdgePointBuilder()
@@ -991,14 +949,17 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
         }
         if (opModeList == null || opModeList.isEmpty()) {
             for (SupportedInterfaceCapability sic : sicColl) {
-                String ifCapType = sic.getIfCapType().toString().split("\\{")[0];
-                if (("IfOCHOTUCnODUCn").equals(ifCapType) || ("IfOCHOTUCnODUCnUniregen").equals(ifCapType)
-                        || ("IfOCHOTUCnODUCnRegen").equals(ifCapType)) {
-                //TODO use switch / case block
-                    keyedOpModeList.add(new OperationalModeKey("400G"));
-                    LOG.warn(TopologyUtils.NOOPMODEDECLARED + "400G rate available", tpid);
-                    break;
+                switch (sic.getIfCapType().toString().split("\\{")[0]) {
+                    case "IfOCHOTUCnODUCn":
+                    case "IfOCHOTUCnODUCnUniregen":
+                    case "IfOCHOTUCnODUCnRegen":
+                        keyedOpModeList.add(new OperationalModeKey("400G"));
+                        LOG.warn(TopologyUtils.NOOPMODEDECLARED + "400G rate available", tpid);
+                        break;
+                    default:
+                        continue;
                 }
+                break;
             }
             keyedOpModeList.add(new OperationalModeKey("100G"));
             LOG.warn(TopologyUtils.NOOPMODEDECLARED + "100G rate available", tpid);
@@ -1008,16 +969,16 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
             }
         }
         Map<Double, Double> freqWidthMap = new HashMap<>();
-        if (getNetworkTerminationPointFromDatastore(nodeId, tpid) != null) {
-            freqWidthMap = tapiFactory.getXpdrUsedWavelength(getNetworkTerminationPointFromDatastore(nodeId, tpid));
-        } else {
+        if (getNetworkTerminationPointFromDatastore(nodeId, tpid) == null) {
             LOG.error("CREATENEP, No Tp found in topology for LCP {}, of NodeId {} ", tpid, nodeId);
+        } else {
+            freqWidthMap = tapiFactory.getXpdrUsedWavelength(getNetworkTerminationPointFromDatastore(nodeId, tpid));
         }
-        onepBldr = tapiFactory.addPayloadStructureAndPhotSpecToOnep(
-                nodeId, freqWidthMap, keyedOpModeList, sicColl, onepBldr, keyword);
-        LOG.debug("TapiNetworkServiceImpl line982, onep = {}", onepBldr.build());
-        return onepBldr.build();
-        //TODO don't build twice
+        OwnedNodeEdgePoint onep = tapiFactory.addPayloadStructureAndPhotSpecToOnep(
+                nodeId, freqWidthMap, keyedOpModeList, sicColl, onepBldr, keyword)
+            .build();
+        LOG.debug("TapiNetworkServiceImpl line982, onep = {}", onep);
+        return onep;
     }
 
     private Node createRoadmTapiNode(String orNodeId, Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepMap) {
@@ -1025,20 +986,21 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
         Uuid nodeUuid;
         Name nodeNames;
         if (orNodeId.equals("ROADMINFRA")) {
-            nodeUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.RDM_INFRA
-                .getBytes(Charset.forName("UTF-8"))).toString());
-            nodeNames =  new NameBuilder().setValueName("roadm node name").setValue(TapiStringConstants.RDM_INFRA)
-                .build();
+            nodeUuid = new Uuid(
+                UUID.nameUUIDFromBytes(TapiStringConstants.RDM_INFRA.getBytes(Charset.forName("UTF-8")))
+                    .toString());
+            nodeNames =
+                new NameBuilder().setValueName("roadm node name").setValue(TapiStringConstants.RDM_INFRA).build();
         } else {
-            nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", orNodeId,
-                TapiStringConstants.PHTNC_MEDIA)).getBytes(StandardCharsets.UTF_8)).toString());
-            nodeNames =  new NameBuilder().setValueName("roadm node name")
-                .setValue(String.join("+", orNodeId, TapiStringConstants.PHTNC_MEDIA)).build();
+            String nodeNamesVal = String.join("+", orNodeId, TapiStringConstants.PHTNC_MEDIA);
+            nodeUuid = new Uuid(
+                UUID.nameUUIDFromBytes(nodeNamesVal.getBytes(StandardCharsets.UTF_8))
+                    .toString());
+            nodeNames = new NameBuilder().setValueName("roadm node name").setValue(nodeNamesVal).build();
         }
         Name nameNodeType =
             new NameBuilder().setValueName("Node Type").setValue(OpenroadmNodeType.ROADM.getName()).build();
         // Protocol Layer
-        Set<LayerProtocolName> layerProtocols = Set.of(LayerProtocolName.PHOTONICMEDIA);
         // Empty random creation of mandatory fields for avoiding errors....
         CostCharacteristic costCharacteristic = new CostCharacteristicBuilder()
             .setCostAlgorithm("Restricted Shortest Path - RSP")
@@ -1056,24 +1018,20 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
             .setRiskCharacteristicName("risk characteristic")
             .setRiskIdentifierList(Set.of("risk identifier1", "risk identifier2"))
             .build();
-        RiskParameterPac riskParamPac = new RiskParameterPacBuilder()
-            .setRiskCharacteristic(Map.of(riskCharacteristic.key(), riskCharacteristic))
-            .build();
-        Map<NodeRuleGroupKey, NodeRuleGroup> nodeRuleGroupMap
-            = tapiFactory.createAllNodeRuleGroupForRdmNode(topologicalMode, nodeUuid, orNodeId, onepMap.values());
-        Map<InterRuleGroupKey, InterRuleGroup> interRuleGroupMap
-            = tapiFactory.createInterRuleGroupForRdmNode(topologicalMode, nodeUuid, orNodeId,
-                nodeRuleGroupMap.entrySet().stream().map(e -> e.getKey()).collect(Collectors.toList()));
+        Map<NodeRuleGroupKey, NodeRuleGroup> nodeRuleGroupMap =
+            tapiFactory.createAllNodeRuleGroupForRdmNode(topologicalMode, nodeUuid, orNodeId, onepMap.values());
         return new NodeBuilder()
             .setUuid(nodeUuid)
             .setName(Map.of(nodeNames.key(), nodeNames, nameNodeType.key(), nameNodeType))
-            .setLayerProtocolName(layerProtocols)
+            .setLayerProtocolName(Set.of(LayerProtocolName.PHOTONICMEDIA))
             .setAdministrativeState(AdministrativeState.UNLOCKED)
             .setOperationalState(OperationalState.ENABLED)
             .setLifecycleState(LifecycleState.INSTALLED)
             .setOwnedNodeEdgePoint(onepMap)
             .setNodeRuleGroup(nodeRuleGroupMap)
-            .setInterRuleGroup(interRuleGroupMap)
+            .setInterRuleGroup(
+                tapiFactory.createInterRuleGroupForRdmNode(topologicalMode, nodeUuid, orNodeId,
+                    nodeRuleGroupMap.entrySet().stream().map(e -> e.getKey()).collect(Collectors.toList())))
             .setCostCharacteristic(Map.of(costCharacteristic.key(), costCharacteristic))
             .setLatencyCharacteristic(Map.of(latencyCharacteristic.key(), latencyCharacteristic))
             .setErrorCharacteristic("error")
@@ -1082,27 +1040,25 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
             .setDeliveryOrderCharacteristic("delivery order")
             .setUnavailableTimeCharacteristic("unavailable time")
             .setServerIntegrityProcessCharacteristic("server integrity process")
-            .setRiskParameterPac(riskParamPac)
+            .setRiskParameterPac(
+                new RiskParameterPacBuilder()
+                    .setRiskCharacteristic(Map.of(riskCharacteristic.key(), riskCharacteristic))
+                    .build())
             .build();
     }
 
     private OduSwitchingPools createTpdrSwitchPool(List<Mapping> xpdrNetMaps) {
         Map<NonBlockingListKey, NonBlockingList> nblMap = new HashMap<>();
-        int count = 1;
         for (int i = 1; i <= xpdrNetMaps.size(); i++) {
-            LOG.info("XPDr net LCP = {}", xpdrNetMaps.get(i - 1).getLogicalConnectionPoint());
-            LOG.info("XPDr net associated LCP = {}", xpdrNetMaps.get(i - 1).getConnectionMapLcp());
-            TpId tpid1 = new TpId(xpdrNetMaps.get(i - 1).getLogicalConnectionPoint());
-            TpId tpid2 = new TpId(xpdrNetMaps.get(i - 1).getConnectionMapLcp());
-            Set<TpId> tpList = new HashSet<>();
-            tpList.add(tpid1);
-            tpList.add(tpid2);
+            String netLCP = xpdrNetMaps.get(i - 1).getLogicalConnectionPoint();
+            String netAssoLCP = xpdrNetMaps.get(i - 1).getConnectionMapLcp();
+            LOG.info("XPDr net LCP = {}", netLCP);
+            LOG.info("XPDr net associated LCP = {}", netAssoLCP);
             NonBlockingList nbl = new NonBlockingListBuilder()
-                .setNblNumber(Uint16.valueOf(count))
-                .setTpList(tpList)
+                .setNblNumber(Uint16.valueOf(i))
+                .setTpList(new HashSet<>(Set.of(new TpId(netLCP), new TpId(netAssoLCP))))
                 .build();
             nblMap.put(nbl.key(), nbl);
-            count++;
         }
         return new OduSwitchingPoolsBuilder()
             .setNonBlockingList(nblMap)
@@ -1113,39 +1069,27 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
     private OduSwitchingPools createSwtchSwitchPool(
             List<Mapping> xpdrClMaps, List<Mapping> xpdrNetMaps, Integer xpdrNb) {
         Set<TpId> tpl = new HashSet<>();
-        TpId tpId = null;
         for (int i = 1; i <= xpdrClMaps.size(); i++) {
-            tpId = new TpId("XPDR" + xpdrNb + TapiStringConstants.CLIENT + i);
-            tpl.add(tpId);
+            tpl.add(new TpId("XPDR" + xpdrNb + TapiStringConstants.CLIENT + i));
+            tpl.add(new TpId("XPDR" + xpdrNb + TapiStringConstants.NETWORK + i));
         }
-        for (int i = 1; i <= xpdrNetMaps.size(); i++) {
-            tpId = new TpId("XPDR" + xpdrNb + TapiStringConstants.NETWORK + i);
-            tpl.add(tpId);
-        }
-        Map<NonBlockingListKey, NonBlockingList> nbMap = new HashMap<>();
-        NonBlockingList nbl = new NonBlockingListBuilder()
-            .setNblNumber(Uint16.valueOf(1))
-            .setTpList(tpl)
-            .build();
-        nbMap.put(nbl.key(),nbl);
+        NonBlockingList nbl = new NonBlockingListBuilder().setNblNumber(Uint16.valueOf(1)).setTpList(tpl).build();
         return new OduSwitchingPoolsBuilder()
             .setSwitchingPoolNumber(Uint16.valueOf(1))
             .setSwitchingPoolType(SwitchingPoolTypes.NonBlocking)
-            .setNonBlockingList(nbMap)
+            .setNonBlockingList(new HashMap<>(Map.of(nbl.key(),nbl)))
             .build();
     }
 
     private OduSwitchingPools createMuxSwitchPool(List<Mapping> xpdrClMaps, List<Mapping> xpdrNetMaps, Integer xpdrNb) {
         Map<NonBlockingListKey, NonBlockingList> nbMap = new HashMap<>();
         for (int i = 1; i <= xpdrClMaps.size(); i++) {
-            Set<TpId> tpList = new HashSet<>();
-            TpId tpId = new TpId("XPDR" + xpdrNb + TapiStringConstants.CLIENT + i);
-            tpList.add(tpId);
-            tpId = new TpId("XPDR" + xpdrNb + "-NETWORK1");
-            tpList.add(tpId);
             NonBlockingList nbl = new NonBlockingListBuilder()
                 .setNblNumber(Uint16.valueOf(i))
-                .setTpList(tpList)
+                .setTpList(
+                    new HashSet<>(Set.of(
+                        new TpId("XPDR" + xpdrNb + TapiStringConstants.CLIENT + i),
+                        new TpId("XPDR" + xpdrNb + "-NETWORK1"))))
                 .setAvailableInterconnectBandwidth(Uint32.valueOf(xpdrNetMaps.size() * 10L))
                 .setInterconnectBandwidthUnit(Uint32.valueOf(1000000000))
                 .build();
@@ -1168,31 +1112,30 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
         }
         LOG.debug("ONEPL = {}", onepl.values());
         Map<NodeRuleGroupKey, NodeRuleGroup> nodeRuleGroupMap = new HashMap<>();
+        Uuid nodeUuid = new Uuid(
+            UUID.nameUUIDFromBytes((String.join("+", nodeId, TapiStringConstants.DSR)).getBytes(StandardCharsets.UTF_8))
+                .toString());
         int count = 1;
         for (NonBlockingList nbl : oorOduSwitchingPool.nonnullNonBlockingList().values()) {
             LOG.info("Non blocking list = {}", nbl);
             Map<NodeEdgePointKey, NodeEdgePoint> nepList = new HashMap<>();
             for (TpId tp : nbl.getTpList()) {
-                LOG.info("EDOU TP = {}", String.join("+", nodeId, TapiStringConstants.E_ODU, tp.getValue()));
-                LOG.info("DSR TP = {}", String.join("+", nodeId, TapiStringConstants.DSR, tp.getValue()));
-                Uuid tpUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", nodeId,
-                    TapiStringConstants.E_ODU, tp.getValue())).getBytes(StandardCharsets.UTF_8)).toString());
-                Uuid tp1Uuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", nodeId,
-                    TapiStringConstants.DSR, tp.getValue())).getBytes(StandardCharsets.UTF_8)).toString());
+                String tpUuidSd = String.join("+", nodeId, TapiStringConstants.E_ODU, tp.getValue());
+                LOG.info("EDOU TP = {}", tpUuidSd);
+                Uuid tpUuid = new Uuid(UUID.nameUUIDFromBytes(tpUuidSd.getBytes(StandardCharsets.UTF_8)).toString());
+                String tp1UuidSd = String.join("+", nodeId, TapiStringConstants.DSR, tp.getValue());
+                LOG.info("DSR TP = {}", tp1UuidSd);
+                Uuid tp1Uuid = new Uuid(UUID.nameUUIDFromBytes(tp1UuidSd.getBytes(StandardCharsets.UTF_8)).toString());
                 if (onepl.containsKey(new OwnedNodeEdgePointKey(tpUuid))
                         && onepl.containsKey(new OwnedNodeEdgePointKey(tp1Uuid))) {
                     NodeEdgePoint nep1 = new NodeEdgePointBuilder()
                         .setTopologyUuid(this.tapiTopoUuid)
-                        .setNodeUuid(new Uuid(UUID.nameUUIDFromBytes(
-                                (String.join("+", nodeId,TapiStringConstants. DSR)).getBytes(StandardCharsets.UTF_8))
-                            .toString()))
+                        .setNodeUuid(nodeUuid)
                         .setNodeEdgePointUuid(tp1Uuid)
                         .build();
                     NodeEdgePoint nep2 = new NodeEdgePointBuilder()
                         .setTopologyUuid(this.tapiTopoUuid)
-                        .setNodeUuid(new Uuid(UUID.nameUUIDFromBytes(
-                                (String.join("+", nodeId,TapiStringConstants. DSR)).getBytes(StandardCharsets.UTF_8))
-                            .toString()))
+                        .setNodeUuid(nodeUuid)
                         .setNodeEdgePointUuid(tpUuid)
                         .build();
                     nepList.put(nep1.key(), nep1);
@@ -1233,14 +1176,15 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
     }
 
     private String getNodeType(XpdrNodeTypes xponderType) {
-        switch (xponderType.getIntValue()) {
-            //TODO use enum directly
-            case 1:
+        switch (xponderType) {
+            case Tpdr:
                 return OpenroadmNodeType.TPDR.getName();
-            case 2:
+            case Mpdr:
                 return OpenroadmNodeType.MUXPDR.getName();
-            case 3:
+            case Switch:
                 return OpenroadmNodeType.SWITCH.getName();
+            //case Regen:
+            //case RegenUni:
             default:
                 LOG.info("XpdrType {} not supported", xponderType);
                 return null;
@@ -1251,16 +1195,15 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
         // TODO is this merge correct? Should we just merge topology by changing the nodes map??
         // TODO: verify this is correct. Should we identify the context IID with the context UUID??
         LOG.info("Creating tapi node in TAPI topology context");
-        InstanceIdentifier<Topology> topoIID = InstanceIdentifier.builder(Context.class)
-            .augmentation(Context1.class)
-            .child(TopologyContext.class)
-            .child(Topology.class, new TopologyKey(this.tapiTopoUuid))
-            .build();
-
-        Topology topology = new TopologyBuilder().setUuid(this.tapiTopoUuid).setNode(nodeMap).build();
-
         // merge in datastore
-        this.networkTransactionService.merge(LogicalDatastoreType.OPERATIONAL, topoIID, topology);
+        this.networkTransactionService.merge(
+            LogicalDatastoreType.OPERATIONAL,
+            InstanceIdentifier.builder(Context.class)
+                .augmentation(Context1.class)
+                .child(TopologyContext.class)
+                .child(Topology.class, new TopologyKey(this.tapiTopoUuid))
+                .build(),
+            new TopologyBuilder().setUuid(this.tapiTopoUuid).setNode(nodeMap).build());
         try {
             this.networkTransactionService.commit().get();
         } catch (InterruptedException | ExecutionException e) {
@@ -1273,15 +1216,15 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
         // TODO is this merge correct? Should we just merge topology by changing the nodes map??
         // TODO: verify this is correct. Should we identify the context IID with the context UUID??
         LOG.info("Creating tapi node in TAPI topology context");
-        InstanceIdentifier<Topology> topoIID = InstanceIdentifier.builder(Context.class)
-            .augmentation(Context1.class).child(TopologyContext.class)
-            .child(Topology.class, new TopologyKey(this.tapiTopoUuid))
-            .build();
-
-        Topology topology = new TopologyBuilder().setUuid(this.tapiTopoUuid).setLink(linkMap).build();
-
         // merge in datastore
-        this.networkTransactionService.merge(LogicalDatastoreType.OPERATIONAL, topoIID, topology);
+        this.networkTransactionService.merge(
+            LogicalDatastoreType.OPERATIONAL,
+            InstanceIdentifier.builder(Context.class)
+                .augmentation(Context1.class)
+                .child(TopologyContext.class)
+                .child(Topology.class, new TopologyKey(this.tapiTopoUuid))
+                .build(),
+            new TopologyBuilder().setUuid(this.tapiTopoUuid).setLink(linkMap).build());
         try {
             this.networkTransactionService.commit().get();
         } catch (InterruptedException | ExecutionException e) {
@@ -1294,12 +1237,11 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
         // TODO is this merge correct? Should we just merge topology by changing the nodes map??
         // TODO: verify this is correct. Should we identify the context IID with the context UUID??
         try {
-            ContextBuilder contextBuilder = new ContextBuilder();
-            contextBuilder.setServiceInterfacePoint(sips);
-            InstanceIdentifier<Context> contextIID = InstanceIdentifier.builder(Context.class).build();
             // merge in datastore
             this.networkTransactionService.merge(
-                LogicalDatastoreType.OPERATIONAL, contextIID, contextBuilder.build());
+                LogicalDatastoreType.OPERATIONAL,
+                InstanceIdentifier.builder(Context.class).build(),
+                new ContextBuilder().setServiceInterfacePoint(sips).build());
             this.networkTransactionService.commit().get();
             LOG.info("TAPI SIPs merged successfully.");
         } catch (InterruptedException | ExecutionException e) {
@@ -1308,12 +1250,15 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
     }
 
     private void deleteLinkFromTopo(Uuid linkUuid) {
-        // TODO: check if this IID is correct
         try {
-            InstanceIdentifier<Link> linkIID = InstanceIdentifier.builder(Context.class)
-                .augmentation(Context1.class).child(TopologyContext.class).child(Topology.class,
-                    new TopologyKey(this.tapiTopoUuid)).child(Link.class, new LinkKey(linkUuid)).build();
-            this.networkTransactionService.delete(LogicalDatastoreType.OPERATIONAL, linkIID);
+            this.networkTransactionService.delete(
+                LogicalDatastoreType.OPERATIONAL,
+                // TODO: check if this IID is correct
+                InstanceIdentifier.builder(Context.class)
+                    .augmentation(Context1.class)
+                    .child(TopologyContext.class)
+                    .child(Topology.class, new TopologyKey(this.tapiTopoUuid))
+                    .child(Link.class, new LinkKey(linkUuid)).build());
             this.networkTransactionService.commit().get();
             LOG.info("TAPI link deleted successfully.");
         } catch (InterruptedException | ExecutionException e) {
@@ -1322,12 +1267,15 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
     }
 
     private void deleteNodeFromTopo(Uuid nodeUuid) {
-        // TODO: check if this IID is correct
         try {
-            InstanceIdentifier<Node> nodeIDD = InstanceIdentifier.builder(Context.class)
-                .augmentation(Context1.class).child(TopologyContext.class).child(Topology.class,
-                    new TopologyKey(this.tapiTopoUuid)).child(Node.class, new NodeKey(nodeUuid)).build();
-            this.networkTransactionService.delete(LogicalDatastoreType.OPERATIONAL, nodeIDD);
+            this.networkTransactionService.delete(
+                LogicalDatastoreType.OPERATIONAL,
+                // TODO: check if this IID is correct
+                InstanceIdentifier.builder(Context.class)
+                    .augmentation(Context1.class)
+                    .child(TopologyContext.class)
+                    .child(Topology.class, new TopologyKey(this.tapiTopoUuid))
+                    .child(Node.class, new NodeKey(nodeUuid)).build());
             this.networkTransactionService.commit().get();
             LOG.info("TAPI Node deleted successfully.");
         } catch (InterruptedException | ExecutionException e) {
@@ -1338,9 +1286,11 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
     private void deleteSipFromTopo(Uuid sipUuid) {
         // TODO: check if this IID is correct
         try {
-            InstanceIdentifier<ServiceInterfacePoint> sipIID = InstanceIdentifier.builder(Context.class)
-                    .child(ServiceInterfacePoint.class, new ServiceInterfacePointKey(sipUuid)).build();
-            this.networkTransactionService.delete(LogicalDatastoreType.OPERATIONAL, sipIID);
+            this.networkTransactionService.delete(
+                LogicalDatastoreType.OPERATIONAL,
+                InstanceIdentifier.builder(Context.class)
+                    .child(ServiceInterfacePoint.class, new ServiceInterfacePointKey(sipUuid))
+                    .build());
             this.networkTransactionService.commit().get();
             LOG.info("TAPI SIP deleted successfully.");
         } catch (InterruptedException | ExecutionException e) {
@@ -1350,14 +1300,17 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
 
     private void updateConnectivityServicesState(Uuid sipUuid, String nodeId) {
         // TODO: check if this IID is correct
-        InstanceIdentifier<ConnectivityContext> connectivitycontextIID = InstanceIdentifier.builder(Context.class)
-            .augmentation(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.Context1.class)
-            .child(ConnectivityContext.class)
-            .build();
         ConnectivityContext connContext = null;
         try {
             Optional<ConnectivityContext> optConnContext =
-                this.networkTransactionService.read(LogicalDatastoreType.OPERATIONAL, connectivitycontextIID).get();
+                this.networkTransactionService.read(
+                        LogicalDatastoreType.OPERATIONAL,
+                        InstanceIdentifier.builder(Context.class)
+                            .augmentation(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                                .Context1.class)
+                            .child(ConnectivityContext.class)
+                            .build())
+                    .get();
             if (optConnContext.isEmpty()) {
                 LOG.error("Couldnt retrieve connectivity context from datastore");
                 return;
@@ -1381,12 +1334,12 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
                             .anyMatch(endPoint -> endPoint.getServiceInterfacePoint().getServiceInterfacePointUuid()
                         .equals(sipUuid))) {
                     LOG.info("Service using SIP of node {} identified. Update state of service", nodeId);
-                    ConnectivityService updService = new ConnectivityServiceBuilder(service)
-                        .setAdministrativeState(AdministrativeState.LOCKED)
-                        .setOperationalState(OperationalState.DISABLED)
-                        .setLifecycleState(LifecycleState.PENDINGREMOVAL)
-                        .build();
-                    updateConnectivityService(updService);
+                    updateConnectivityService(
+                        new ConnectivityServiceBuilder(service)
+                            .setAdministrativeState(AdministrativeState.LOCKED)
+                            .setOperationalState(OperationalState.DISABLED)
+                            .setLifecycleState(LifecycleState.PENDINGREMOVAL)
+                            .build());
                 }
             }
         }
@@ -1396,22 +1349,25 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
         }
         for (Connection connection:connMap.values()) {
             if (connection.getName().values().stream().anyMatch(name -> name.getValue().contains(nodeId))) {
-                Connection updConn = new ConnectionBuilder(connection)
-                    .setLifecycleState(LifecycleState.PENDINGREMOVAL)
-                    .setOperationalState(OperationalState.DISABLED)
-                    .build();
-                updateConnection(updConn);
+                updateConnection(
+                    new ConnectionBuilder(connection)
+                        .setLifecycleState(LifecycleState.PENDINGREMOVAL)
+                        .setOperationalState(OperationalState.DISABLED)
+                        .build());
             }
         }
     }
 
     private void updateConnection(Connection updConn) {
-        // TODO: check if this IID is correct
-        InstanceIdentifier<Connection> connectionIID = InstanceIdentifier.builder(Context.class)
+        this.networkTransactionService.merge(
+            LogicalDatastoreType.OPERATIONAL,
+            // TODO: check if this IID is correct
+            InstanceIdentifier.builder(Context.class)
                 .augmentation(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.Context1.class)
-                .child(ConnectivityContext.class).child(Connection.class,
-                        new ConnectionKey(updConn.getUuid())).build();
-        this.networkTransactionService.merge(LogicalDatastoreType.OPERATIONAL, connectionIID, updConn);
+                .child(ConnectivityContext.class)
+                .child(Connection.class, new ConnectionKey(updConn.getUuid()))
+                .build(),
+            updConn);
         try {
             this.networkTransactionService.commit().get();
         } catch (InterruptedException | ExecutionException e) {
@@ -1420,12 +1376,16 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
     }
 
     private void updateConnectivityService(ConnectivityService updService) {
-        // TODO: check if this IID is correct
-        InstanceIdentifier<ConnectivityService> connectivityserviceIID = InstanceIdentifier.builder(Context.class)
-                .augmentation(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.Context1.class)
-                .child(ConnectivityContext.class).child(ConnectivityService.class,
-                        new ConnectivityServiceKey(updService.getUuid())).build();
-        this.networkTransactionService.merge(LogicalDatastoreType.OPERATIONAL, connectivityserviceIID, updService);
+        this.networkTransactionService.merge(
+                LogicalDatastoreType.OPERATIONAL,
+                // TODO: check if this IID is correct
+                InstanceIdentifier.builder(Context.class)
+                    .augmentation(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                        .Context1.class)
+                    .child(ConnectivityContext.class)
+                    .child(ConnectivityService.class, new ConnectivityServiceKey(updService.getUuid()))
+                    .build(),
+                updService);
         try {
             this.networkTransactionService.commit().get();
         } catch (InterruptedException | ExecutionException e) {
@@ -1439,9 +1399,9 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
         Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepMap = new HashMap<>();
         for (Map.Entry<String, TerminationPoint1> entry : tpMap.entrySet()) {
             // Admin and oper state common for all tps
-            OpenroadmTpType tpType = entry.getValue().getTpType();
             // PHOTONIC MEDIA nep
-            LOG.debug("PHOTO NEP = {}", String.join("+", nodeId, nepPhotonicSublayer, entry.getKey()));
+            String nepNameValue = String.join("+", nodeId, nepPhotonicSublayer, entry.getKey());
+            LOG.debug("PHOTO NEP = {}", nepNameValue);
             SupportedCepLayerProtocolQualifierInstancesBuilder sclpqiBd =
                 new SupportedCepLayerProtocolQualifierInstancesBuilder().setNumberOfCepInstances(Uint64.valueOf(1));
             switch (nepPhotonicSublayer) {
@@ -1460,14 +1420,13 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
                 default:
                     break;
             }
-
             List<SupportedCepLayerProtocolQualifierInstances> sclpqiList = new ArrayList<>(List.of(sclpqiBd.build()));
             OwnedNodeEdgePointBuilder onepBd = new OwnedNodeEdgePointBuilder();
             if (!nepPhotonicSublayer.equals(TapiStringConstants.MC)
                     && !nepPhotonicSublayer.equals(TapiStringConstants.OTSI_MC)) {
                 Map<Double,Double> usedFreqMap = new HashMap<>();
                 Map<Double,Double> availableFreqMap = new HashMap<>();
-                switch (tpType) {
+                switch (entry.getValue().getTpType()) {
                     // Whatever is the TP and its type we consider that it is handled in a bidirectional way :
                     // same wavelength(s) used in both direction.
                     case SRGRXPP:
@@ -1482,7 +1441,7 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
                                     + GridConstant.GRANULARITY * GridConstant.EFFECTIVE_BITS * 1E06);
                         } else {
                             LOG.debug("EnteringLOOPcreateOTSiMC & MC with usedFreqMap non empty {} for Node {}, tp {}",
-                                usedFreqMap.toString(), nodeId, tpMap.toString());
+                                usedFreqMap, nodeId, tpMap);
                             onepMap.putAll(populateNepsForRdmNode(nodeId,
                                 new HashMap<>(Map.of(entry.getKey(), entry.getValue())),
                                 true, TapiStringConstants.MC));
@@ -1506,24 +1465,19 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
                 onepBd = tapiFactory.addPhotSpecToRoadmOnep(
                         nodeId, usedFreqMap, availableFreqMap, onepBd, nepPhotonicSublayer);
             }
-            AdminStates admin = entry.getValue().getAdministrativeState();
-            State oper = entry.getValue().getOperationalState();
-            Name nepName = new NameBuilder()
-                .setValueName(nepPhotonicSublayer + "NodeEdgePoint")
-                .setValue(String.join("+", nodeId, nepPhotonicSublayer, entry.getKey()))
-                .build();
+            Name nepName =
+                new NameBuilder().setValueName(nepPhotonicSublayer + "NodeEdgePoint").setValue(nepNameValue).build();
             OwnedNodeEdgePoint onep = onepBd
-                .setUuid(new Uuid(UUID.nameUUIDFromBytes(
-                        (String.join("+", nodeId, nepPhotonicSublayer, entry.getKey()))
-                            .getBytes(Charset.forName("UTF-8")))
-                    .toString()))
+                .setUuid(new Uuid(UUID.nameUUIDFromBytes(nepNameValue.getBytes(Charset.forName("UTF-8"))).toString()))
                 .setLayerProtocolName(LayerProtocolName.PHOTONICMEDIA)
                 .setName(Map.of(nepName.key(), nepName))
                 .setSupportedCepLayerProtocolQualifierInstances(sclpqiList)
                 .setDirection(Direction.BIDIRECTIONAL)
                 .setLinkPortRole(PortRole.SYMMETRIC)
-                .setAdministrativeState(this.tapiLink.setTapiAdminState(admin.getName()))
-                .setOperationalState(this.tapiLink.setTapiOperationalState(oper.getName()))
+                .setAdministrativeState(
+                    this.tapiLink.setTapiAdminState(entry.getValue().getAdministrativeState().getName()))
+                .setOperationalState(
+                    this.tapiLink.setTapiOperationalState(entry.getValue().getOperationalState().getName()))
                 .setLifecycleState(LifecycleState.INSTALLED)
                 .build();
             LOG.debug("ROADMNEPPopulation TapiNetworkModelServiceImpl populate NEP {} for Node {}",
@@ -1559,7 +1513,7 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
             Optional<TerminationPoint> tpOptional =
                 networkTransactionService.read(LogicalDatastoreType.CONFIGURATION, tpIID).get();
             if (tpOptional.isEmpty()) {
-                LOG.error("readMdSal: Error reading tp {} , empty list",tpIID);
+                LOG.error("readMdSal: Error reading tp {} , empty list", tpIID);
                 return null;
             }
             LOG.debug("SUCCES getting LCP TP for NodeId {} TpId {} while creating NEP in TapiNetworkModelServiceImpl",
@@ -1616,8 +1570,8 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
 
     private org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526
             .TerminationPoint1 getNetworkTerminationPoint11FromDatastore(String nodeId, String tpId) {
-        InstanceIdentifier<org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.TerminationPoint1>
-                tpIID = InstanceIdentifier.builder(Networks.class)
+        InstanceIdentifier<org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526
+                .TerminationPoint1> tpIID = InstanceIdentifier.builder(Networks.class)
             .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
             .child(
                 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226