Migrate renderer module to Aluminium
[transportpce.git] / renderer / src / main / java / org / opendaylight / transportpce / renderer / NetworkModelWavelengthServiceImpl.java
index a975025040956445346d5bb1d37df469b55588a1..df0dcb7547e54c9ba34a883df343ef0a9e31433a 100644 (file)
@@ -7,68 +7,77 @@
  */
 package org.opendaylight.transportpce.renderer;
 
-import com.google.common.base.Optional;
-import java.util.ArrayList;
+import java.math.BigDecimal;
+import java.util.Collection;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 import java.util.stream.Collectors;
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
-import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.ReadTransaction;
+import org.opendaylight.mdsal.binding.api.WriteTransaction;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.NetworkUtils;
 import org.opendaylight.transportpce.common.Timeouts;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev170929.degree.node.attributes.AvailableWavelengthsKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev170929.degree.used.wavelengths.UsedWavelengths;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev170929.degree.used.wavelengths.UsedWavelengthsBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev170929.degree.used.wavelengths.UsedWavelengthsKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.Node1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.Node1Builder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.TerminationPoint1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.TerminationPoint1Builder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.DegreeAttributes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.DegreeAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.SrgAttributes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.SrgAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.CpAttributes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.CpAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.CtpAttributes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.CtpAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.PpAttributes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.PpAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.RxTtpAttributes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.RxTtpAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.TxTtpAttributes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.TxTtpAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.XpdrClientAttributes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.XpdrClientAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.XpdrNetworkAttributes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.XpdrNetworkAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.XpdrPortAttributes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.XpdrPortAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.pp.attributes.UsedWavelength;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.pp.attributes.UsedWavelengthBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.pp.attributes.UsedWavelengthKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev170929.OpenroadmTpType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev170929.srg.node.attributes.AvailableWavelengthsBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.xponder.rev170929.xpdr.port.connection.attributes.Wavelength;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.xponder.rev170929.xpdr.port.connection.attributes.WavelengthBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev171017.PathDescription;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev171017.path.description.atoz.direction.AToZ;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev171017.path.description.ztoa.direction.ZToA;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev171017.pce.resource.resource.resource.TerminationPoint;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.Network;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NetworkId;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NetworkKey;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NodeId;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.network.Node;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.network.NodeKey;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.TpId;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.node.TerminationPointKey;
+import org.opendaylight.transportpce.common.fixedflex.FixedFlexImpl;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev181130.FrequencyGHz;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev181130.FrequencyTHz;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev181130.degree.node.attributes.AvailableWavelengths;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev181130.degree.node.attributes.AvailableWavelengthsKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev181130.degree.used.wavelengths.UsedWavelengths;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev181130.degree.used.wavelengths.UsedWavelengthsBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev181130.degree.used.wavelengths.UsedWavelengthsKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.TerminationPoint1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.TerminationPoint1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.DegreeAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.DegreeAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.SrgAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.SrgAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.CpAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.CpAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.CtpAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.CtpAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.PpAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.PpAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.RxTtpAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.RxTtpAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.TxTtpAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.TxTtpAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.XpdrClientAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.XpdrNetworkAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.XpdrNetworkAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.XpdrPortAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.XpdrPortAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.pp.attributes.UsedWavelength;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.pp.attributes.UsedWavelengthBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.pp.attributes.UsedWavelengthKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmTpType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev181130.srg.node.attributes.AvailableWavelengthsBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.xponder.rev181130.xpdr.port.connection.attributes.Wavelength;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.xponder.rev181130.xpdr.port.connection.attributes.WavelengthBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev200629.PathDescription;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev200629.path.description.atoz.direction.AToZ;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev200629.path.description.ztoa.direction.ZToA;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev200629.pce.resource.resource.resource.TerminationPoint;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NetworkId;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.Networks;
+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.rev180226.networks.Network;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.NetworkKey;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NodeKey;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.TpId;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPointKey;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder;
+import org.opendaylight.yangtools.yang.common.Uint32;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -83,35 +92,34 @@ public class NetworkModelWavelengthServiceImpl implements NetworkModelWavelength
 
     @Override
     public void useWavelengths(PathDescription pathDescription) {
-
         List<NodeIdPair> atozTpIds = getAToZTpList(pathDescription);
-        List<NodeIdPair> ztoaTpIds = getZToATpList(pathDescription);
-
+        atozTpIds.removeIf(Objects::isNull);
         deleteAvailableWL(atozTpIds.stream().map(NodeIdPair::getNodeID).distinct().collect(Collectors.toList()),
-                pathDescription.getAToZDirection().getAToZWavelengthNumber());
+                pathDescription.getAToZDirection().getAToZWavelengthNumber().toJava());
+        List<NodeIdPair> ztoaTpIds = getZToATpList(pathDescription);
+        ztoaTpIds.removeIf(Objects::isNull);
         deleteAvailableWL(ztoaTpIds.stream().map(NodeIdPair::getNodeID).distinct().collect(Collectors.toList()),
-                pathDescription.getZToADirection().getZToAWavelengthNumber());
-
-        addUsedWL(pathDescription.getAToZDirection().getAToZWavelengthNumber(), atozTpIds);
-        addUsedWL(pathDescription.getZToADirection().getZToAWavelengthNumber(), ztoaTpIds);
+                pathDescription.getZToADirection().getZToAWavelengthNumber().toJava());
+        addUsedWL(pathDescription.getAToZDirection().getAToZWavelengthNumber().toJava(), atozTpIds);
+        addUsedWL(pathDescription.getZToADirection().getZToAWavelengthNumber().toJava(), ztoaTpIds);
     }
 
     @Override
     public void freeWavelengths(PathDescription pathDescription) {
         List<NodeIdPair> atozTpIds = getAToZTpList(pathDescription);
         List<NodeIdPair> ztoaTpIds = getZToATpList(pathDescription);
-
-        deleteUsedWL(pathDescription.getAToZDirection().getAToZWavelengthNumber(), atozTpIds);
-        deleteUsedWL(pathDescription.getZToADirection().getZToAWavelengthNumber(), ztoaTpIds);
-
+        atozTpIds.removeIf(Objects::isNull);
+        ztoaTpIds.removeIf(Objects::isNull);
+        deleteUsedWL(pathDescription.getAToZDirection().getAToZWavelengthNumber().toJava(), atozTpIds);
+        deleteUsedWL(pathDescription.getZToADirection().getZToAWavelengthNumber().toJava(), ztoaTpIds);
         addAvailableWL(atozTpIds.stream().map(NodeIdPair::getNodeID).distinct().collect(Collectors.toList()),
-                pathDescription.getAToZDirection().getAToZWavelengthNumber());
+                pathDescription.getAToZDirection().getAToZWavelengthNumber().toJava());
         addAvailableWL(ztoaTpIds.stream().map(NodeIdPair::getNodeID).distinct().collect(Collectors.toList()),
-                pathDescription.getZToADirection().getZToAWavelengthNumber());
+                pathDescription.getZToADirection().getZToAWavelengthNumber().toJava());
     }
 
     private List<NodeIdPair> getAToZTpList(PathDescription pathDescription) {
-        List<AToZ> atozList = pathDescription.getAToZDirection().getAToZ();
+        Collection<AToZ> atozList = pathDescription.getAToZDirection().nonnullAToZ().values();
         return atozList.stream()
                 .filter(aToZ -> {
                     if ((aToZ.getResource() == null) || (aToZ.getResource().getResource() == null)) {
@@ -121,7 +129,8 @@ public class NetworkModelWavelengthServiceImpl implements NetworkModelWavelength
                     return aToZ.getResource().getResource() instanceof TerminationPoint;
                 }).map(aToZ -> {
                     TerminationPoint tp = (TerminationPoint) aToZ.getResource().getResource();
-                    if ((tp == null) || (tp.getTpNodeId() == null) ||  (tp.getTpId() == null)) {
+                    if ((tp == null) || (tp.getTpNodeId() == null) ||  (tp.getTpId() == null)
+                        || tp.getTpId().isEmpty()) {
                         LOG.warn("Termination point in AToZ node {} contains nulls! Skipping this node!", aToZ.getId());
                         return null;
                     }
@@ -130,7 +139,7 @@ public class NetworkModelWavelengthServiceImpl implements NetworkModelWavelength
     }
 
     private List<NodeIdPair> getZToATpList(PathDescription pathDescription) {
-        List<ZToA> ztoaList = pathDescription.getZToADirection().getZToA();
+        Collection<ZToA> ztoaList = pathDescription.getZToADirection().nonnullZToA().values();
         return ztoaList.stream()
                 .filter(zToA -> {
                     if ((zToA.getResource() == null) || (zToA.getResource().getResource() == null)) {
@@ -140,7 +149,8 @@ public class NetworkModelWavelengthServiceImpl implements NetworkModelWavelength
                     return zToA.getResource().getResource() instanceof TerminationPoint;
                 }).map(zToA -> {
                     TerminationPoint tp = (TerminationPoint) zToA.getResource().getResource();
-                    if ((tp == null) || (tp.getTpNodeId() == null) ||  (tp.getTpId() == null)) {
+                    if ((tp == null) || (tp.getTpNodeId() == null) ||  (tp.getTpId() == null)
+                        || tp.getTpId().isEmpty()) {
                         LOG.warn("Termination point in ZToA node {} contains nulls! Skipping this node!", zToA.getId());
                         return null;
                     }
@@ -150,23 +160,47 @@ public class NetworkModelWavelengthServiceImpl implements NetworkModelWavelength
 
     private InstanceIdentifier<Node1> createNode1IID(String nodeId) {
         return InstanceIdentifier
-                .builder(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
-                .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608
-                        .network.Node.class, new NodeKey(new NodeId(nodeId)))
-                .augmentation(Node1.class)
-                .build();
+                .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.networks.network
+                .Node.class, new NodeKey(new NodeId(nodeId))).augmentation(Node1.class).build();
+    }
+
+    private InstanceIdentifier<org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130
+        .Node1> createNode2IID(String nodeId) {
+        return 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.networks.network
+                .Node.class, new NodeKey(new NodeId(nodeId))).augmentation(org.opendaylight.yang.gen.v1.http.org
+                .openroadm.common.network.rev181130.Node1.class).build();
     }
 
     private Optional<Node1> getNode1FromDatastore(String nodeId) {
         InstanceIdentifier<Node1>
                 nodeIID = createNode1IID(nodeId);
         Optional<Node1> nodeOpt;
-        try (ReadOnlyTransaction nodeReadTx = this.dataBroker.newReadOnlyTransaction()) {
+        try (ReadTransaction nodeReadTx = this.dataBroker.newReadOnlyTransaction()) {
+            nodeOpt = nodeReadTx.read(LogicalDatastoreType.CONFIGURATION, nodeIID)
+                    .get(Timeouts.DATASTORE_READ, TimeUnit.MILLISECONDS);
+        } catch (InterruptedException | ExecutionException | TimeoutException e) {
+            LOG.warn("Exception while getting node from {} topology!", NetworkUtils.OVERLAY_NETWORK_ID, e);
+            nodeOpt = Optional.empty();
+        }
+        return nodeOpt;
+    }
+
+    private Optional<org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130
+        .Node1> getNode2FromDatastore(String nodeId) {
+        InstanceIdentifier<org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1>
+                nodeIID = createNode2IID(nodeId);
+        Optional<org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1> nodeOpt;
+        try (ReadTransaction nodeReadTx = this.dataBroker.newReadOnlyTransaction()) {
             nodeOpt = nodeReadTx.read(LogicalDatastoreType.CONFIGURATION, nodeIID)
                     .get(Timeouts.DATASTORE_READ, TimeUnit.MILLISECONDS);
         } catch (InterruptedException | ExecutionException | TimeoutException e) {
             LOG.warn("Exception while getting node from {} topology!", NetworkUtils.OVERLAY_NETWORK_ID, e);
-            nodeOpt = Optional.absent();
+            nodeOpt = Optional.empty();
         }
         return nodeOpt;
     }
@@ -174,54 +208,67 @@ public class NetworkModelWavelengthServiceImpl implements NetworkModelWavelength
     private void addAvailableWL(List<String> nodeIds, Long wavelengthNumber) {
         WriteTransaction nodeWriteTx = this.dataBroker.newWriteOnlyTransaction();
         for (String nodeId : nodeIds) {
-            Optional<Node1> nodeOpt =
-                    getNode1FromDatastore(nodeId);
-            Node1 node;
-            if (nodeOpt.isPresent()) {
-                node = nodeOpt.get();
+            Optional<Node1> node1Opt = getNode1FromDatastore(nodeId);
+            Node1 node1;
+            Optional<org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1> node2Opt =
+                getNode2FromDatastore(nodeId);
+            org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1 node2;
+            if (node2Opt.isPresent()) {
+                node2 = node2Opt.get();
             } else {
-                LOG.error("Unable to get node {} from topology {}! Skipping addition of available wavelength for this"
-                        + "node.", nodeId, NetworkUtils.OVERLAY_NETWORK_ID);
+                LOG.error("Unable to get common-network node {} from topology {}! Skipping addition of available"
+                    + "wavelength for this node.", nodeId, NetworkUtils.OVERLAY_NETWORK_ID);
+                continue;
+            }
+            if (node1Opt.isPresent()) {
+                node1 = node1Opt.get();
+            } else {
+                LOG.error("Unable to get network-topology node {} from topology {}! Skipping addition of available"
+                    + "wavelength for this node.", nodeId, NetworkUtils.OVERLAY_NETWORK_ID);
                 continue;
             }
 
-            Node1Builder node1Builder = new Node1Builder(node);
-
-            switch (node.getNodeType()) {
+            Node1Builder node1Builder = new Node1Builder(node1);
+            switch (node2.getNodeType()) {
                 case DEGREE:
-                    DegreeAttributes degreeAttributes = node.getDegreeAttributes();
+                    DegreeAttributes degreeAttributes = node1.getDegreeAttributes();
                     DegreeAttributesBuilder degreeAttributesBuilder;
                     if (degreeAttributes == null) {
                         degreeAttributesBuilder = new DegreeAttributesBuilder();
                     } else {
                         degreeAttributesBuilder = new DegreeAttributesBuilder(degreeAttributes);
                     }
-                    List<org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev170929.degree.node.attributes
-                            .AvailableWavelengths> availableDegreeWLs =
-                            degreeAttributesBuilder.getAvailableWavelengths();
-                    if (availableDegreeWLs == null) {
-                        availableDegreeWLs = new ArrayList<>();
-                        degreeAttributesBuilder.setAvailableWavelengths(availableDegreeWLs);
-                    }
-                    availableDegreeWLs.add(new org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev170929.degree
-                            .node.attributes.AvailableWavelengthsBuilder().setIndex(wavelengthNumber).build());
+                    Map<org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev181130
+                            .degree.node.attributes.AvailableWavelengthsKey,
+                        org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev181130
+                            .degree.node.attributes.AvailableWavelengths> availableDegreeWLs = new HashMap<>();
+                    availableDegreeWLs.putAll(degreeAttributesBuilder.getAvailableWavelengths());
+                    AvailableWavelengths availableWaveLength =
+                        new org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev181130.degree.node.attributes
+                            .AvailableWavelengthsBuilder().setIndex(Uint32.valueOf(wavelengthNumber)).build();
+                    availableDegreeWLs.put(availableWaveLength.key(), availableWaveLength);
+                    degreeAttributesBuilder.setAvailableWavelengths(availableDegreeWLs);
                     node1Builder.setDegreeAttributes(degreeAttributesBuilder.build());
                     break;
                 case SRG:
-                    SrgAttributes srgAttributes = node.getSrgAttributes();
+                    SrgAttributes srgAttributes = node1.getSrgAttributes();
                     SrgAttributesBuilder srgAttributesBuilder;
                     if (srgAttributes == null) {
                         srgAttributesBuilder = new SrgAttributesBuilder();
                     } else {
                         srgAttributesBuilder = new SrgAttributesBuilder(srgAttributes);
                     }
-                    List<org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev170929.srg.node.attributes
-                            .AvailableWavelengths> availableSrgWLs = srgAttributesBuilder.getAvailableWavelengths();
-                    if (availableSrgWLs == null) {
-                        availableSrgWLs = new ArrayList<>();
-                        srgAttributesBuilder.setAvailableWavelengths(availableSrgWLs);
-                    }
-                    availableSrgWLs.add(new AvailableWavelengthsBuilder().setIndex(wavelengthNumber).build());
+                    Map<org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev181130.srg.node.attributes
+                        .AvailableWavelengthsKey,
+                        org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev181130.srg.node.attributes
+                        .AvailableWavelengths> availableSrgWLs = new HashMap<>();
+                    availableSrgWLs.putAll(srgAttributesBuilder.getAvailableWavelengths());
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev181130
+                        .srg.node.attributes.AvailableWavelengths aval =
+                            new AvailableWavelengthsBuilder().setIndex(Uint32.valueOf(wavelengthNumber))
+                                    .build();
+                    availableSrgWLs.put(aval.key(),aval);
+                    srgAttributesBuilder.setAvailableWavelengths(availableSrgWLs);
                     node1Builder.setSrgAttributes(srgAttributesBuilder.build());
                     break;
 
@@ -229,10 +276,10 @@ public class NetworkModelWavelengthServiceImpl implements NetworkModelWavelength
                     // TODO skip for now
                     continue;
             }
-            nodeWriteTx.put(LogicalDatastoreType.CONFIGURATION, createNode1IID(nodeId), node1Builder.build(), true);
+            nodeWriteTx.put(LogicalDatastoreType.CONFIGURATION, createNode1IID(nodeId), node1Builder.build());
         }
         try {
-            nodeWriteTx.submit().get(Timeouts.DATASTORE_DELETE, TimeUnit.MILLISECONDS);
+            nodeWriteTx.commit().get(Timeouts.DATASTORE_DELETE, TimeUnit.MILLISECONDS);
         } catch (InterruptedException | ExecutionException | TimeoutException e) {
             LOG.error("Unable to add available WL {} for nodes {}!", wavelengthNumber, String.join(", ", nodeIds), e);
         }
@@ -241,35 +288,39 @@ public class NetworkModelWavelengthServiceImpl implements NetworkModelWavelength
     private void deleteAvailableWL(List<String> nodeIds, Long wavelengthNumber) {
         WriteTransaction nodeWriteTx = this.dataBroker.newWriteOnlyTransaction();
         for (String nodeId : nodeIds) {
-            Optional<Node1> nodeOpt = getNode1FromDatastore(nodeId);
-            Node1 node;
+            Optional<org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1> nodeOpt =
+                getNode2FromDatastore(nodeId);
+            org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1 node;
             if (nodeOpt.isPresent()) {
                 node = nodeOpt.get();
             } else {
-                LOG.error("Unable to get node {} from topology {}! Skipping addition of available wavelength for this"
-                        + "node.", nodeId, NetworkUtils.OVERLAY_NETWORK_ID);
+                LOG.error(
+                    "Unable to get node {} from topology {}! Skipping addition of available wavelength for this node.",
+                         nodeId, NetworkUtils.OVERLAY_NETWORK_ID);
                 continue;
             }
 
-            InstanceIdentifierBuilder<Node1> nodeIIDBuilder = InstanceIdentifier
-                    .builder(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
-                    .child(Node.class, new NodeKey(new NodeId(nodeId))).augmentation(Node1.class);
+            InstanceIdentifierBuilder<Node1> nodeIIDBuilder = InstanceIdentifier.builder(Networks.class)
+                .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
+                .child(Node.class, new NodeKey(new NodeId(nodeId))).augmentation(Node1.class);
             InstanceIdentifier availableWlIID;
 
             switch (node.getNodeType()) {
+            //switch (((org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1) node)
+            //        .getNodeType()) {
                 case DEGREE:
                     availableWlIID = nodeIIDBuilder.child(DegreeAttributes.class)
-                            .child(org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev170929.degree.node
+                            .child(org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev181130.degree.node
                                     .attributes.AvailableWavelengths.class,
-                                    new AvailableWavelengthsKey(wavelengthNumber))
+                                    new AvailableWavelengthsKey(Uint32.valueOf(wavelengthNumber)))
                             .build();
                     break;
                 case SRG:
                     availableWlIID = nodeIIDBuilder.child(SrgAttributes.class)
-                            .child(org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev170929.srg.node.attributes
+                            .child(org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev181130.srg.node.attributes
                                             .AvailableWavelengths.class,
-                                    new org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev170929.srg.node
-                                            .attributes.AvailableWavelengthsKey(wavelengthNumber))
+                                    new org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev181130.srg.node
+                                            .attributes.AvailableWavelengthsKey(Uint32.valueOf(wavelengthNumber)))
                             .build();
                     break;
 
@@ -280,7 +331,7 @@ public class NetworkModelWavelengthServiceImpl implements NetworkModelWavelength
             nodeWriteTx.delete(LogicalDatastoreType.CONFIGURATION, availableWlIID);
         }
         try {
-            nodeWriteTx.submit().get(Timeouts.DATASTORE_DELETE, TimeUnit.MILLISECONDS);
+            nodeWriteTx.commit().get(Timeouts.DATASTORE_DELETE, TimeUnit.MILLISECONDS);
         } catch (InterruptedException | ExecutionException | TimeoutException e) {
             LOG.error("Unable to delete available WL {} for nodes {}!", wavelengthNumber, String.join(", ", nodeIds),
                     e);
@@ -289,25 +340,54 @@ public class NetworkModelWavelengthServiceImpl implements NetworkModelWavelength
 
     private InstanceIdentifierBuilder<TerminationPoint1> createTerminationPoint1IIDBuilder(String nodeId, String tpId) {
         return InstanceIdentifier
-                .builder(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
-                .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.network
-                    .Node.class, new NodeKey(new NodeId(nodeId))).augmentation(
-                org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Node1.class)
-                .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608
-                                .network.node.TerminationPoint.class,
-                        new TerminationPointKey(new TpId(tpId))).augmentation(TerminationPoint1.class);
+                .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.networks.network.Node.class, new NodeKey(new NodeId(nodeId)))
+                .augmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
+                .Node1.class).child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology
+                .rev180226.networks.network.node.TerminationPoint.class, new TerminationPointKey(new TpId(tpId)))
+                .augmentation(TerminationPoint1.class);
+    }
+
+    private InstanceIdentifierBuilder<org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130
+        .TerminationPoint1> createTerminationPoint2IIDBuilder(String nodeId, String tpId) {
+        return 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.networks.network.Node.class, new NodeKey(new NodeId(nodeId)))
+                .augmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
+                .Node1.class).child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology
+                .rev180226.networks.network.node.TerminationPoint.class, new TerminationPointKey(new TpId(tpId)))
+                .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130
+                    .TerminationPoint1.class);
     }
 
     private Optional<TerminationPoint1> getTerminationPoint1FromDatastore(String nodeId, String tpId) {
         InstanceIdentifier<TerminationPoint1> tpIID = createTerminationPoint1IIDBuilder(nodeId, tpId).build();
         Optional<TerminationPoint1> tpOpt;
-        try (ReadOnlyTransaction readTx = this.dataBroker.newReadOnlyTransaction()) {
+        try (ReadTransaction readTx = this.dataBroker.newReadOnlyTransaction()) {
             tpOpt = readTx.read(LogicalDatastoreType.CONFIGURATION, tpIID)
                     .get(Timeouts.DATASTORE_READ, TimeUnit.MILLISECONDS);
         } catch (InterruptedException | ExecutionException | TimeoutException e) {
             LOG.warn("Exception while getting termination point from {} topology!", NetworkUtils.OVERLAY_NETWORK_ID,
                     e);
-            tpOpt = Optional.absent();
+            tpOpt = Optional.empty();
+        }
+        return tpOpt;
+    }
+
+    private Optional<org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130
+        .TerminationPoint1> getTerminationPoint2FromDatastore(String nodeId, String tpId) {
+        InstanceIdentifier<org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130
+            .TerminationPoint1> tpIID = createTerminationPoint2IIDBuilder(nodeId, tpId).build();
+        Optional<org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.TerminationPoint1> tpOpt;
+        try (ReadTransaction readTx = this.dataBroker.newReadOnlyTransaction()) {
+            tpOpt = readTx.read(LogicalDatastoreType.CONFIGURATION, tpIID)
+                    .get(Timeouts.DATASTORE_READ, TimeUnit.MILLISECONDS);
+        } catch (InterruptedException | ExecutionException | TimeoutException e) {
+            LOG.warn("Exception while getting termination point from {} topology!", NetworkUtils.OVERLAY_NETWORK_ID,
+                    e);
+            tpOpt = Optional.empty();
         }
         return tpOpt;
     }
@@ -315,11 +395,14 @@ public class NetworkModelWavelengthServiceImpl implements NetworkModelWavelength
     private void deleteUsedWL(long wavelengthIndex, List<NodeIdPair> tpIds) {
         WriteTransaction deleteUsedWlTx = this.dataBroker.newWriteOnlyTransaction();
         for (NodeIdPair idPair : tpIds) {
-            Optional<TerminationPoint1> tpOpt = getTerminationPoint1FromDatastore(idPair.getNodeID(), idPair.getTpID());
+            Optional<org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130
+                .TerminationPoint1> tp2Opt = getTerminationPoint2FromDatastore(idPair.getNodeID(), idPair.getTpID());
 
             OpenroadmTpType tpType;
-            if (tpOpt.isPresent()) {
-                tpType = tpOpt.get().getTpType();
+            if (tp2Opt.isPresent()) {
+                tpType = tp2Opt.get().getTpType();
+                //    ((org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.TerminationPoint1)
+                //        tpOpt.get()).getTpType();
             } else {
                 LOG.error("Unable to get termination point {} from topology {}! Skipping removal of used wavelength"
                         + " for this node.", idPair.getTpID(), NetworkUtils.OVERLAY_NETWORK_ID);
@@ -332,37 +415,36 @@ public class NetworkModelWavelengthServiceImpl implements NetworkModelWavelength
                 case DEGREETXTTP:
                 case DEGREETXRXTTP:
                     usedWlIID = usedWlIIDBuilder.child(TxTtpAttributes.class).child(UsedWavelengths.class,
-                            new UsedWavelengthsKey(wavelengthIndex)).build();
+                            new UsedWavelengthsKey(Uint32.valueOf(wavelengthIndex))).build();
                     break;
 
                 case DEGREERXTTP:
                     usedWlIID = usedWlIIDBuilder.child(RxTtpAttributes.class).child(UsedWavelengths.class,
-                            new UsedWavelengthsKey(wavelengthIndex)).build();
+                            new UsedWavelengthsKey(Uint32.valueOf(wavelengthIndex))).build();
                     break;
 
                 case DEGREETXCTP:
                 case DEGREERXCTP:
                 case DEGREETXRXCTP:
                     usedWlIID = usedWlIIDBuilder.child(CtpAttributes.class).child(UsedWavelengths.class,
-                            new UsedWavelengthsKey(wavelengthIndex)).build();
+                            new UsedWavelengthsKey(Uint32.valueOf(wavelengthIndex))).build();
                     break;
 
                 case SRGTXCP:
                 case SRGRXCP:
                 case SRGTXRXCP:
                     usedWlIID = usedWlIIDBuilder.child(CpAttributes.class).child(org.opendaylight.yang.gen.v1.http.org
-                                    .openroadm.network.topology.rev170929.network.node.termination.point.cp.attributes
-                                    .UsedWavelengths.class,
-                            new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node
-                                    .termination.point.cp.attributes.UsedWavelengthsKey(
-                                    wavelengthIndex)).build();
+                        .openroadm.network.topology.rev181130.networks.network.node.termination.point.cp.attributes
+                        .UsedWavelengths.class, new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology
+                        .rev181130.networks.network.node.termination.point.cp.attributes
+                        .UsedWavelengthsKey(Uint32.valueOf(wavelengthIndex))).build();
                     break;
 
                 case SRGTXRXPP:
                 case SRGRXPP:
                 case SRGTXPP:
                     usedWlIID = usedWlIIDBuilder.child(PpAttributes.class).child(UsedWavelength.class,
-                            new UsedWavelengthKey(wavelengthIndex)).build();
+                            new UsedWavelengthKey(Uint32.valueOf(wavelengthIndex))).build();
                     break;
 
                 case XPONDERNETWORK:
@@ -382,7 +464,7 @@ public class NetworkModelWavelengthServiceImpl implements NetworkModelWavelength
             deleteUsedWlTx.delete(LogicalDatastoreType.CONFIGURATION, usedWlIID);
         }
         try {
-            deleteUsedWlTx.submit().get(Timeouts.DATASTORE_DELETE, TimeUnit.MILLISECONDS);
+            deleteUsedWlTx.commit().get(Timeouts.DATASTORE_DELETE, TimeUnit.MILLISECONDS);
         } catch (InterruptedException | ExecutionException | TimeoutException e) {
             List<String> tpIdsString = tpIds.stream().map(NodeIdPair::toString).collect(Collectors.toList());
             LOG.error("Unable to delete used WL {} from TPs {}!", wavelengthIndex, String.join(", ", tpIdsString), e);
@@ -391,155 +473,183 @@ public class NetworkModelWavelengthServiceImpl implements NetworkModelWavelength
 
     private void addUsedWL(long wavelengthIndex, List<NodeIdPair> tpIds) {
         WriteTransaction addUsedWlTx = this.dataBroker.newWriteOnlyTransaction();
+        FixedFlexImpl fixedFlex = new FixedFlexImpl(wavelengthIndex);
+        FrequencyTHz centralTHz = new FrequencyTHz(new BigDecimal(fixedFlex.getCenterFrequency()));
         for (NodeIdPair idPair : tpIds) {
-            Optional<TerminationPoint1> tpOpt = getTerminationPoint1FromDatastore(idPair.getNodeID(), idPair.getTpID());
-
-            TerminationPoint1 tp;
-            if (tpOpt.isPresent()) {
-                tp = tpOpt.get();
+            Optional<TerminationPoint1> tp1Opt =
+                getTerminationPoint1FromDatastore(idPair.getNodeID(), idPair.getTpID());
+            TerminationPoint1 tp1 = null;
+            Optional<org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130
+                .TerminationPoint1> tp2Opt = getTerminationPoint2FromDatastore(idPair.getNodeID(), idPair.getTpID());
+            org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.TerminationPoint1 tp2;
+            if (tp2Opt.isPresent()) {
+                tp2 = tp2Opt.get();
             } else {
-                LOG.error("Unable to get termination point {} from topology {}! Skipping removal of used wavelength"
-                        + " for this node.", idPair.getTpID(), NetworkUtils.OVERLAY_NETWORK_ID);
+                LOG.error(
+                    "Unable to get common-network termination point {} from topology {}! Skip removal of used"
+                    + "wavelength for the node", idPair.getTpID(), NetworkUtils.OVERLAY_NETWORK_ID);
                 continue;
             }
+            TerminationPoint1Builder tp1Builder;
+            if (tp1Opt.isPresent()) {
+                tp1 = tp1Opt.get();
+                tp1Builder = new TerminationPoint1Builder(tp1);
+            } else {
+                tp1Builder = new TerminationPoint1Builder();
+            }
 
-            TerminationPoint1Builder tp1Builder = new TerminationPoint1Builder(tp);
-
-            switch (tp.getTpType()) {
+            UsedWavelengths usedWaveLength = new UsedWavelengthsBuilder().setIndex(Uint32.valueOf(wavelengthIndex))
+                .setFrequency(centralTHz).setWidth(FrequencyGHz.getDefaultInstance("40")).build();
+            switch (tp2.getTpType()) {
+            //switch (((org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.TerminationPoint1) tp)
+            //        .getTpType()) {
                 case DEGREETXTTP:
                 case DEGREETXRXTTP:
-                    TxTtpAttributes txTtpAttributes = tp.getTxTtpAttributes();
+                    TxTtpAttributes txTtpAttributes = null;
+                    Map<UsedWavelengthsKey,UsedWavelengths> usedDegreeTxTtpWls;
+                    if (tp1 != null) {
+                        txTtpAttributes = tp1.getTxTtpAttributes();
+                    }
                     TxTtpAttributesBuilder txTtpAttributesBuilder;
+                    usedDegreeTxTtpWls = new HashMap<>();
                     if (txTtpAttributes == null) {
                         txTtpAttributesBuilder = new TxTtpAttributesBuilder();
                     } else {
                         txTtpAttributesBuilder = new TxTtpAttributesBuilder(txTtpAttributes);
+                        usedDegreeTxTtpWls.putAll(txTtpAttributesBuilder.getUsedWavelengths());
                     }
-                    List<UsedWavelengths> usedDegreeTxTtpWls = txTtpAttributesBuilder.getUsedWavelengths();
-                    if (usedDegreeTxTtpWls == null) {
-                        usedDegreeTxTtpWls = new ArrayList<>();
-                        txTtpAttributesBuilder.setUsedWavelengths(usedDegreeTxTtpWls);
-                    }
-                    usedDegreeTxTtpWls.add(new UsedWavelengthsBuilder().setIndex(wavelengthIndex).build());
+                    usedDegreeTxTtpWls.put(usedWaveLength.key(),usedWaveLength);
+                    txTtpAttributesBuilder.setUsedWavelengths(usedDegreeTxTtpWls);
                     tp1Builder.setTxTtpAttributes(txTtpAttributesBuilder.build());
                     break;
 
                 case DEGREERXTTP:
-                    RxTtpAttributes rxTtpAttributes = tp.getRxTtpAttributes();
+                    RxTtpAttributes rxTtpAttributes = null;
+                    Map<UsedWavelengthsKey,UsedWavelengths> usedDegreeRxTtpWls;
+                    if (tp1 != null) {
+                        rxTtpAttributes = tp1.getRxTtpAttributes();
+                    }
                     RxTtpAttributesBuilder rxTtpAttributesBuilder;
+                    usedDegreeRxTtpWls = new HashMap<>();
                     if (rxTtpAttributes == null) {
                         rxTtpAttributesBuilder = new RxTtpAttributesBuilder();
                     } else {
                         rxTtpAttributesBuilder = new RxTtpAttributesBuilder(rxTtpAttributes);
+                        usedDegreeRxTtpWls.putAll(rxTtpAttributesBuilder.getUsedWavelengths());
                     }
-                    List<UsedWavelengths> usedDegreeRxTtpWls = rxTtpAttributesBuilder.getUsedWavelengths();
-                    if (usedDegreeRxTtpWls == null) {
-                        usedDegreeRxTtpWls = new ArrayList<>();
-                        rxTtpAttributesBuilder.setUsedWavelengths(usedDegreeRxTtpWls);
-                    }
-                    usedDegreeRxTtpWls.add(new UsedWavelengthsBuilder().setIndex(wavelengthIndex).build());
+                    usedDegreeRxTtpWls.put(usedWaveLength.key(),usedWaveLength);
+                    rxTtpAttributesBuilder.setUsedWavelengths(usedDegreeRxTtpWls);
                     tp1Builder.setRxTtpAttributes(rxTtpAttributesBuilder.build());
                     break;
 
                 case DEGREETXCTP:
                 case DEGREERXCTP:
                 case DEGREETXRXCTP:
-                    CtpAttributes ctpAttributes = tp.getCtpAttributes();
+                    CtpAttributes ctpAttributes = null;
+                    Map<UsedWavelengthsKey,UsedWavelengths> usedDegreeCtpWls;
+                    if (tp1 != null) {
+                        ctpAttributes = tp1.getCtpAttributes();
+                    }
                     CtpAttributesBuilder ctpAttributesBuilder;
+                    usedDegreeCtpWls = new HashMap<>();
                     if (ctpAttributes == null) {
                         ctpAttributesBuilder = new CtpAttributesBuilder();
                     } else {
                         ctpAttributesBuilder = new CtpAttributesBuilder(ctpAttributes);
+                        usedDegreeCtpWls.putAll(ctpAttributesBuilder.getUsedWavelengths());
                     }
-                    List<UsedWavelengths> usedDegreeCtpWls = ctpAttributesBuilder.getUsedWavelengths();
-                    if (usedDegreeCtpWls == null) {
-                        usedDegreeCtpWls = new ArrayList<>();
-                        ctpAttributesBuilder.setUsedWavelengths(usedDegreeCtpWls);
-                    }
-                    usedDegreeCtpWls.add(new UsedWavelengthsBuilder().setIndex(wavelengthIndex).build());
+                    usedDegreeCtpWls.put(usedWaveLength.key(),usedWaveLength);
+                    ctpAttributesBuilder.setUsedWavelengths(usedDegreeCtpWls);
                     tp1Builder.setCtpAttributes(ctpAttributesBuilder.build());
                     break;
 
                 case SRGTXCP:
                 case SRGRXCP:
                 case SRGTXRXCP:
-                    CpAttributes cpAttributes = tp.getCpAttributes();
+                    CpAttributes cpAttributes = null;
+                    Map<org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network
+                        .node.termination.point.cp.attributes.UsedWavelengthsKey,
+                        org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network
+                        .node.termination.point.cp.attributes.UsedWavelengths> usedDegreeCpWls;
+                    if (tp1 != null) {
+                        cpAttributes = tp1.getCpAttributes();
+                    }
                     CpAttributesBuilder cpAttributesBuilder;
+                    usedDegreeCpWls = new HashMap<>();
                     if (cpAttributes == null) {
                         cpAttributesBuilder = new CpAttributesBuilder();
                     } else {
                         cpAttributesBuilder = new CpAttributesBuilder(cpAttributes);
+                        usedDegreeCpWls.putAll(cpAttributesBuilder.getUsedWavelengths());
                     }
-                    List<org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node
-                            .termination.point.cp.attributes.UsedWavelengths> usedDegreeCpWls =
-                            cpAttributesBuilder.getUsedWavelengths();
-                    if (usedDegreeCpWls == null) {
-                        usedDegreeCpWls = new ArrayList<>();
-                        cpAttributesBuilder.setUsedWavelengths(usedDegreeCpWls);
-                    }
-                    usedDegreeCpWls.add(new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929
-                            .network.node.termination.point.cp.attributes.UsedWavelengthsBuilder()
-                            .setIndex(wavelengthIndex).build());
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks
+                        .network.node.termination.point.cp.attributes.UsedWavelengths cpUsedWaveLength =
+                            new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130
+                                .networks.network.node.termination.point.cp.attributes.UsedWavelengthsBuilder()
+                                .setIndex(Uint32.valueOf(wavelengthIndex))
+                                .setFrequency(centralTHz).setWidth(FrequencyGHz.getDefaultInstance("40")).build();
+                    usedDegreeCpWls.put(cpUsedWaveLength.key(),cpUsedWaveLength);
+                    cpAttributesBuilder.setUsedWavelengths(usedDegreeCpWls);
                     tp1Builder.setCpAttributes(cpAttributesBuilder.build());
                     break;
 
                 case SRGTXRXPP:
                 case SRGRXPP:
                 case SRGTXPP:
-                    PpAttributes ppAttributes = tp.getPpAttributes();
+                    PpAttributes ppAttributes = null;
+                    Map<UsedWavelengthKey, UsedWavelength> usedDegreePpWls;
+                    if (tp1 != null) {
+                        ppAttributes = tp1.getPpAttributes();
+                    }
                     PpAttributesBuilder ppAttributesBuilder;
+                    usedDegreePpWls = new HashMap<>();
                     if (ppAttributes == null) {
                         ppAttributesBuilder = new PpAttributesBuilder();
                     } else {
                         ppAttributesBuilder = new PpAttributesBuilder(ppAttributes);
+                        usedDegreePpWls.putAll(ppAttributesBuilder.getUsedWavelength());
                     }
-                    List<UsedWavelength> usedDegreePpWls = ppAttributesBuilder.getUsedWavelength();
-                    if (usedDegreePpWls == null) {
-                        usedDegreePpWls = new ArrayList<>();
-                        ppAttributesBuilder.setUsedWavelength(usedDegreePpWls);
-                    }
-                    usedDegreePpWls.add(new UsedWavelengthBuilder().setIndex(wavelengthIndex).build());
+                    UsedWavelength usedDegreeWaveLength = new UsedWavelengthBuilder()
+                            .setIndex(Uint32.valueOf(wavelengthIndex))
+                            .setFrequency(centralTHz).setWidth(FrequencyGHz.getDefaultInstance("40")).build();
+                    usedDegreePpWls.put(usedDegreeWaveLength.key(),usedDegreeWaveLength);
+                    ppAttributesBuilder.setUsedWavelength(usedDegreePpWls);
                     tp1Builder.setPpAttributes(ppAttributesBuilder.build());
                     break;
 
                 case XPONDERNETWORK:
-                    XpdrNetworkAttributes xpdrNetworkAttributes = tp.getXpdrNetworkAttributes();
+                    XpdrNetworkAttributes xpdrNetworkAttributes = null;
+                    if (tp1 != null) {
+                        xpdrNetworkAttributes = tp1.getXpdrNetworkAttributes();
+                    }
                     XpdrNetworkAttributesBuilder xpdrNetworkAttributesBuilder;
                     if (xpdrNetworkAttributes == null) {
                         xpdrNetworkAttributesBuilder = new XpdrNetworkAttributesBuilder();
                     } else {
                         xpdrNetworkAttributesBuilder = new XpdrNetworkAttributesBuilder(xpdrNetworkAttributes);
                     }
-                    Wavelength usedXpdrNetworkWl = new WavelengthBuilder().setIndex(wavelengthIndex).build();
-                    tp1Builder.setXpdrNetworkAttributes(xpdrNetworkAttributesBuilder
-                            .setWavelength(usedXpdrNetworkWl)
-                            .build());
+                    Wavelength usedXpdrNetworkWl = new WavelengthBuilder()
+                        .setWidth(FrequencyGHz.getDefaultInstance("40")).setFrequency(centralTHz).build();
+                    tp1Builder.setXpdrNetworkAttributes(xpdrNetworkAttributesBuilder.setWavelength(usedXpdrNetworkWl)
+                        .build());
                     break;
                 case XPONDERCLIENT:
-                    XpdrClientAttributes xpdrClientAttributes = tp.getXpdrClientAttributes();
-                    XpdrClientAttributesBuilder xpdrClientAttributesBuilder;
-                    if (xpdrClientAttributes == null) {
-                        xpdrClientAttributesBuilder = new XpdrClientAttributesBuilder();
-                    } else {
-                        xpdrClientAttributesBuilder = new XpdrClientAttributesBuilder(xpdrClientAttributes);
-                    }
-                    Wavelength usedXpdrClientWl = new WavelengthBuilder().setIndex(wavelengthIndex).build();
-                    tp1Builder.setXpdrClientAttributes(xpdrClientAttributesBuilder
-                            .setWavelength(usedXpdrClientWl)
-                            .build());
                     break;
                 case XPONDERPORT:
-                    XpdrPortAttributes xpdrPortAttributes = tp.getXpdrPortAttributes();
+                    XpdrPortAttributes xpdrPortAttributes = null;
+                    if (tp1 != null) {
+                        xpdrPortAttributes = tp1.getXpdrPortAttributes();
+                    }
                     XpdrPortAttributesBuilder xpdrPortAttributesBuilder;
                     if (xpdrPortAttributes == null) {
                         xpdrPortAttributesBuilder = new XpdrPortAttributesBuilder();
                     } else {
                         xpdrPortAttributesBuilder = new XpdrPortAttributesBuilder(xpdrPortAttributes);
                     }
-                    Wavelength usedXpdrPortWl = new WavelengthBuilder().setIndex(wavelengthIndex).build();
-                    tp1Builder.setXpdrPortAttributes(xpdrPortAttributesBuilder
-                            .setWavelength(usedXpdrPortWl)
-                            .build());
+                    Wavelength usedXpdrPortWl = new WavelengthBuilder().setWidth(FrequencyGHz.getDefaultInstance("40"))
+                        .setFrequency(centralTHz).build();
+                    tp1Builder.setXpdrPortAttributes(xpdrPortAttributesBuilder.setWavelength(usedXpdrPortWl)
+                        .build());
                     break;
 
                 default:
@@ -547,10 +657,10 @@ public class NetworkModelWavelengthServiceImpl implements NetworkModelWavelength
                     continue;
             }
             addUsedWlTx.put(LogicalDatastoreType.CONFIGURATION, createTerminationPoint1IIDBuilder(idPair.getNodeID(),
-                    idPair.getTpID()).build(), tp1Builder.build(), true);
+                    idPair.getTpID()).build(), tp1Builder.build());
         }
         try {
-            addUsedWlTx.submit().get(Timeouts.DATASTORE_WRITE, TimeUnit.MILLISECONDS);
+            addUsedWlTx.commit().get(Timeouts.DATASTORE_WRITE, TimeUnit.MILLISECONDS);
         } catch (InterruptedException | ExecutionException | TimeoutException e) {
             List<String> tpIdsString = tpIds.stream().map(NodeIdPair::toString).collect(Collectors.toList());
             LOG.error("Unable to add used WL {} for TPs {}!", wavelengthIndex, String.join(", ", tpIdsString), e);