TapiLink creation refactoring
[transportpce.git] / tapi / src / main / java / org / opendaylight / transportpce / tapi / topology / TapiNetworkModelServiceImpl.java
index 37ed3914aac715e3dea3c3d608d4dff72b499557..e94f8293f7f27081b44e55a90889f2b61b5b81cc 100644 (file)
@@ -22,10 +22,14 @@ import java.util.stream.Collectors;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.tapi.R2RTapiLinkDiscovery;
+import org.opendaylight.transportpce.tapi.TapiStringConstants;
+import org.opendaylight.transportpce.tapi.utils.TapiLink;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.mapping.Mapping;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.network.Nodes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.NodeTypes;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.XpdrNodeTypes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev200327.xpdr.odu.switching.pools.OduSwitchingPools;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev200327.xpdr.odu.switching.pools.OduSwitchingPoolsBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev200327.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingList;
@@ -49,10 +53,8 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.switching.pool.types.rev1
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NodeId;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.TpId;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.AdministrativeState;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.CapacityUnit;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Context;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.ContextBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.ForwardingDirection;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.LAYERPROTOCOLQUALIFIER;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.LayerProtocolName;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.LifecycleState;
@@ -62,7 +64,6 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Port
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.TerminationDirection;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.TerminationState;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Uuid;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.capacity.TotalSizeBuilder;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.capacity.pac.AvailableCapacityBuilder;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.capacity.pac.TotalPotentialCapacityBuilder;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.Name;
@@ -82,6 +83,8 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev18121
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.context.ConnectivityContext;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev181210.DIGITALSIGNALTYPE100GigE;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev181210.DIGITALSIGNALTYPE10GigELAN;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev181210.DIGITALSIGNALTYPEGigE;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.odu.rev181210.ODUTYPEODU0;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.odu.rev181210.ODUTYPEODU2;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.odu.rev181210.ODUTYPEODU2E;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.odu.rev181210.ODUTYPEODU4;
@@ -89,14 +92,8 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev181
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev181210.PHOTONICLAYERQUALIFIEROTSi;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.Context1;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.ForwardingRule;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.ProtectionType;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.RestorationPolicy;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.RuleType;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.context.TopologyContext;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.link.NodeEdgePoint;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.link.NodeEdgePointBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.link.NodeEdgePointKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.link.ResilienceTypeBuilder;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.NodeRuleGroup;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.NodeRuleGroupBuilder;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.NodeRuleGroupKey;
@@ -112,7 +109,6 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.no
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.risk.parameter.pac.RiskCharacteristic;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.risk.parameter.pac.RiskCharacteristicBuilder;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Link;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.LinkBuilder;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.LinkKey;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.NodeBuilder;
@@ -124,41 +120,28 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.tr
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.transfer.cost.pac.CostCharacteristicBuilder;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.transfer.timing.pac.LatencyCharacteristic;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.transfer.timing.pac.LatencyCharacteristicBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.validation.pac.ValidationMechanism;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.validation.pac.ValidationMechanismBuilder;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.Uint16;
 import org.opendaylight.yangtools.yang.common.Uint32;
-import org.opendaylight.yangtools.yang.common.Uint64;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
 
     private static final Logger LOG = LoggerFactory.getLogger(TapiNetworkModelServiceImpl.class);
-    private static final String DSR = "DSR";
-    private static final String I_ODU = "iODU";
-    private static final String E_ODU = "eODU";
-    private static final String OTSI = "OTSi";
-    private static final String E_OTSI = "eOTSi";
-    private static final String I_OTSI = "iOTSi";
-    private static final String PHTNC_MEDIA = "PHOTONIC_MEDIA";
-    private static final String MC = "MEDIA_CHANNEL";
-    private static final String OTSI_MC = "OTSi_MEDIA_CHANNEL";
-    private static final String CLIENT = "-CLIENT";
-    private static final String NETWORK = "-NETWORK";
-    private static final String XPDR = "-XPDR";
-    private final Uuid tapiTopoUuid = new Uuid(UUID.nameUUIDFromBytes(TopologyUtils.T0_FULL_MULTILAYER
+    private final Uuid tapiTopoUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER
             .getBytes(Charset.forName("UTF-8"))).toString());
     private final NetworkTransactionService networkTransactionService;
     private Map<ServiceInterfacePointKey, ServiceInterfacePoint> sipMap;
     private final R2RTapiLinkDiscovery linkDiscovery;
+    private final TapiLink tapiLink;
 
     public TapiNetworkModelServiceImpl(final R2RTapiLinkDiscovery linkDiscovery,
-                                       NetworkTransactionService networkTransactionService) {
+                                       NetworkTransactionService networkTransactionService, TapiLink tapiLink) {
         this.networkTransactionService = networkTransactionService;
         this.sipMap = new HashMap<>();
         this.linkDiscovery = linkDiscovery;
+        this.tapiLink = tapiLink;
     }
 
     @Override
@@ -203,6 +186,8 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
             // create tapi Node
             org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node roadmNode =
                     createRoadmTapiNode(orNodeId, onepMap);
+            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
 
@@ -210,12 +195,10 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
             LOG.info("checking if neighbor roadm exists");
             Map<LinkKey, Link> rdm2rdmLinks = this.linkDiscovery.readLLDP(new NodeId(orNodeId), orNodeVersion,
                 this.tapiTopoUuid);
-            mergeNodeinTopology(Map.of(roadmNode.key(), roadmNode));
-            mergeSipsinContext(this.sipMap);
             if (!rdm2rdmLinks.isEmpty()) {
                 mergeLinkinTopology(rdm2rdmLinks);
             }
-
+            LOG.info("TAPI node for or node {} successfully merged", orNodeId);
         } else if (NodeTypes.Xpdr.getIntValue() ==  node.getNodeInfo().getNodeType().getIntValue()) {
             List<Mapping> networkMappings = node.nonnullMapping().values()
                     .stream().filter(k -> k.getLogicalConnectionPoint()
@@ -223,14 +206,14 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
             Map<Integer, String> xpdrMap = new HashMap<>();
             for (Mapping mapping : networkMappings) {
                 Integer xpdrNb = Integer.parseInt(mapping.getLogicalConnectionPoint().split("XPDR")[1].split("-")[0]);
-                String nodeId = node.getNodeId() + XPDR + xpdrNb;
+                String nodeId = node.getNodeId() + TapiStringConstants.XPDR + xpdrNb;
                 if (!xpdrMap.containsKey(xpdrNb)) {
                     List<Mapping> xpdrNetMaps = node.nonnullMapping().values()
-                            .stream().filter(k -> k.getLogicalConnectionPoint()
-                                    .contains("XPDR" + xpdrNb + NETWORK)).collect(Collectors.toList());
+                        .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 + CLIENT)).collect(Collectors.toList());
+                        .stream().filter(k -> k.getLogicalConnectionPoint()
+                            .contains("XPDR" + xpdrNb + TapiStringConstants.CLIENT)).collect(Collectors.toList());
                     xpdrMap.put(xpdrNb, node.getNodeId());
 
                     // create switching pool
@@ -239,49 +222,44 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
 
                     // node transformation
                     Map<NodeKey, Node> nodeMap = new HashMap<>(transformXpdrToTapiNode(
-                        nodeId, xpdrClMaps, xpdrNetMaps, mapping.getXponderType(), oorOduSwitchingPool,
-                        mapping.getSupportedInterfaceCapability()));
-
+                        nodeId, xpdrClMaps, xpdrNetMaps, mapping.getXponderType(), oorOduSwitchingPool));
                     // add nodes and sips to tapi context
                     mergeNodeinTopology(nodeMap);
                     mergeSipsinContext(this.sipMap);
                 }
             }
+            LOG.info("TAPI node for or node {} successfully merged", orNodeId);
         }
         // Device not managed yet
     }
 
     private Map<NodeKey, Node> transformXpdrToTapiNode(String nodeId, List<Mapping> xpdrClMaps,
                                                        List<Mapping> xpdrNetMaps, XpdrNodeTypes xponderType,
-                                                       OduSwitchingPools oorOduSwitchingPool,
-                                                       List<Class<? extends SupportedIfCapability>>
-                                                           supportedInterfaceCapability) {
+                                                       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, DSR))
+        Uuid nodeUuidDsr = new Uuid(UUID.nameUUIDFromBytes((String.join("+", nodeId, TapiStringConstants.DSR))
             .getBytes(Charset.forName("UTF-8"))).toString());
         Name nameDsr = new NameBuilder().setValueName("dsr/odu node name").setValue(
-            String.join("+", nodeId, DSR)).build();
+            String.join("+", nodeId, TapiStringConstants.DSR)).build();
         List<LayerProtocolName> dsrLayerProtocols = Arrays.asList(LayerProtocolName.DSR,
             LayerProtocolName.ODU);
         org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology
             .Node dsrNode = createTapiXpdrNode(Map.of(nameDsr.key(), nameDsr), dsrLayerProtocols,
-            nodeId, nodeUuidDsr, xpdrClMaps, xpdrNetMaps, xponderType, oorOduSwitchingPool,
-            supportedInterfaceCapability);
+            nodeId, nodeUuidDsr, xpdrClMaps, xpdrNetMaps, xponderType, oorOduSwitchingPool);
 
         nodeMap.put(dsrNode.key(), dsrNode);
 
         // node creation [otsi]
         LOG.info("creation of an OTSi node for {}", nodeId);
-        Uuid nodeUuidOtsi = new Uuid(UUID.nameUUIDFromBytes((String.join("+", nodeId, OTSI))
+        Uuid nodeUuidOtsi = new Uuid(UUID.nameUUIDFromBytes((String.join("+", nodeId, TapiStringConstants.OTSI))
             .getBytes(Charset.forName("UTF-8"))).toString());
         Name nameOtsi =  new NameBuilder().setValueName("otsi node name").setValue(
-            String.join("+", nodeId, OTSI)).build();
+            String.join("+", nodeId, TapiStringConstants.OTSI)).build();
         List<LayerProtocolName> otsiLayerProtocols = Arrays.asList(LayerProtocolName.PHOTONICMEDIA);
         org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology
             .Node otsiNode = createTapiXpdrNode(Map.of(nameOtsi.key(), nameOtsi), otsiLayerProtocols,
-            nodeId, nodeUuidOtsi, xpdrClMaps, xpdrNetMaps, xponderType, null,
-            supportedInterfaceCapability);
+            nodeId, nodeUuidOtsi, xpdrClMaps, xpdrNetMaps, xponderType, null);
 
         nodeMap.put(otsiNode.key(), otsiNode);
 
@@ -324,7 +302,8 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
                     continue;
                 }
                 Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> srgNeps =
-                    createRoadmNeps(orNodeId, m.getLogicalConnectionPoint(), true);
+                    createRoadmNeps(orNodeId, m.getLogicalConnectionPoint(), true,
+                            transformOperState(m.getPortOperState()), transformAdminState(m.getPortAdminState()));
                 onepMap.putAll(srgNeps);
             }
         }
@@ -342,7 +321,8 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
                     continue;
                 }
                 Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> degNeps =
-                    createRoadmNeps(orNodeId, m.getLogicalConnectionPoint(), false);
+                    createRoadmNeps(orNodeId, m.getLogicalConnectionPoint(), false,
+                            transformOperState(m.getPortOperState()), transformAdminState(m.getPortAdminState()));
                 onepMap.putAll(degNeps);
             }
         }
@@ -394,8 +374,8 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
         }
         if (nodeId.contains("ROADM")) {
             // Node is in photonic media layer and UUID can be built from nodeId + PHTN_MEDIA
-            Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", nodeId, PHTNC_MEDIA))
-                    .getBytes(Charset.forName("UTF-8"))).toString());
+            Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", nodeId,
+                TapiStringConstants.PHTNC_MEDIA)).getBytes(Charset.forName("UTF-8"))).toString());
             deleteNodeFromTopo(nodeUuid);
         }
         if (nodeId.contains("XPDR") || nodeId.contains("SPDR") || nodeId.contains("MXPDR")) {
@@ -448,8 +428,7 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
 
     private Node createTapiXpdrNode(Map<NameKey, Name> nameMap, List<LayerProtocolName> layerProtocols,
                                     String nodeId, Uuid nodeUuid, List<Mapping> xpdrClMaps, List<Mapping> xpdrNetMaps,
-                                    XpdrNodeTypes xponderType, OduSwitchingPools oorOduSwitchingPool,
-                                    List<Class<? extends SupportedIfCapability>> supportedInterfaceCapability) {
+                                    XpdrNodeTypes xponderType, OduSwitchingPools oorOduSwitchingPool) {
         Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepl = new HashMap<>();
         Map<NodeRuleGroupKey, NodeRuleGroup> nodeRuleGroupList = new HashMap<>();
         Map<RuleKey, Rule> ruleList = new HashMap<>();
@@ -462,13 +441,13 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
         if (layerProtocols.contains(LayerProtocolName.DSR)) {
             // neps for dsr/odu layer
             Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> dsroduNeps =
-                    createXpdrDsrOduNeps(nodeId, xpdrClMaps, xpdrNetMaps, xponderType, supportedInterfaceCapability);
+                    createXpdrDsrOduNeps(nodeId, xpdrClMaps, xpdrNetMaps, xponderType);
             onepl.putAll(dsroduNeps);
             nodeRuleGroupList = createNodeRuleGroupForDsrNode(nodeId, oorOduSwitchingPool, ruleList, onepl);
         } else if (layerProtocols.contains(LayerProtocolName.PHOTONICMEDIA)) {
             // neps for photonic layer
             Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> phtmdNeps =
-                    createXpdrPhtnMdNeps(nodeId, xpdrNetMaps, supportedInterfaceCapability);
+                    createXpdrPhtnMdNeps(nodeId, xpdrNetMaps);
             onepl.putAll(phtmdNeps);
             nodeRuleGroupList = createNodeRuleGroupForOtsiNode(nodeId, xpdrNetMaps, ruleList);
         } else {
@@ -509,70 +488,82 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
     }
 
     private Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> createXpdrPhtnMdNeps(String nodeId,
-            List<Mapping> xpdrNetMaps, List<Class<? extends SupportedIfCapability>> supportedInterfaceCapability) {
+                                                                                List<Mapping> xpdrNetMaps) {
         Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepl = new HashMap<>();
 
         // iNep creation on otsi node
         for (int i = 0; i < xpdrNetMaps.size(); i++) {
             Uuid nepUuid1 = new Uuid(UUID.nameUUIDFromBytes(
-                    (String.join("+", nodeId, I_OTSI, xpdrNetMaps.get(i).getLogicalConnectionPoint()))
-                            .getBytes(Charset.forName("UTF-8")))
-                    .toString());
+                (String.join("+", nodeId, TapiStringConstants.I_OTSI,
+                    xpdrNetMaps.get(i).getLogicalConnectionPoint())).getBytes(Charset.forName("UTF-8"))).toString());
             Name onedName = new NameBuilder()
-                    .setValueName("iNodeEdgePoint")
-                    .setValue(String.join("+", nodeId, I_OTSI, xpdrNetMaps.get(i).getLogicalConnectionPoint()))
-                    .build();
+                .setValueName("iNodeEdgePoint")
+                .setValue(String.join("+", nodeId, TapiStringConstants.I_OTSI,
+                    xpdrNetMaps.get(i).getLogicalConnectionPoint()))
+                .build();
 
             OwnedNodeEdgePoint onep = createNep(nepUuid1, xpdrNetMaps.get(i).getLogicalConnectionPoint(),
-                    Map.of(onedName.key(), onedName), LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA,
-                    true, String.join("+", nodeId, I_OTSI), supportedInterfaceCapability);
+                Map.of(onedName.key(), onedName), LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA,
+                true, String.join("+", nodeId, TapiStringConstants.I_OTSI),
+                xpdrNetMaps.get(i).getSupportedInterfaceCapability(),
+                transformOperState(xpdrNetMaps.get(i).getPortOperState()),
+                transformAdminState(xpdrNetMaps.get(i).getPortAdminState()));
             onepl.put(onep.key(), onep);
         }
         // eNep creation on otsi node
         for (int i = 0; i < xpdrNetMaps.size(); i++) {
             Uuid nepUuid2 = new Uuid(UUID.nameUUIDFromBytes(
-                    (String.join("+", nodeId, E_OTSI, xpdrNetMaps.get(i).getLogicalConnectionPoint()))
-                            .getBytes(Charset.forName("UTF-8"))).toString());
+                (String.join("+", nodeId, TapiStringConstants.E_OTSI,
+                    xpdrNetMaps.get(i).getLogicalConnectionPoint())).getBytes(Charset.forName("UTF-8"))).toString());
             Name onedName = new NameBuilder()
-                    .setValueName("eNodeEdgePoint")
-                    .setValue(String.join("+", nodeId, E_OTSI, xpdrNetMaps.get(i).getLogicalConnectionPoint()))
-                    .build();
+                .setValueName("eNodeEdgePoint")
+                .setValue(String.join("+", nodeId, TapiStringConstants.E_OTSI,
+                    xpdrNetMaps.get(i).getLogicalConnectionPoint()))
+                .build();
 
             OwnedNodeEdgePoint onep = createNep(nepUuid2, xpdrNetMaps.get(i).getLogicalConnectionPoint(),
-                    Map.of(onedName.key(), onedName), LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA,
-                    false, String.join("+", nodeId, E_OTSI), supportedInterfaceCapability);
+                Map.of(onedName.key(), onedName), LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA,
+                false, String.join("+", nodeId, TapiStringConstants.E_OTSI),
+                xpdrNetMaps.get(i).getSupportedInterfaceCapability(),
+                transformOperState(xpdrNetMaps.get(i).getPortOperState()),
+                transformAdminState(xpdrNetMaps.get(i).getPortAdminState()));
             onepl.put(onep.key(), onep);
         }
         // Photonic Media Nep creation on otsi node
         for (int i = 0; i < xpdrNetMaps.size(); i++) {
             Uuid nepUuid3 = new Uuid(UUID.nameUUIDFromBytes(
-                    (String.join("+", nodeId, PHTNC_MEDIA, xpdrNetMaps.get(i).getLogicalConnectionPoint()))
-                            .getBytes(Charset.forName("UTF-8"))).toString());
+                (String.join("+", nodeId, TapiStringConstants.PHTNC_MEDIA,
+                    xpdrNetMaps.get(i).getLogicalConnectionPoint())).getBytes(Charset.forName("UTF-8"))).toString());
             Name onedName = new NameBuilder()
-                    .setValueName("PhotMedNodeEdgePoint")
-                    .setValue(String.join("+", nodeId, PHTNC_MEDIA, xpdrNetMaps.get(i).getLogicalConnectionPoint()))
-                    .build();
+                .setValueName("PhotMedNodeEdgePoint")
+                .setValue(String.join("+", nodeId, TapiStringConstants.PHTNC_MEDIA,
+                    xpdrNetMaps.get(i).getLogicalConnectionPoint()))
+                .build();
 
             OwnedNodeEdgePoint onep = createNep(nepUuid3, xpdrNetMaps.get(i).getLogicalConnectionPoint(),
-                    Map.of(onedName.key(), onedName), LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA,
-                    false, String.join("+", nodeId, PHTNC_MEDIA), supportedInterfaceCapability);
+                Map.of(onedName.key(), onedName), LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA,
+                false, String.join("+", nodeId, TapiStringConstants.PHTNC_MEDIA),
+                xpdrNetMaps.get(i).getSupportedInterfaceCapability(),
+                transformOperState(xpdrNetMaps.get(i).getPortOperState()),
+                transformAdminState(xpdrNetMaps.get(i).getPortAdminState()));
             onepl.put(onep.key(), onep);
         }
         return onepl;
     }
 
     private Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> createXpdrDsrOduNeps(String nodeId, List<Mapping> xpdrClMaps,
-            List<Mapping> xpdrNetMaps, XpdrNodeTypes xponderType,
-            List<Class<? extends SupportedIfCapability>> supportedInterfaceCapability) {
+                                                                                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, DSR, xpdrClMaps.get(i).getLogicalConnectionPoint()));
+            LOG.info("Client NEP = {}", String.join("+", nodeId, TapiStringConstants.DSR,
+                xpdrClMaps.get(i).getLogicalConnectionPoint()));
             Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes(
-                    (String.join("+", nodeId, DSR, xpdrClMaps.get(i).getLogicalConnectionPoint()))
-                            .getBytes(Charset.forName("UTF-8"))).toString());
-            NameBuilder nameBldr = new NameBuilder().setValue(
-                String.join("+", nodeId, DSR, xpdrClMaps.get(i).getLogicalConnectionPoint()));
+                (String.join("+", nodeId, TapiStringConstants.DSR,
+                    xpdrClMaps.get(i).getLogicalConnectionPoint())).getBytes(Charset.forName("UTF-8"))).toString());
+            NameBuilder nameBldr = new NameBuilder().setValue(String.join("+", nodeId,
+                TapiStringConstants.DSR, xpdrClMaps.get(i).getLogicalConnectionPoint()));
             Name name;
             if (OpenroadmNodeType.TPDR.getName().equalsIgnoreCase(xponderType.getName())) {
                 name = nameBldr.setValueName("100G-tpdr").build();
@@ -581,99 +572,123 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
             }
 
             OwnedNodeEdgePoint onep = createNep(nepUuid, xpdrClMaps.get(i).getLogicalConnectionPoint(),
-                    Map.of(name.key(), name), LayerProtocolName.DSR, LayerProtocolName.DSR, true,
-                    String.join("+", nodeId, DSR), supportedInterfaceCapability);
+                Map.of(name.key(), name), LayerProtocolName.DSR, LayerProtocolName.DSR, true,
+                String.join("+", nodeId, TapiStringConstants.DSR),
+                xpdrClMaps.get(i).getSupportedInterfaceCapability(),
+                transformOperState(xpdrClMaps.get(i).getPortOperState()),
+                transformAdminState(xpdrClMaps.get(i).getPortAdminState()));
             onepl.put(onep.key(), onep);
         }
         // network nep creation on I_ODU node
         for (int i = 0; i < xpdrNetMaps.size(); i++) {
-            LOG.info("iODU NEP = {}", String.join("+", nodeId, I_ODU, xpdrNetMaps.get(i).getLogicalConnectionPoint()));
+            LOG.info("iODU NEP = {}", String.join("+", nodeId, TapiStringConstants.I_ODU,
+                xpdrNetMaps.get(i).getLogicalConnectionPoint()));
             Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes(
-                    (String.join("+", nodeId, I_ODU, xpdrNetMaps.get(i).getLogicalConnectionPoint()))
-                            .getBytes(Charset.forName("UTF-8"))).toString());
+                (String.join("+", nodeId, TapiStringConstants.I_ODU,
+                    xpdrNetMaps.get(i).getLogicalConnectionPoint())).getBytes(Charset.forName("UTF-8"))).toString());
             Name onedName = new NameBuilder()
-                    .setValueName("iNodeEdgePoint_N")
-                    .setValue(String.join("+", nodeId, I_ODU, xpdrNetMaps.get(i).getLogicalConnectionPoint()))
-                    .build();
+                .setValueName("iNodeEdgePoint_N")
+                .setValue(String.join("+", nodeId, TapiStringConstants.I_ODU,
+                    xpdrNetMaps.get(i).getLogicalConnectionPoint()))
+                .build();
 
             OwnedNodeEdgePoint onep = createNep(nepUuid, xpdrNetMaps.get(i).getLogicalConnectionPoint(),
-                    Map.of(onedName.key(), onedName),
-                    LayerProtocolName.ODU, LayerProtocolName.DSR, false,
-                    String.join("+", nodeId, I_ODU), supportedInterfaceCapability);
+                Map.of(onedName.key(), onedName),
+                LayerProtocolName.ODU, LayerProtocolName.DSR, false,
+                String.join("+", nodeId, TapiStringConstants.I_ODU),
+                xpdrNetMaps.get(i).getSupportedInterfaceCapability(),
+                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 < xpdrNetMaps.size(); i++) {
-            LOG.info("eODU NEP = {}", String.join("+", nodeId, E_ODU, xpdrNetMaps.get(i).getLogicalConnectionPoint()));
+            LOG.info("eODU NEP = {}", String.join("+", nodeId, TapiStringConstants.E_ODU,
+                xpdrNetMaps.get(i).getLogicalConnectionPoint()));
             Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes(
-                    (String.join("+", nodeId, E_ODU, xpdrNetMaps.get(i).getLogicalConnectionPoint()))
-                            .getBytes(Charset.forName("UTF-8"))).toString());
+                (String.join("+", nodeId, TapiStringConstants.E_ODU,
+                    xpdrNetMaps.get(i).getLogicalConnectionPoint())).getBytes(Charset.forName("UTF-8"))).toString());
             Name onedName = new NameBuilder()
-                    .setValueName("eNodeEdgePoint_N")
-                    .setValue(String.join("+", nodeId, E_ODU, xpdrNetMaps.get(i).getLogicalConnectionPoint()))
-                    .build();
+                .setValueName("eNodeEdgePoint_N")
+                .setValue(String.join("+", nodeId, TapiStringConstants.E_ODU,
+                    xpdrNetMaps.get(i).getLogicalConnectionPoint()))
+                .build();
 
             OwnedNodeEdgePoint onep = createNep(nepUuid, xpdrNetMaps.get(i).getLogicalConnectionPoint(),
-                    Map.of(onedName.key(), onedName),
-                    LayerProtocolName.ODU, LayerProtocolName.DSR, true,
-                    String.join("+", nodeId, E_ODU), supportedInterfaceCapability);
+                Map.of(onedName.key(), onedName),
+                LayerProtocolName.ODU, LayerProtocolName.DSR, true,
+                String.join("+", nodeId, TapiStringConstants.E_ODU),
+                xpdrNetMaps.get(i).getSupportedInterfaceCapability(),
+                transformOperState(xpdrNetMaps.get(i).getPortOperState()),
+                transformAdminState(xpdrNetMaps.get(i).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;
+    }
+
+    private AdministrativeState transformAdminState(String adminString) {
+        AdminStates adminState = org.opendaylight.transportpce.networkmodel.util.TopologyUtils
+                .setNetworkAdminState(adminString);
+        return adminState.equals(AdminStates.InService) ? AdministrativeState.UNLOCKED : AdministrativeState.LOCKED;
+    }
+
     private OwnedNodeEdgePoint createNep(Uuid nepUuid, String tpid, Map<NameKey, Name> nepNames,
                                          LayerProtocolName nepProtocol, LayerProtocolName nodeProtocol, boolean withSip,
                                          String keyword,
-                                         List<Class<? extends SupportedIfCapability>> supportedInterfaceCapability) {
+                                         List<Class<? extends SupportedIfCapability>> supportedInterfaceCapability,
+                                         OperationalState operState, AdministrativeState adminState) {
         OwnedNodeEdgePointBuilder onepBldr = new OwnedNodeEdgePointBuilder()
                 .setUuid(nepUuid)
                 .setLayerProtocolName(nepProtocol)
                 .setName(nepNames);
         if (withSip) {
             onepBldr.setMappedServiceInterfacePoint(createMSIP(1, nepProtocol, tpid, keyword,
-                    supportedInterfaceCapability));
+                    supportedInterfaceCapability, operState, adminState));
         }
         LOG.debug("Node layer {}", nodeProtocol.getName());
         onepBldr.setSupportedCepLayerProtocolQualifier(createSupportedLayerProtocolQualifier(
                 supportedInterfaceCapability, nodeProtocol));
         onepBldr.setLinkPortDirection(PortDirection.BIDIRECTIONAL).setLinkPortRole(PortRole.SYMMETRIC)
-                .setAdministrativeState(AdministrativeState.UNLOCKED).setOperationalState(OperationalState.ENABLED)
+                .setAdministrativeState(adminState).setOperationalState(operState)
                 .setLifecycleState(LifecycleState.INSTALLED).setTerminationDirection(TerminationDirection.BIDIRECTIONAL)
                 .setTerminationState(TerminationState.TERMINATEDBIDIRECTIONAL);
         return onepBldr.build();
     }
 
     private Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> createRoadmNeps(String orNodeId, String tpId,
-                                                                           boolean withSip) {
+                                                                           boolean withSip, OperationalState operState,
+                                                                           AdministrativeState adminState) {
         Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepMap = new HashMap<>();
         // PHOTONIC MEDIA nep
-        Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", orNodeId, PHTNC_MEDIA, tpId))
-                .getBytes(Charset.forName("UTF-8")))
-                .toString());
+        Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", orNodeId,
+                TapiStringConstants.PHTNC_MEDIA, tpId)).getBytes(Charset.forName("UTF-8"))).toString());
         Name nepName = new NameBuilder()
-                .setValueName("NodeEdgePoint name")
-                .setValue(String.join("+", orNodeId, PHTNC_MEDIA, tpId))
+                .setValueName(TapiStringConstants.PHTNC_MEDIA + "NodeEdgePoint")
+                .setValue(String.join("+", orNodeId, TapiStringConstants.PHTNC_MEDIA, tpId))
                 .build();
-        OwnedNodeEdgePointBuilder onepBldr = new OwnedNodeEdgePointBuilder()
-                .setUuid(nepUuid)
-                .setLayerProtocolName(LayerProtocolName.PHOTONICMEDIA)
-                .setName(Map.of(nepName.key(), nepName))
-                .setSupportedCepLayerProtocolQualifier(List.of(PHOTONICLAYERQUALIFIEROMS.class))
-                .setLinkPortDirection(PortDirection.BIDIRECTIONAL).setLinkPortRole(PortRole.SYMMETRIC)
-                .setAdministrativeState(AdministrativeState.UNLOCKED).setOperationalState(OperationalState.ENABLED)
-                .setLifecycleState(LifecycleState.INSTALLED).setTerminationDirection(TerminationDirection.BIDIRECTIONAL)
-                .setTerminationState(TerminationState.TERMINATEDBIDIRECTIONAL);
-        OwnedNodeEdgePoint onep = onepBldr.build();
+        OwnedNodeEdgePoint onep = new OwnedNodeEdgePointBuilder()
+            .setUuid(nepUuid)
+            .setLayerProtocolName(LayerProtocolName.PHOTONICMEDIA)
+            .setName(Map.of(nepName.key(), nepName))
+            .setSupportedCepLayerProtocolQualifier(List.of(PHOTONICLAYERQUALIFIEROMS.class))
+            .setLinkPortDirection(PortDirection.BIDIRECTIONAL).setLinkPortRole(PortRole.SYMMETRIC)
+            .setAdministrativeState(adminState).setOperationalState(operState)
+            .setLifecycleState(LifecycleState.INSTALLED).setTerminationDirection(TerminationDirection.BIDIRECTIONAL)
+            .setTerminationState(TerminationState.TERMINATEDBIDIRECTIONAL)
+            .build();
         onepMap.put(onep.key(), onep);
 
         // MC nep
-        Uuid nepUuid1 = new Uuid(UUID.nameUUIDFromBytes((String.join("+", orNodeId, MC, tpId))
-                .getBytes(Charset.forName("UTF-8")))
-                .toString());
+        Uuid nepUuid1 = new Uuid(UUID.nameUUIDFromBytes((String.join("+", orNodeId,
+                TapiStringConstants.MC, tpId)).getBytes(Charset.forName("UTF-8"))).toString());
         Name nepName1 = new NameBuilder()
-                .setValueName("NodeEdgePoint name")
-                .setValue(String.join("+", orNodeId, MC, tpId))
+                .setValueName(TapiStringConstants.MC + "NodeEdgePoint")
+                .setValue(String.join("+", orNodeId, TapiStringConstants.MC, tpId))
                 .build();
         OwnedNodeEdgePointBuilder onepBldr1 = new OwnedNodeEdgePointBuilder()
                 .setUuid(nepUuid1)
@@ -681,41 +696,43 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
                 .setName(Map.of(nepName1.key(), nepName1))
                 .setSupportedCepLayerProtocolQualifier(List.of(PHOTONICLAYERQUALIFIEROMS.class))
                 .setLinkPortDirection(PortDirection.BIDIRECTIONAL).setLinkPortRole(PortRole.SYMMETRIC)
-                .setAdministrativeState(AdministrativeState.UNLOCKED).setOperationalState(OperationalState.ENABLED)
+                .setAdministrativeState(adminState).setOperationalState(operState)
                 .setLifecycleState(LifecycleState.INSTALLED).setTerminationDirection(TerminationDirection.BIDIRECTIONAL)
                 .setTerminationState(TerminationState.TERMINATEDBIDIRECTIONAL);
         if (withSip) {
             onepBldr1.setMappedServiceInterfacePoint(createMSIP(1, LayerProtocolName.PHOTONICMEDIA,
-                    tpId, String.join("+", orNodeId, MC), null));
+                tpId, String.join("+", orNodeId, TapiStringConstants.MC), null,
+                operState, adminState));
         }
         OwnedNodeEdgePoint onep1 = onepBldr1.build();
         onepMap.put(onep1.key(), onep1);
 
         // OTSiMC nep
-        Uuid nepUuid2 = new Uuid(UUID.nameUUIDFromBytes((String.join("+", orNodeId, OTSI_MC, tpId))
-                .getBytes(Charset.forName("UTF-8")))
-                .toString());
+        Uuid nepUuid2 = new Uuid(UUID.nameUUIDFromBytes((String.join("+", orNodeId, TapiStringConstants.OTSI_MC,
+                tpId)).getBytes(Charset.forName("UTF-8"))).toString());
         Name nepName2 = new NameBuilder()
-                .setValueName("NodeEdgePoint name")
-                .setValue(String.join("+", orNodeId, OTSI_MC, tpId))
+                .setValueName(TapiStringConstants.OTSI_MC + "NodeEdgePoint")
+                .setValue(String.join("+", orNodeId, TapiStringConstants.OTSI_MC, tpId))
                 .build();
-        OwnedNodeEdgePointBuilder onepBldr2 = new OwnedNodeEdgePointBuilder()
-                .setUuid(nepUuid2)
-                .setLayerProtocolName(LayerProtocolName.PHOTONICMEDIA)
-                .setName(Map.of(nepName2.key(), nepName2))
-                .setSupportedCepLayerProtocolQualifier(List.of(PHOTONICLAYERQUALIFIEROMS.class))
-                .setLinkPortDirection(PortDirection.BIDIRECTIONAL).setLinkPortRole(PortRole.SYMMETRIC)
-                .setAdministrativeState(AdministrativeState.UNLOCKED).setOperationalState(OperationalState.ENABLED)
-                .setLifecycleState(LifecycleState.INSTALLED).setTerminationDirection(TerminationDirection.BIDIRECTIONAL)
-                .setTerminationState(TerminationState.TERMINATEDBIDIRECTIONAL);
-        OwnedNodeEdgePoint onep2 = onepBldr2.build();
+
+        OwnedNodeEdgePoint onep2 = new OwnedNodeEdgePointBuilder()
+            .setUuid(nepUuid2)
+            .setLayerProtocolName(LayerProtocolName.PHOTONICMEDIA)
+            .setName(Map.of(nepName2.key(), nepName2))
+            .setSupportedCepLayerProtocolQualifier(List.of(PHOTONICLAYERQUALIFIEROMS.class))
+            .setLinkPortDirection(PortDirection.BIDIRECTIONAL).setLinkPortRole(PortRole.SYMMETRIC)
+            .setAdministrativeState(adminState).setOperationalState(operState)
+            .setLifecycleState(LifecycleState.INSTALLED).setTerminationDirection(TerminationDirection.BIDIRECTIONAL)
+            .setTerminationState(TerminationState.TERMINATEDBIDIRECTIONAL)
+            .build();
         onepMap.put(onep2.key(), onep2);
         return onepMap;
     }
 
-    private Map<MappedServiceInterfacePointKey, MappedServiceInterfacePoint> createMSIP(int nb,
-                                            LayerProtocolName layerProtocol, String tpid, String nodeid,
-                                            List<Class<? extends SupportedIfCapability>> supportedInterfaceCapability) {
+    private Map<MappedServiceInterfacePointKey, MappedServiceInterfacePoint>
+            createMSIP(int nb, LayerProtocolName layerProtocol, String tpid, String nodeid,
+                   List<Class<? extends SupportedIfCapability>> supportedInterfaceCapability,
+                   OperationalState operState, AdministrativeState adminState) {
         Map<MappedServiceInterfacePointKey, MappedServiceInterfacePoint> msipl = new HashMap<>();
         for (int i = 0; i < nb; i++) {
             Uuid sipUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", "SIP", nodeid,
@@ -723,7 +740,8 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
             MappedServiceInterfacePoint msip = new MappedServiceInterfacePointBuilder()
                     .setServiceInterfacePointUuid(sipUuid).build();
             org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.tapi.context.ServiceInterfacePoint sip
-                    = createSIP(sipUuid, layerProtocol, tpid, nodeid, supportedInterfaceCapability);
+                    = createSIP(sipUuid, layerProtocol, tpid, nodeid, supportedInterfaceCapability,
+                    operState, adminState);
             this.sipMap.put(sip.key(), sip);
             LOG.info("SIP created {}", sip.getUuid());
             // this.tapiSips.put(sip.key(), sip);
@@ -733,7 +751,8 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
     }
 
     private ServiceInterfacePoint createSIP(Uuid sipUuid, LayerProtocolName layerProtocol, String tpid, String nodeid,
-                                            List<Class<? extends SupportedIfCapability>> supportedInterfaceCapability) {
+                                            List<Class<? extends SupportedIfCapability>> supportedInterfaceCapability,
+                                            OperationalState operState, AdministrativeState adminState) {
         // TODO: what value should be set in total capacity and available capacity
         LOG.info("SIP name = {}", String.join("+", nodeid, tpid));
         Name sipName = new NameBuilder()
@@ -744,8 +763,8 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
                 .setUuid(sipUuid)
                 .setName(Map.of(sipName.key(), sipName))
                 .setLayerProtocolName(layerProtocol)
-                .setAdministrativeState(AdministrativeState.UNLOCKED)
-                .setOperationalState(OperationalState.ENABLED)
+                .setAdministrativeState(adminState)
+                .setOperationalState(operState)
                 .setLifecycleState(LifecycleState.INSTALLED)
                 .setAvailableCapacity(new AvailableCapacityBuilder().build())
                 .setTotalPotentialCapacity(new TotalPotentialCapacityBuilder().build())
@@ -758,10 +777,10 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
             createRoadmTapiNode(String orNodeId, Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> oneplist) {
         // UUID
         Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", orNodeId,
-            PHTNC_MEDIA)).getBytes(Charset.forName("UTF-8"))).toString());
+            TapiStringConstants.PHTNC_MEDIA)).getBytes(Charset.forName("UTF-8"))).toString());
         // Names
         Name nodeNames =  new NameBuilder().setValueName("roadm node name")
-            .setValue(String.join("+", orNodeId, PHTNC_MEDIA)).build();
+            .setValue(String.join("+", orNodeId, TapiStringConstants.PHTNC_MEDIA)).build();
         // Protocol Layer
         List<LayerProtocolName> layerProtocols = Arrays.asList(LayerProtocolName.PHOTONICMEDIA);
         // Empty random creation of mandatory fields for avoiding errors....
@@ -785,7 +804,7 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
             .setOperationalState(OperationalState.ENABLED)
             .setLifecycleState(LifecycleState.INSTALLED)
             .setOwnedNodeEdgePoint(oneplist)
-            .setNodeRuleGroup(createNodeRuleGroupForRdmNode(nodeUuid, oneplist.values()))
+            .setNodeRuleGroup(createNodeRuleGroupForRdmNode(orNodeId, nodeUuid, oneplist.values()))
             .setCostCharacteristic(Map.of(costCharacteristic.key(), costCharacteristic))
             .setLatencyCharacteristic(Map.of(latencyCharacteristic.key(), latencyCharacteristic))
             .setErrorCharacteristic("error")
@@ -797,7 +816,7 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
             .build();
     }
 
-    private Map<NodeRuleGroupKey, NodeRuleGroup> createNodeRuleGroupForRdmNode(Uuid nodeUuid,
+    private Map<NodeRuleGroupKey, NodeRuleGroup> createNodeRuleGroupForRdmNode(String orNodeId, Uuid nodeUuid,
                                                                                Collection<OwnedNodeEdgePoint> onepl) {
         Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group.NodeEdgePointKey,
                 org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group.NodeEdgePoint>
@@ -806,7 +825,7 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
             org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group.NodeEdgePoint
                     nep = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group
                     .NodeEdgePointBuilder()
-                    .setTopologyUuid(tapiTopoUuid)
+                    .setTopologyUuid(this.tapiTopoUuid)
                     .setNodeUuid(nodeUuid)
                     .setNodeEdgePointUuid(onep.key().getUuid())
                     .build();
@@ -821,7 +840,7 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
                 .build();
         ruleList.put(rule.key(), rule);
         NodeRuleGroup nodeRuleGroup = new NodeRuleGroupBuilder()
-                .setUuid(new Uuid(UUID.nameUUIDFromBytes(("rdm infra node rule group")
+                .setUuid(new Uuid(UUID.nameUUIDFromBytes((orNodeId + " node rule group")
                         .getBytes(Charset.forName("UTF-8"))).toString()))
                 .setRule(ruleList)
                 .setNodeEdgePoint(nepMap)
@@ -834,85 +853,13 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
                                                            Uuid nodeUuidOtsi) {
         Map<LinkKey, Link> linkMap = new HashMap<>();
         for (Mapping mapping : xpdrNetMaps) {
-            Map<NodeEdgePointKey, NodeEdgePoint> nepList = new HashMap<>();
-            String sourceKey = String.join("+", nodeId, I_ODU, mapping.getLogicalConnectionPoint());
-            Uuid sourceUuidTp = new Uuid(UUID.nameUUIDFromBytes(
-                    (String.join("+", nodeId, I_ODU, mapping.getLogicalConnectionPoint()))
-                            .getBytes(Charset.forName("UTF-8"))).toString());
-            String destKey = String.join("+", nodeId, I_OTSI, mapping.getLogicalConnectionPoint());
-            Uuid destUuidTp = new Uuid(UUID.nameUUIDFromBytes(
-                    (String.join("+", nodeId, I_OTSI, mapping.getLogicalConnectionPoint()))
-                            .getBytes(Charset.forName("UTF-8"))).toString());
-            NodeEdgePoint sourceNep = new NodeEdgePointBuilder()
-                    .setTopologyUuid(this.tapiTopoUuid)
-                    .setNodeUuid(nodeUuidDsr)
-                    .setNodeEdgePointUuid(sourceUuidTp)
-                    .build();
-            nepList.put(sourceNep.key(), sourceNep);
-            NodeEdgePoint destNep = new NodeEdgePointBuilder()
-                    .setTopologyUuid(this.tapiTopoUuid)
-                    .setNodeUuid(nodeUuidOtsi)
-                    .setNodeEdgePointUuid(destUuidTp)
-                    .build();
-            nepList.put(destNep.key(), destNep);
-            Name linkName = new NameBuilder().setValueName("transitional link name")
-                    .setValue(String.join("--",nodeId, sourceKey, destKey))
-                    .build();
-            CostCharacteristic costCharacteristic = new CostCharacteristicBuilder()
-                .setCostAlgorithm("Restricted Shortest Path - RSP")
-                .setCostName("HOP_COUNT")
-                .setCostValue("12345678")
-                .build();
-            LatencyCharacteristic latencyCharacteristic = new LatencyCharacteristicBuilder()
-                .setFixedLatencyCharacteristic("12345678")
-                .setQueingLatencyCharacteristic("12345678")
-                .setJitterCharacteristic("12345678")
-                .setWanderCharacteristic("12345678")
-                .setTrafficPropertyName("FIXED_LATENCY")
-                .build();
-            RiskCharacteristic riskCharacteristic = new RiskCharacteristicBuilder()
-                .setRiskCharacteristicName("risk characteristic")
-                .setRiskIdentifierList(List.of("risk identifier1", "risk identifier2"))
-                .build();
-            ValidationMechanism validationMechanism = new ValidationMechanismBuilder()
-                .setValidationMechanism("validation mechanism")
-                .setValidationRobustness("validation robustness")
-                .setLayerProtocolAdjacencyValidated("layer protocol adjacency")
-                .build();
-            Link transiLink = new LinkBuilder()
-                .setUuid(new Uuid(
-                    UUID.nameUUIDFromBytes((String.join("--", nodeId, sourceKey, destKey))
-                        .getBytes(Charset.forName("UTF-8")))
-                        .toString()))
-                .setName(Map.of(linkName.key(), linkName))
-                .setTransitionedLayerProtocolName(Arrays.asList(LayerProtocolName.ODU.getName(),
-                    LayerProtocolName.PHOTONICMEDIA.getName()))
-                .setNodeEdgePoint(nepList)
-                .setLayerProtocolName(Arrays.asList(LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.ODU))
-                .setDirection(ForwardingDirection.BIDIRECTIONAL)
-                .setAvailableCapacity(new AvailableCapacityBuilder().setTotalSize(
-                    new TotalSizeBuilder().setUnit(CapacityUnit.GBPS).setValue(Uint64.valueOf(100)).build())
-                    .build())
-                .setResilienceType(new ResilienceTypeBuilder().setProtectionType(ProtectionType.NOPROTECTON)
-                    .setRestorationPolicy(RestorationPolicy.NA)
-                    .build())
-                .setAdministrativeState(AdministrativeState.UNLOCKED)
-                .setOperationalState(OperationalState.ENABLED)
-                .setLifecycleState(LifecycleState.INSTALLED)
-                .setTotalPotentialCapacity(new TotalPotentialCapacityBuilder().setTotalSize(
-                    new TotalSizeBuilder().setUnit(CapacityUnit.GBPS).setValue(Uint64.valueOf(100)).build())
-                    .build())
-                .setCostCharacteristic(Map.of(costCharacteristic.key(), costCharacteristic))
-                .setLatencyCharacteristic(Map.of(latencyCharacteristic.key(), latencyCharacteristic))
-                .setRiskCharacteristic(Map.of(riskCharacteristic.key(), riskCharacteristic))
-                .setErrorCharacteristic("error")
-                .setLossCharacteristic("loss")
-                .setRepeatDeliveryCharacteristic("repeat delivery")
-                .setDeliveryOrderCharacteristic("delivery order")
-                .setUnavailableTimeCharacteristic("unavailable time")
-                .setServerIntegrityProcessCharacteristic("server integrity process")
-                .setValidationMechanism(Map.of(validationMechanism.key(), validationMechanism))
-                .build();
+            Link transiLink = tapiLink.createTapiLink(nodeId, mapping.getLogicalConnectionPoint(), nodeId,
+                mapping.getLogicalConnectionPoint(), TapiStringConstants.TRANSITIONAL_LINK, TapiStringConstants.DSR,
+                TapiStringConstants.OTSI, TapiStringConstants.I_ODU, TapiStringConstants.I_OTSI,
+                "inService", "inService", Arrays.asList(LayerProtocolName.ODU,
+                    LayerProtocolName.PHOTONICMEDIA),
+                Arrays.asList(LayerProtocolName.ODU.getName(), LayerProtocolName.PHOTONICMEDIA.getName()),
+                this.tapiTopoUuid);
             linkMap.put(transiLink.key(), transiLink);
         }
         // return a map of links and then we can do merge the corresponding link map into the topology context
@@ -928,11 +875,11 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
         List<TpId> tpl = new ArrayList<>();
         TpId tpId = null;
         for (int i = 1; i <= xpdrClMaps.size(); i++) {
-            tpId = new TpId("XPDR" + xpdrNb + CLIENT + i);
+            tpId = new TpId("XPDR" + xpdrNb + TapiStringConstants.CLIENT + i);
             tpl.add(tpId);
         }
         for (int i = 1; i <= xpdrNetMaps.size(); i++) {
-            tpId = new TpId("XPDR" + xpdrNb + NETWORK + i);
+            tpId = new TpId("XPDR" + xpdrNb + TapiStringConstants.NETWORK + i);
             tpl.add(tpId);
         }
         Map<NonBlockingListKey, NonBlockingList> nbMap = new HashMap<>();
@@ -953,7 +900,7 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
         Map<NonBlockingListKey, NonBlockingList> nbMap = new HashMap<>();
         for (int i = 1; i <= xpdrClMaps.size(); i++) {
             List<TpId> tpList = new ArrayList<>();
-            TpId tpId = new TpId("XPDR" + xpdrNb + CLIENT + i);
+            TpId tpId = new TpId("XPDR" + xpdrNb + TapiStringConstants.CLIENT + i);
             tpList.add(tpId);
             tpId = new TpId("XPDR" + xpdrNb + "-NETWORK1");
             tpList.add(tpId);
@@ -985,24 +932,23 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
             org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group
                     .NodeEdgePoint inep = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210
                     .node.rule.group.NodeEdgePointBuilder()
-                    .setTopologyUuid(tapiTopoUuid)
-                    .setNodeUuid(new Uuid(UUID.nameUUIDFromBytes(
-                            (String.join("+", nodeId, OTSI)).getBytes(Charset.forName("UTF-8")))
-                            .toString()))
-                    .setNodeEdgePointUuid(new Uuid(UUID.nameUUIDFromBytes(
-                            (String.join("+", nodeId, I_OTSI, tpMapping.getLogicalConnectionPoint()))
-                                    .getBytes(Charset.forName("UTF-8"))).toString()))
+                    .setTopologyUuid(this.tapiTopoUuid)
+                    .setNodeUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", nodeId,
+                            TapiStringConstants.OTSI)).getBytes(Charset.forName("UTF-8")))
+                        .toString()))
+                    .setNodeEdgePointUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", nodeId,
+                        TapiStringConstants.I_OTSI, tpMapping.getLogicalConnectionPoint()))
+                        .getBytes(Charset.forName("UTF-8"))).toString()))
                     .build();
             org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group
                     .NodeEdgePoint enep = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210
                     .node.rule.group.NodeEdgePointBuilder()
-                    .setTopologyUuid(tapiTopoUuid)
-                    .setNodeUuid(new Uuid(UUID.nameUUIDFromBytes(
-                            (String.join("+", nodeId, OTSI)).getBytes(Charset.forName("UTF-8")))
-                            .toString()))
+                    .setTopologyUuid(this.tapiTopoUuid)
+                    .setNodeUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", nodeId,
+                        TapiStringConstants.OTSI)).getBytes(Charset.forName("UTF-8"))).toString()))
                     .setNodeEdgePointUuid(new Uuid(UUID.nameUUIDFromBytes(
-                            (String.join("+", nodeId, E_OTSI, tpMapping.getLogicalConnectionPoint()))
-                                    .getBytes(Charset.forName("UTF-8"))).toString()))
+                        (String.join("+", nodeId, TapiStringConstants.E_OTSI,
+                            tpMapping.getLogicalConnectionPoint())).getBytes(Charset.forName("UTF-8"))).toString()))
                     .build();
             nepList.put(inep.key(), inep);
             nepList.put(enep.key(), enep);
@@ -1058,23 +1004,21 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
                 org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group.NodeEdgePoint>
                     nepList = new HashMap<>();
             for (TpId tp : nbl.getTpList()) {
-                LOG.info("EDOU TP = {}", String.join("+", nodeId, E_ODU, tp.getValue()));
-                LOG.info("DSR TP = {}", String.join("+", nodeId, DSR, tp.getValue()));
-                Uuid tpUuid = new Uuid(UUID.nameUUIDFromBytes(
-                        (String.join("+", nodeId, E_ODU, tp.getValue())).getBytes(Charset.forName("UTF-8")))
-                        .toString());
-                Uuid tp1Uuid = new Uuid(UUID.nameUUIDFromBytes(
-                    (String.join("+", nodeId, DSR, tp.getValue())).getBytes(Charset.forName("UTF-8")))
-                    .toString());
+                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(Charset.forName("UTF-8"))).toString());
+                Uuid tp1Uuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", nodeId,
+                    TapiStringConstants.DSR, tp.getValue())).getBytes(Charset.forName("UTF-8"))).toString());
                 if (onepl.containsKey(new OwnedNodeEdgePointKey(tpUuid))
                         || onepl.containsKey(new OwnedNodeEdgePointKey(tp1Uuid))) {
                     org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group.NodeEdgePoint
                         nep = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group
                             .NodeEdgePointBuilder()
-                            .setTopologyUuid(tapiTopoUuid)
+                            .setTopologyUuid(this.tapiTopoUuid)
                             .setNodeUuid(new Uuid(UUID.nameUUIDFromBytes(
-                                    (String.join("+", nodeId, DSR)).getBytes(Charset.forName("UTF-8")))
-                                    .toString()))
+                                (String.join("+", nodeId,TapiStringConstants. DSR))
+                                    .getBytes(Charset.forName("UTF-8"))).toString()))
                             .setNodeEdgePointUuid((tp.getValue().contains("CLIENT")) ? tp1Uuid : tpUuid)
                             .build();
                     nepList.put(nep.key(), nep);
@@ -1133,6 +1077,12 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
                 case "DSR":
                 case "ODU":
                     switch (sic.getIfCapType().getSimpleName()) {
+                        // TODO: it may be needed to add more cases clauses if the interface capabilities of a
+                        //  port are extended in the config file
+                        case "If1GEODU0":
+                            sclpqList.add(ODUTYPEODU0.class);
+                            sclpqList.add(DIGITALSIGNALTYPEGigE.class);
+                            break;
                         case "If10GEODU2e":
                             sclpqList.add(ODUTYPEODU2E.class);
                             sclpqList.add(DIGITALSIGNALTYPE10GigELAN.class);
@@ -1209,10 +1159,10 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
         InstanceIdentifier<Topology> topoIID = InstanceIdentifier.builder(Context.class)
             .augmentation(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.Context1.class)
             .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.context.TopologyContext.class)
-            .child(Topology.class, new TopologyKey(tapiTopoUuid))
+            .child(Topology.class, new TopologyKey(this.tapiTopoUuid))
             .build();
 
-        Topology topology = new TopologyBuilder().setUuid(tapiTopoUuid).setNode(nodeMap).build();
+        Topology topology = new TopologyBuilder().setUuid(this.tapiTopoUuid).setNode(nodeMap).build();
 
         // merge in datastore
         this.networkTransactionService.merge(LogicalDatastoreType.OPERATIONAL, topoIID,
@@ -1222,7 +1172,7 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
         } catch (InterruptedException | ExecutionException e) {
             LOG.error("Error populating TAPI topology: ", e);
         }
-        LOG.info("Roadm Node added succesfully.");
+        LOG.info("Node added succesfully.");
     }
 
     private void mergeLinkinTopology(Map<LinkKey, Link> linkMap) {
@@ -1233,10 +1183,10 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
                 .augmentation(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.Context1.class)
                 .child(org.opendaylight.yang.gen.v1.urn
                         .onf.otcc.yang.tapi.topology.rev181210.context.TopologyContext.class)
-                .child(Topology.class, new TopologyKey(tapiTopoUuid))
+                .child(Topology.class, new TopologyKey(this.tapiTopoUuid))
                 .build();
 
-        Topology topology = new TopologyBuilder().setUuid(tapiTopoUuid).setLink(linkMap).build();
+        Topology topology = new TopologyBuilder().setUuid(this.tapiTopoUuid).setLink(linkMap).build();
 
         // merge in datastore
         this.networkTransactionService.merge(LogicalDatastoreType.OPERATIONAL, topoIID,
@@ -1271,7 +1221,7 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
         try {
             InstanceIdentifier<Link> linkIID = InstanceIdentifier.builder(Context.class)
                 .augmentation(Context1.class).child(TopologyContext.class).child(Topology.class,
-                    new TopologyKey(tapiTopoUuid)).child(Link.class, new LinkKey(linkUuid)).build();
+                    new TopologyKey(this.tapiTopoUuid)).child(Link.class, new LinkKey(linkUuid)).build();
             this.networkTransactionService.delete(LogicalDatastoreType.OPERATIONAL, linkIID);
             this.networkTransactionService.commit().get();
             LOG.info("TAPI link deleted successfully.");
@@ -1285,7 +1235,7 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
         try {
             InstanceIdentifier<Node> nodeIDD = InstanceIdentifier.builder(Context.class)
                 .augmentation(Context1.class).child(TopologyContext.class).child(Topology.class,
-                    new TopologyKey(tapiTopoUuid)).child(Node.class, new NodeKey(nodeUuid)).build();
+                    new TopologyKey(this.tapiTopoUuid)).child(Node.class, new NodeKey(nodeUuid)).build();
             this.networkTransactionService.delete(LogicalDatastoreType.OPERATIONAL, nodeIDD);
             this.networkTransactionService.commit().get();
             LOG.info("TAPI Node deleted successfully.");