X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=renderer%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Ftransportpce%2Frenderer%2FNetworkModelWavelengthServiceImpl.java;h=df0dcb7547e54c9ba34a883df343ef0a9e31433a;hb=e3438cad213946cd76a73219876487c30024dfae;hp=a975025040956445346d5bb1d37df469b55588a1;hpb=c8ee06305ef3e445b10ff207a220c7d5b40a8e3c;p=transportpce.git diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/NetworkModelWavelengthServiceImpl.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/NetworkModelWavelengthServiceImpl.java index a97502504..df0dcb754 100644 --- a/renderer/src/main/java/org/opendaylight/transportpce/renderer/NetworkModelWavelengthServiceImpl.java +++ b/renderer/src/main/java/org/opendaylight/transportpce/renderer/NetworkModelWavelengthServiceImpl.java @@ -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 atozTpIds = getAToZTpList(pathDescription); - List 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 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 atozTpIds = getAToZTpList(pathDescription); List 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 getAToZTpList(PathDescription pathDescription) { - List atozList = pathDescription.getAToZDirection().getAToZ(); + Collection 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 getZToATpList(PathDescription pathDescription) { - List ztoaList = pathDescription.getZToADirection().getZToA(); + Collection 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 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 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 getNode1FromDatastore(String nodeId) { InstanceIdentifier nodeIID = createNode1IID(nodeId); Optional 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 getNode2FromDatastore(String nodeId) { + InstanceIdentifier + nodeIID = createNode2IID(nodeId); + Optional 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 nodeIds, Long wavelengthNumber) { WriteTransaction nodeWriteTx = this.dataBroker.newWriteOnlyTransaction(); for (String nodeId : nodeIds) { - Optional nodeOpt = - getNode1FromDatastore(nodeId); - Node1 node; - if (nodeOpt.isPresent()) { - node = nodeOpt.get(); + Optional node1Opt = getNode1FromDatastore(nodeId); + Node1 node1; + Optional 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 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 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 availableSrgWLs = srgAttributesBuilder.getAvailableWavelengths(); - if (availableSrgWLs == null) { - availableSrgWLs = new ArrayList<>(); - srgAttributesBuilder.setAvailableWavelengths(availableSrgWLs); - } - availableSrgWLs.add(new AvailableWavelengthsBuilder().setIndex(wavelengthNumber).build()); + Map 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 nodeIds, Long wavelengthNumber) { WriteTransaction nodeWriteTx = this.dataBroker.newWriteOnlyTransaction(); for (String nodeId : nodeIds) { - Optional nodeOpt = getNode1FromDatastore(nodeId); - Node1 node; + Optional 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 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 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 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 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 getTerminationPoint1FromDatastore(String nodeId, String tpId) { InstanceIdentifier tpIID = createTerminationPoint1IIDBuilder(nodeId, tpId).build(); Optional 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 getTerminationPoint2FromDatastore(String nodeId, String tpId) { + InstanceIdentifier tpIID = createTerminationPoint2IIDBuilder(nodeId, tpId).build(); + Optional 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 tpIds) { WriteTransaction deleteUsedWlTx = this.dataBroker.newWriteOnlyTransaction(); for (NodeIdPair idPair : tpIds) { - Optional tpOpt = getTerminationPoint1FromDatastore(idPair.getNodeID(), idPair.getTpID()); + Optional 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 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 tpIds) { WriteTransaction addUsedWlTx = this.dataBroker.newWriteOnlyTransaction(); + FixedFlexImpl fixedFlex = new FixedFlexImpl(wavelengthIndex); + FrequencyTHz centralTHz = new FrequencyTHz(new BigDecimal(fixedFlex.getCenterFrequency())); for (NodeIdPair idPair : tpIds) { - Optional tpOpt = getTerminationPoint1FromDatastore(idPair.getNodeID(), idPair.getTpID()); - - TerminationPoint1 tp; - if (tpOpt.isPresent()) { - tp = tpOpt.get(); + Optional tp1Opt = + getTerminationPoint1FromDatastore(idPair.getNodeID(), idPair.getTpID()); + TerminationPoint1 tp1 = null; + Optional 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 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 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 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 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 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 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 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 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 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 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 tpIdsString = tpIds.stream().map(NodeIdPair::toString).collect(Collectors.toList()); LOG.error("Unable to add used WL {} for TPs {}!", wavelengthIndex, String.join(", ", tpIdsString), e);