From 98de423782828b8b44b9cb341a581e1e90a16971 Mon Sep 17 00:00:00 2001 From: manuedelf Date: Tue, 18 Aug 2020 09:12:13 +0200 Subject: [PATCH] Migrate PCE module to Aluminium JIRA: TRNSPRTPCE-292 TRNSPRTPCE-302 Co-authored-by: guillaume.lambert Signed-off-by: guillaume.lambert Change-Id: Ib533555abc85c2bb6b38eed02e01e6513e7afe47 --- pce/pom.xml | 6 + .../transportpce/pce/PcePathDescription.java | 42 ++-- .../pce/constraints/PceConstraintsCalc.java | 6 +- .../transportpce/pce/gnpy/GnpyResult.java | 49 ++-- .../pce/gnpy/GnpyServiceImpl.java | 72 +++--- .../transportpce/pce/gnpy/GnpyTopoImpl.java | 37 ++-- .../pce/gnpy/GnpyUtilitiesImpl.java | 9 +- .../gnpy/ServiceDataStoreOperationsImpl.java | 31 +-- .../pce/networkanalyzer/MapUtils.java | 40 ++-- .../pce/networkanalyzer/PceCalculation.java | 9 +- .../pce/networkanalyzer/PceLink.java | 14 +- .../pce/networkanalyzer/PceOpticalNode.java | 12 +- .../pce/networkanalyzer/PceOtnNode.java | 36 +-- .../service/PathComputationServiceImpl.java | 12 +- .../pce/PcePathDescriptionTests.java | 1 - .../transportpce/pce/gnpy/GnpyStub.java | 3 +- .../pce/gnpy/GnpyUtilitiesImplTest.java | 18 +- .../pce/networkanalyzer/PceLinkTest.java | 65 +++--- .../networkanalyzer/PceOpticalNodeTest.java | 93 ++++---- .../pce/networkanalyzer/PceOtnNodeTest.java | 145 ++++++------ .../PathComputationServiceImplTest.java | 10 +- .../transportpce/pce/utils/JsonUtil.java | 18 +- .../transportpce/pce/utils/NodeUtils.java | 209 ++++++++---------- .../transportpce/pce/utils/PceTestData.java | 73 +++--- .../transportpce/pce/utils/PceTestUtils.java | 16 +- .../pce/utils/TransactionUtils.java | 150 ++++++------- 26 files changed, 580 insertions(+), 596 deletions(-) diff --git a/pce/pom.xml b/pce/pom.xml index 0ac84a94e..b5447d041 100644 --- a/pce/pom.xml +++ b/pce/pom.xml @@ -35,6 +35,12 @@ 1.2.0 + + + org.opendaylight.mdsal + mdsal-binding-runtime-spi + + com.google.code.findbugs diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/PcePathDescription.java b/pce/src/main/java/org/opendaylight/transportpce/pce/PcePathDescription.java index bc15bf50e..b06774591 100644 --- a/pce/src/main/java/org/opendaylight/transportpce/pce/PcePathDescription.java +++ b/pce/src/main/java/org/opendaylight/transportpce/pce/PcePathDescription.java @@ -8,7 +8,7 @@ package org.opendaylight.transportpce.pce; import com.google.common.collect.ImmutableList; -import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import org.opendaylight.transportpce.common.ResponseCodes; @@ -52,7 +52,7 @@ public class PcePathDescription { public PceResult buildDescriptions() { LOG.info("In buildDescriptions: AtoZ = {}", pathAtoZ); - List atozList = new ArrayList<>(); + Map atozList = new HashMap<>(); if (pathAtoZ == null) { rc.setRC(ResponseCodes.RESPONSE_FAILED); LOG.error("In buildDescriptions: there is empty AtoZ path"); @@ -81,7 +81,7 @@ public class PcePathDescription { pathZtoA = ImmutableList.copyOf(pathAtoZ).reverse(); LOG.info("In buildDescriptions: ZtoA {}", pathZtoA); - List ztoaList = new ArrayList<>(); + Map ztoaList = new HashMap<>(); if (pathZtoA == null) { rc.setRC(ResponseCodes.RESPONSE_FAILED); LOG.error("In buildDescriptions: there is empty ZtoA path"); @@ -110,7 +110,7 @@ public class PcePathDescription { return rc; } - private void buildAtoZ(List etoeList, List path) { + private void buildAtoZ(Map atozList, List path) { Integer index = 0; PceLink lastLink = null; AToZ lastResource = null; @@ -125,7 +125,7 @@ public class PcePathDescription { AToZKey clientKey = new AToZKey(index.toString()); Resource clientResource = new ResourceBuilder().setResource(stp).build(); AToZ firstResource = new AToZBuilder().setId(tpName).withKey(clientKey).setResource(clientResource).build(); - etoeList.add(firstResource); + atozList.put(firstResource.key(),firstResource); index += 1; for (PceLink pcelink : path) { String srcName = pcelink.getSourceId().getValue(); @@ -140,7 +140,7 @@ public class PcePathDescription { Resource nodeResource1 = new ResourceBuilder().setResource(sourceNode).build(); AToZ srcResource = new AToZBuilder().setId(srcName).withKey(sourceKey).setResource(nodeResource1).build(); index += 1; - etoeList.add(srcResource); + atozList.put(srcResource.key(),srcResource); // source TP tpName = pcelink.getSourceTP().toString(); @@ -153,7 +153,7 @@ public class PcePathDescription { Resource tpResource1 = new ResourceBuilder().setResource(stp).build(); AToZ stpResource = new AToZBuilder().setId(tpName).withKey(srcTPKey).setResource(tpResource1).build(); index += 1; - etoeList.add(stpResource); + atozList.put(stpResource.key(),stpResource); String linkName = pcelink.getLinkId().getValue(); // Link @@ -167,7 +167,7 @@ public class PcePathDescription { Resource nodeResource2 = new ResourceBuilder().setResource(atozLink).build(); AToZ linkResource = new AToZBuilder().setId(linkName).withKey(linkKey).setResource(nodeResource2).build(); index += 1; - etoeList.add(linkResource); + atozList.put(linkResource.key(),linkResource); String destName = pcelink.getDestId().getValue(); // target TP @@ -181,7 +181,7 @@ public class PcePathDescription { Resource tpResource2 = new ResourceBuilder().setResource(dtp).build(); AToZ ttpResource = new AToZBuilder().setId(tpName).withKey(destTPKey).setResource(tpResource2).build(); index += 1; - etoeList.add(ttpResource); + atozList.put(ttpResource.key(),ttpResource); org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev200629.pce .resource.resource.resource.Node targetNode = new NodeBuilder() @@ -196,7 +196,9 @@ public class PcePathDescription { lastLink = pcelink; } - etoeList.add(lastResource); + if (lastResource != null) { + atozList.put(lastResource.key(),lastResource); + } // build Z side Client TP tpName = lastLink.getClient(); @@ -209,11 +211,11 @@ public class PcePathDescription { clientKey = new AToZKey(index.toString()); clientResource = new ResourceBuilder().setResource(stp).build(); lastResource = new AToZBuilder().setId(tpName).withKey(clientKey).setResource(clientResource).build(); - etoeList.add(lastResource); + atozList.put(lastResource.key(),lastResource); } - private void buildZtoA(List etoelist, List path) { + private void buildZtoA(Map ztoaList, List path) { Integer index = 0; PceLink lastLink = null; ZToA lastResource = null; @@ -229,7 +231,7 @@ public class PcePathDescription { ZToAKey clientKey = new ZToAKey(index.toString()); Resource clientResource = new ResourceBuilder().setResource(stp).build(); ZToA firstResource = new ZToABuilder().setId(tpName).withKey(clientKey).setResource(clientResource).build(); - etoelist.add(firstResource); + ztoaList.put(firstResource.key(),firstResource); index += 1; for (PceLink pcelinkAtoZ : path) { @@ -251,7 +253,7 @@ public class PcePathDescription { Resource nodeResource1 = new ResourceBuilder().setResource(sourceNode).build(); ZToA srcResource = new ZToABuilder().setId(srcName).withKey(sourceKey).setResource(nodeResource1).build(); index += 1; - etoelist.add(srcResource); + ztoaList.put(srcResource.key(),srcResource); // source TP tpName = pcelink.getSourceTP().toString(); @@ -264,7 +266,7 @@ public class PcePathDescription { Resource tpResource1 = new ResourceBuilder().setResource(stp).build(); ZToA stpResource = new ZToABuilder().setId(tpName).withKey(srcTPKey).setResource(tpResource1).build(); index += 1; - etoelist.add(stpResource); + ztoaList.put(stpResource.key(),stpResource); String linkName = pcelink.getLinkId().getValue(); // Link @@ -277,7 +279,7 @@ public class PcePathDescription { Resource nodeResource2 = new ResourceBuilder().setResource(ztoaLink).build(); ZToA linkResource = new ZToABuilder().setId(linkName).withKey(linkKey).setResource(nodeResource2).build(); index += 1; - etoelist.add(linkResource); + ztoaList.put(linkResource.key(),linkResource); String destName = pcelink.getDestId().getValue(); // target TP @@ -290,7 +292,7 @@ public class PcePathDescription { Resource tpResource2 = new ResourceBuilder().setResource(ttp).build(); ZToA ttpResource = new ZToABuilder().setId(tpName).withKey(destTPKey).setResource(tpResource2).build(); index += 1; - etoelist.add(ttpResource); + ztoaList.put(ttpResource.key(),ttpResource); org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev200629.pce @@ -303,7 +305,9 @@ public class PcePathDescription { lastLink = pcelink; } - etoelist.add(lastResource); + if (lastResource != null) { + ztoaList.put(lastResource.key(),lastResource); + } // build Z side Client TP tpName = lastLink.getClient(); @@ -315,7 +319,7 @@ public class PcePathDescription { clientKey = new ZToAKey(index.toString()); clientResource = new ResourceBuilder().setResource(stp).build(); lastResource = new ZToABuilder().setId(tpName).withKey(clientKey).setResource(clientResource).build(); - etoelist.add(lastResource); + ztoaList.put(lastResource.key(),lastResource); } public PceResult getReturnStructure() { diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/constraints/PceConstraintsCalc.java b/pce/src/main/java/org/opendaylight/transportpce/pce/constraints/PceConstraintsCalc.java index 6dc9c089e..371d32524 100644 --- a/pce/src/main/java/org/opendaylight/transportpce/pce/constraints/PceConstraintsCalc.java +++ b/pce/src/main/java/org/opendaylight/transportpce/pce/constraints/PceConstraintsCalc.java @@ -154,7 +154,7 @@ public class PceConstraintsCalc { Include include = tmpGeneral.getInclude(); if (include != null) { - List listHops = include.getOrderedHops(); + List listHops = new ArrayList<>(include.nonnullOrderedHops().values()); if (listHops != null) { readIncludeNodes(listHops, constraints); } @@ -265,7 +265,7 @@ public class PceConstraintsCalc { } private List getAToZNodeList(PathDescription pathDescription) { - List aendToZList = pathDescription.getAToZDirection().getAToZ(); + List aendToZList = new ArrayList<>(pathDescription.getAToZDirection().nonnullAToZ().values()); return aendToZList.stream().filter(aToZ -> { if (aToZ.getResource() == null || aToZ.getResource().getResource() == null) { LOG.warn("Diversity constraint: Resource of AToZ node {} is null! Skipping this node!", aToZ.getId()); @@ -286,7 +286,7 @@ public class PceConstraintsCalc { } private List getSRLGList(PathDescription pathDescription) { - List aendToZList = pathDescription.getAToZDirection().getAToZ(); + List aendToZList = new ArrayList<>(pathDescription.getAToZDirection().nonnullAToZ().values()); return aendToZList.stream().filter(aToZ -> { if (aToZ.getResource() == null || aToZ.getResource().getResource() == null) { diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/gnpy/GnpyResult.java b/pce/src/main/java/org/opendaylight/transportpce/pce/gnpy/GnpyResult.java index fc1480cdd..dd483c6ba 100644 --- a/pce/src/main/java/org/opendaylight/transportpce/pce/gnpy/GnpyResult.java +++ b/pce/src/main/java/org/opendaylight/transportpce/pce/gnpy/GnpyResult.java @@ -8,7 +8,6 @@ package org.opendaylight.transportpce.pce.gnpy; -//import com.google.common.base.Preconditions; import com.google.gson.stream.JsonReader; import java.io.ByteArrayInputStream; import java.io.IOException; @@ -17,6 +16,7 @@ import java.io.InputStreamReader; import java.math.BigDecimal; import java.nio.charset.StandardCharsets; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; @@ -25,10 +25,10 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Optional; import javax.annotation.Nonnull; +import org.opendaylight.binding.runtime.api.BindingRuntimeContext; +import org.opendaylight.binding.runtime.spi.BindingRuntimeHelpers; import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer; -import org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry; -import org.opendaylight.mdsal.binding.generator.impl.ModuleInfoBackedContext; -import org.opendaylight.mdsal.binding.generator.util.BindingRuntimeContext; +import org.opendaylight.mdsal.binding.dom.codec.impl.BindingCodecContext; import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections; import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.Result; import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.explicit.route.hop.type.NumUnnumHop; @@ -53,6 +53,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types. import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.YangModuleInfo; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.Uint16; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; @@ -83,17 +84,14 @@ public class GnpyResult { public GnpyResult(String gnpyResponseString, GnpyTopoImpl gnpyTopo) throws GnpyException, Exception { this.mapNodeRefIp = gnpyTopo.getMapNodeRefIp(); // Create the schema context - final ModuleInfoBackedContext moduleContext = ModuleInfoBackedContext.create(); - Iterable moduleInfos; - - moduleInfos = Collections.singleton(BindingReflections.getModuleInfo(Result.class)); - moduleContext.addModuleInfos(moduleInfos); - SchemaContext schemaContext = moduleContext.tryToCreateSchemaContext().get(); + Collection moduleInfos = Collections.singleton(BindingReflections + .getModuleInfo(Result.class)); + BindingRuntimeHelpers.createEffectiveModel(moduleInfos); // Create the binding binding normalized node codec registry - BindingRuntimeContext bindingRuntimeContext = BindingRuntimeContext.create(moduleContext, schemaContext); - final BindingNormalizedNodeCodecRegistry codecRegistry = - new BindingNormalizedNodeCodecRegistry(bindingRuntimeContext); + BindingRuntimeContext bindingContext = + BindingRuntimeHelpers.createRuntimeContext(); + final BindingNormalizedNodeSerializer codecRegistry = new BindingCodecContext(bindingContext); // Create the data object QName pathQname = QName.create("gnpy:path", "2020-02-02", "result"); @@ -118,9 +116,8 @@ public class GnpyResult { } else { throw new GnpyException("In GnpyResult: the codec registry from the normalized node is null"); } - List responses = null; - responses = ((Result) dataObject).getResponse(); - if (responses == null) { + List responses = new ArrayList<>(((Result) dataObject).nonnullResponse().values()); + if (responses.isEmpty()) { throw new GnpyException("In GnpyResult: the response from GNpy is null!"); } LOG.info("The response id is {}; ", responses.get(0).getResponseId()); @@ -151,7 +148,8 @@ public class GnpyResult { if (((noPathType.equals("NO_FEASIBLE_BAUDRATE_WITH_SPACING")) && (noPathType.equals("NO_FEASIBLE_MODE"))) && ((noPathType.equals("MODE_NOT_FEASIBLE")) && (noPathType.equals("NO_SPECTRUM")))) { - List pathMetricList = noPathCase.getNoPath().getPathProperties().getPathMetric(); + Collection pathMetricList = noPathCase.getNoPath() + .getPathProperties().nonnullPathMetric().values(); LOG.info("GNPy : path is not feasible : {}", noPathType); for (PathMetric pathMetric : pathMetricList) { String metricType = pathMetric.getMetricType().getSimpleName(); @@ -162,7 +160,8 @@ public class GnpyResult { } else if (response.getResponseType() instanceof PathCase) { LOG.info("GNPy : path is feasible"); PathCase pathCase = (PathCase) response.getResponseType(); - List pathMetricList = pathCase.getPathProperties().getPathMetric(); + Collection pathMetricList = pathCase + .getPathProperties().nonnullPathMetric().values(); // Path metrics for (PathMetric pathMetric : pathMetricList) { String metricType = pathMetric.getMetricType().getSimpleName(); @@ -197,7 +196,8 @@ public class GnpyResult { .ordered.constraints.sp.hop.type.hop.type.Node node = new NodeBuilder().setNodeId(nodeId) .build(); HopType hopType = new HopTypeBuilder().setHopType(node).build(); - OrderedHops orderedHops = new OrderedHopsBuilder().setHopNumber(counter).setHopType(hopType) + OrderedHops orderedHops = new OrderedHopsBuilder() + .setHopNumber(Uint16.valueOf(counter)).setHopType(hopType) .build(); orderedHopsList.add(orderedHops); counter++; @@ -246,14 +246,9 @@ public class GnpyResult { } private SchemaContext getSchemaContext(Class objectClass) throws GnpyException, Exception { - - final ModuleInfoBackedContext moduleContext = ModuleInfoBackedContext.create(); - Iterable moduleInfos; - SchemaContext schemaContext = null; - moduleInfos = Collections.singleton(BindingReflections.getModuleInfo(objectClass)); - moduleContext.addModuleInfos(moduleInfos); - schemaContext = moduleContext.tryToCreateSchemaContext().get(); - return schemaContext; + Collection moduleInfos = Collections.singleton(BindingReflections + .getModuleInfo(objectClass)); + return BindingRuntimeHelpers.createEffectiveModel(moduleInfos); } /** diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/gnpy/GnpyServiceImpl.java b/pce/src/main/java/org/opendaylight/transportpce/pce/gnpy/GnpyServiceImpl.java index 5add47d5d..39f406313 100644 --- a/pce/src/main/java/org/opendaylight/transportpce/pce/gnpy/GnpyServiceImpl.java +++ b/pce/src/main/java/org/opendaylight/transportpce/pce/gnpy/GnpyServiceImpl.java @@ -15,10 +15,12 @@ import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; +import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.transportpce.pce.constraints.PceConstraints; import org.opendaylight.transportpce.pce.constraints.PceConstraints.ResourcePair; import org.opendaylight.yang.gen.v1.gnpy.gnpy.network.topology.rev181214.topo.Elements; +import org.opendaylight.yang.gen.v1.gnpy.gnpy.network.topology.rev181214.topo.ElementsKey; import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.RouteIncludeEro; import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.TeHopType; import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.TeNodeId; @@ -37,8 +39,10 @@ import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.path.route.objects.Expli import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.path.route.objects.ExplicitRouteObjectsBuilder; import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.path.route.objects.explicit.route.objects.RouteObjectIncludeExclude; import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.path.route.objects.explicit.route.objects.RouteObjectIncludeExcludeBuilder; +import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.path.route.objects.explicit.route.objects.RouteObjectIncludeExcludeKey; import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.service.PathRequest; import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.service.PathRequestBuilder; +import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.service.PathRequestKey; import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.synchronization.info.Synchronization; import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.synchronization.info.SynchronizationBuilder; import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.synchronization.info.synchronization.Svec; @@ -76,15 +80,15 @@ public class GnpyServiceImpl { //Convert THz to Hz private static final double CONVERT_TH_HZ = 1e12; - private List pathRequest = new ArrayList<>(); + private Map pathRequest = new HashMap<>(); private List synchronization = new ArrayList<>(); private Map mapDisgNodeRefNode = new HashMap<>(); private Map mapNodeRefIp = new HashMap<>(); private Map> mapLinkFiber = new HashMap<>(); private Map mapFiberIp = new HashMap<>(); private List trxList = new ArrayList<>(); - private List elements = new ArrayList<>(); - private List routeObjectIncludeExcludes = new ArrayList<>(); + private Map elements = new HashMap<>(); + private Map routeObjectIncludeExcludes = new HashMap<>(); private IpAddress currentNodeIpAddress = null; /* @@ -122,8 +126,9 @@ public class GnpyServiceImpl { } } - private List extractPathRequest(PathComputationRequestInput input, AToZDirection atoz, Long requestId, - PceConstraints pceHardConstraints) throws GnpyException { + private Map extractPathRequest( + PathComputationRequestInput input, AToZDirection atoz, Long requestId, + PceConstraints pceHardConstraints) throws GnpyException { // Create the source and destination nodes String sourceNode = input.getServiceAEnd().getNodeId(); @@ -133,8 +138,8 @@ public class GnpyServiceImpl { } // Create explicitRouteObjects - List listAtoZ = atoz.getAToZ(); - if (listAtoZ != null) { + List listAtoZ = new ArrayList<>(atoz.nonnullAToZ().values()); + if (!listAtoZ.isEmpty()) { extractRouteObjectIcludeAtoZ(listAtoZ); } else { extractHardConstraints(pceHardConstraints); @@ -149,20 +154,21 @@ public class GnpyServiceImpl { PathConstraints pathConstraints = createPathConstraints(atoz.getRate().toJava(), atozWavelength); // Create the path request - List pathRequestList = new ArrayList<>(); - PathRequest pathRequestEl = new PathRequestBuilder().setRequestId(requestId) + Map pathRequestMap = new HashMap<>(); + PathRequest pathRequestEl = new PathRequestBuilder().setRequestId(Uint32.valueOf(requestId)) .setSource(this.mapNodeRefIp.get(sourceNode)).setDestination(this.mapNodeRefIp.get(destNode)) .setSrcTpId("srcTpId".getBytes(StandardCharsets.UTF_8)) .setDstTpId("dstTpId".getBytes(StandardCharsets.UTF_8)) .setBidirectional(false).setPathConstraints(pathConstraints).setPathConstraints(pathConstraints) .setExplicitRouteObjects(explicitRouteObjects).build(); - pathRequestList.add(pathRequestEl); + pathRequestMap.put(pathRequestEl.key(),pathRequestEl); LOG.debug("In GnpyServiceImpl: path request AToZ is extracted"); - return pathRequestList; + return pathRequestMap; } - private List extractPathRequest(PathComputationRequestInput input, ZToADirection ztoa, Long requestId, - PceConstraints pceHardConstraints) throws GnpyException { + private Map extractPathRequest( + PathComputationRequestInput input, ZToADirection ztoa, Long requestId, + PceConstraints pceHardConstraints) throws GnpyException { // Create the source and destination nodes String sourceNode = input.getServiceZEnd().getNodeId(); String destNode = input.getServiceAEnd().getNodeId(); @@ -170,8 +176,8 @@ public class GnpyServiceImpl { throw new GnpyException("In GnpyServiceImpl: source and destination should be transmitter nodes"); } // Create explicitRouteObjects - List listZtoA = ztoa.getZToA(); - if (listZtoA != null) { + @NonNull List listZtoA = new ArrayList<>(ztoa.nonnullZToA().values()); + if (!listZtoA.isEmpty()) { extractRouteObjectIcludeZtoA(listZtoA); } else { extractHardConstraints(pceHardConstraints); @@ -186,31 +192,31 @@ public class GnpyServiceImpl { PathConstraints pathConstraints = createPathConstraints(ztoa.getRate().toJava(), ztoaWavelength); // Create the path request - List pathRequestList = new ArrayList<>(); - PathRequest pathRequestEl = new PathRequestBuilder().setRequestId(requestId) + Map pathRequestMap = new HashMap<>(); + PathRequest pathRequestEl = new PathRequestBuilder().setRequestId(Uint32.valueOf(requestId)) .setSource(this.mapNodeRefIp.get(sourceNode)).setDestination(this.mapNodeRefIp.get(destNode)) .setSrcTpId("srcTpId".getBytes(StandardCharsets.UTF_8)) .setDstTpId("dstTpId".getBytes(StandardCharsets.UTF_8)) .setBidirectional(false).setPathConstraints(pathConstraints) .setExplicitRouteObjects(explicitRouteObjects).build(); - pathRequestList.add(pathRequestEl); + pathRequestMap.put(pathRequestEl.key(),pathRequestEl); LOG.debug("In GnpyServiceImpl: path request ZToA is extracted"); - return pathRequestList; + return pathRequestMap; } //Extract RouteObjectIncludeExclude list in the case of pre-computed path A-to-Z private void extractRouteObjectIcludeAtoZ(List listAtoZ) throws GnpyException { Long index = 0L; - for (int i = 0; i < listAtoZ.size(); i++) { - index = createResource(listAtoZ.get(i).getResource().getResource(),index); + for (AToZ entry : listAtoZ) { + index = createResource(entry.getResource().getResource(),index); } } //Extract RouteObjectIncludeExclude list in the case of pre-computed path Z-to-A - private void extractRouteObjectIcludeZtoA(List listZtoA) throws GnpyException { + private void extractRouteObjectIcludeZtoA(@NonNull List listZtoA) throws GnpyException { Long index = 0L; - for (int i = 0; i < listZtoA.size(); i++) { - index = createResource(listZtoA.get(i).getResource().getResource(),index); + for (ZToA entry : listZtoA) { + index = createResource(entry.getResource().getResource(),index); } } @@ -280,13 +286,13 @@ public class GnpyServiceImpl { throw new GnpyException(String.format("In gnpyServiceImpl : NodeRef %s does not exist", nodeRef)); } - for (Elements element : this.elements) { + for (Elements element : this.elements.values()) { if (element.getUid().contains(ipAddress.getIpv4Address().getValue())) { if ((this.currentNodeIpAddress == null) || (!this.currentNodeIpAddress.equals(ipAddress))) { this.currentNodeIpAddress = ipAddress; RouteObjectIncludeExclude routeObjectIncludeExclude = addRouteObjectIncludeExclude(ipAddress, Uint32.valueOf(1),idx); - routeObjectIncludeExcludes.add(routeObjectIncludeExclude); + routeObjectIncludeExcludes.put(routeObjectIncludeExclude.key(),routeObjectIncludeExclude); idx += 1; } return idx; @@ -317,7 +323,7 @@ public class GnpyServiceImpl { } RouteObjectIncludeExclude routeObjectIncludeExclude = addRouteObjectIncludeExclude(fiberIp, Uint32.valueOf(1),idx); - routeObjectIncludeExcludes.add(routeObjectIncludeExclude); + routeObjectIncludeExcludes.put(routeObjectIncludeExclude.key(),routeObjectIncludeExclude); idx += 1; } return idx; @@ -335,7 +341,7 @@ public class GnpyServiceImpl { Type type1 = new NumUnnumHopBuilder().setNumUnnumHop(numUnnumHop).build(); // Create routeObjectIncludeExclude element return new RouteObjectIncludeExcludeBuilder() - .setIndex(index).setExplicitRouteUsage(RouteIncludeEro.class).setType(type1).build(); + .setIndex(Uint32.valueOf(index)).setExplicitRouteUsage(RouteIncludeEro.class).setType(type1).build(); } //Create the path constraints @@ -346,13 +352,11 @@ public class GnpyServiceImpl { double freq = (MAX_CENTRAL_FREQ - FIX_CH * (wavelengthNumber - 1)); freqNdex = (int) Math.round((freq - FLEX_CENTRAL_FREQ) / SLOT_BW); } - List effectiveFreqSlot = new ArrayList<>(); EffectiveFreqSlot effectiveFreqSlot1 = new EffectiveFreqSlotBuilder().setM(NB_SLOT_BW).setN(freqNdex).build(); - effectiveFreqSlot.add(effectiveFreqSlot1); // Create Te-Bandwidth TeBandwidth teBandwidth = new TeBandwidthBuilder().setPathBandwidth(new BigDecimal(rate)) .setTechnology("flexi-grid").setTrxType("openroadm-beta1") - .setTrxMode("W100G").setEffectiveFreqSlot(effectiveFreqSlot) + .setTrxMode("W100G").setEffectiveFreqSlot(Map.of(effectiveFreqSlot1.key(),effectiveFreqSlot1)) .setSpacing(BigDecimal.valueOf(FIX_CH * CONVERT_TH_HZ)).build(); return new PathConstraintsBuilder().setTeBandwidth(teBandwidth).build(); } @@ -367,17 +371,17 @@ public class GnpyServiceImpl { .setDisjointness(new TePathDisjointness(true, true, false)) .setRequestIdNumber(requestIdNumber).build(); List synchro = new ArrayList<>(); - Synchronization synchronization1 = new SynchronizationBuilder().setSynchronizationId(Long.valueOf(0)) + Synchronization synchronization1 = new SynchronizationBuilder().setSynchronizationId(Uint32.valueOf(0)) .setSvec(svec).build(); synchro.add(synchronization1); return (synchro); } - public List getPathRequest() { + public Map getPathRequest() { return pathRequest; } - public void setPathRequest(List pathRequest) { + public void setPathRequest(Map pathRequest) { this.pathRequest = pathRequest; } diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/gnpy/GnpyTopoImpl.java b/pce/src/main/java/org/opendaylight/transportpce/pce/gnpy/GnpyTopoImpl.java index 94049b975..39b31a8d8 100644 --- a/pce/src/main/java/org/opendaylight/transportpce/pce/gnpy/GnpyTopoImpl.java +++ b/pce/src/main/java/org/opendaylight/transportpce/pce/gnpy/GnpyTopoImpl.java @@ -10,6 +10,7 @@ package org.opendaylight.transportpce.pce.gnpy; import java.math.BigDecimal; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -40,6 +41,7 @@ import org.opendaylight.yang.gen.v1.gnpy.gnpy.network.topology.rev181214.topo.Co import org.opendaylight.yang.gen.v1.gnpy.gnpy.network.topology.rev181214.topo.ConnectionsBuilder; import org.opendaylight.yang.gen.v1.gnpy.gnpy.network.topology.rev181214.topo.Elements; import org.opendaylight.yang.gen.v1.gnpy.gnpy.network.topology.rev181214.topo.ElementsBuilder; +import org.opendaylight.yang.gen.v1.gnpy.gnpy.network.topology.rev181214.topo.ElementsKey; import org.opendaylight.yang.gen.v1.gnpy.gnpy.network.topology.rev181214.topo.elements.Metadata; import org.opendaylight.yang.gen.v1.gnpy.gnpy.network.topology.rev181214.topo.elements.MetadataBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Link1; @@ -76,7 +78,7 @@ public class GnpyTopoImpl { private static final Logger LOG = LoggerFactory.getLogger(GnpyTopoImpl.class); private final NetworkTransactionService networkTransactionService; //List of elements - private List elements = new ArrayList<>(); + private Map elements = new HashMap<>(); private List connections = new ArrayList<>(); //Mapping elements //Mapping between the ord-topo and ord-ntw node @@ -160,8 +162,8 @@ public class GnpyTopoImpl { throw new GnpyException("In gnpyTopoImpl: openRoadmNet or openRoadmTopo is not present"); } // Create the list of nodes - List openRoadmNetNodeList = openRoadmNet.get().getNode(); - List openRoadmTopoNodeList = openRoadmTopo.get().getNode(); + Collection openRoadmNetNodeList = openRoadmNet.get().nonnullNode().values(); + Collection openRoadmTopoNodeList = openRoadmTopo.get().nonnullNode().values(); List nodesList = new ArrayList<>(); if (openRoadmTopoNodeList.isEmpty() || openRoadmNetNodeList.isEmpty()) { @@ -170,7 +172,7 @@ public class GnpyTopoImpl { // Create elements for (Node openRoadmTopoNode : openRoadmTopoNodeList) { // Retrieve the supporting node and the type of the node in openRoadm network - List supportingNodeList = openRoadmTopoNode.getSupportingNode(); + Collection supportingNodeList = openRoadmTopoNode.nonnullSupportingNode().values(); for (SupportingNode supportingNode : supportingNodeList) { if (!supportingNode.getNetworkRef().getValue().equals("openroadm-network")) { @@ -207,14 +209,14 @@ public class GnpyTopoImpl { if (!nodesList.contains(nodeRef)) { Elements element = createElementsRoadm(LATITUDE, LONGITUTE, nodeRef, openRoadmNetNode1.getShelf(),TARGET_PCH_OUT_DB, ipAddress.getIpv4Address().getValue()); - this.elements.add(element); + this.elements.put(element.key(),element); nodesList.add(nodeRef); } } else if (commonNetworkNode1.getNodeType().getName().equals("XPONDER")) { if (!nodesList.contains(nodeRef)) { Elements element = createElementsTransceiver(LATITUDE, LONGITUTE, nodeRef, openRoadmNetNode1.getShelf(),ipAddress.getIpv4Address().getValue()); - this.elements.add(element); + this.elements.put(element.key(),element); nodesList.add(nodeRef); trxList.add(nodeRef); } @@ -231,7 +233,7 @@ public class GnpyTopoImpl { throw new GnpyException("In gnpyTopoImpl: openroadmTopo is not present"); } Network1 nw1 = openRoadmTopo.get().augmentation(Network1.class); - List linksList = nw1.getLink(); + Collection linksList = nw1.nonnullLink().values(); // 1:EXPRESS-LINK 2:ADD-LINK 3:DROP-LINK // 4:ROADM-To-ROADM 5:XPONDER-INPUT 6:XPONDER-OUTPUT int[] externalLink = {OpenroadmLinkType.ROADMTOROADM.getIntValue(),OpenroadmLinkType.XPONDERINPUT.getIntValue(), @@ -284,12 +286,12 @@ public class GnpyTopoImpl { private IpAddress extractAmplifiedLink(OMSAttributes omsAttributes, String linkId, IpAddress srcIp) throws GnpyException { - List amplifiedLinkList = omsAttributes.getAmplifiedLink() - .getAmplifiedLink(); + List amplifiedLinkList = new ArrayList<>(omsAttributes.getAmplifiedLink() + .nonnullAmplifiedLink().values()); IpAddress destIp = null; if (!amplifiedLinkList.isEmpty()) { - for (AmplifiedLink amplifiedLink : amplifiedLinkList) { - String secElt = amplifiedLink.getSectionEltNumber().toString(); + for (AmplifiedLink amplifiedLink: amplifiedLinkList) { + String secElt = amplifiedLink .getSectionEltNumber().toString(); //Case of ILA if (amplifiedLink.getSectionElement().getSectionElement() instanceof Ila) { Ila ila = (Ila) amplifiedLink.getSectionElement().getSectionElement(); @@ -330,7 +332,7 @@ public class GnpyTopoImpl { ila.getGain().getValue(), ila.getTilt().getValue(), ila.getOutVoaAtt().getValue(), "std_medium_gain", ipEdfa.getIpv4Address().getValue()); - this.elements.add(element); + this.elements.put(element.key(),element); return ipEdfa; } @@ -338,7 +340,7 @@ public class GnpyTopoImpl { IpAddress ipFiber = new IpAddress(fiberId); if (!mapLinkFiber.containsKey(linkId)) { - mapLinkFiber.put(linkId, new ArrayList()); + mapLinkFiber.put(linkId, new ArrayList<>()); } mapLinkFiber.get(linkId).add(subLinkId); mapFiberIp.put(subLinkId, ipFiber); @@ -349,8 +351,7 @@ public class GnpyTopoImpl { String typeVariety = "SSMF"; double length = 0; // Compute the length of the link - List linkConcatenationList = span.getLinkConcatenation(); - for (LinkConcatenation linkConcatenation : linkConcatenationList) { + for (LinkConcatenation linkConcatenation : span.nonnullLinkConcatenation().values()) { double srlgLength = linkConcatenation.getSRLGLength().toJava(); //convert to kilometer length += srlgLength / CONVERT_KM_M; @@ -362,7 +363,7 @@ public class GnpyTopoImpl { double lossCoef = span.getSpanlossCurrent().getValue().doubleValue() / length; Elements element = createElementsFiber(LATITUDE, LONGITUTE, REGION, CITY, ipFiber.getIpv4Address().getValue(), length, attIn, lossCoef, connIn, connOut, typeVariety); - this.elements.add(element); + this.elements.put(element.key(),element); return ipFiber; } @@ -492,11 +493,11 @@ public class GnpyTopoImpl { return new Ipv4Address(nidString); } - public List getElements() { + public Map getElements() { return elements; } - public void setElements(List elements) { + public void setElements(Map elements) { this.elements = elements; } diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/gnpy/GnpyUtilitiesImpl.java b/pce/src/main/java/org/opendaylight/transportpce/pce/gnpy/GnpyUtilitiesImpl.java index fcd1cbc0c..d8560b60b 100644 --- a/pce/src/main/java/org/opendaylight/transportpce/pce/gnpy/GnpyUtilitiesImpl.java +++ b/pce/src/main/java/org/opendaylight/transportpce/pce/gnpy/GnpyUtilitiesImpl.java @@ -8,6 +8,7 @@ package org.opendaylight.transportpce.pce.gnpy; +import java.util.ArrayList; import java.util.List; import org.opendaylight.transportpce.common.network.NetworkTransactionService; import org.opendaylight.transportpce.pce.constraints.PceConstraints; @@ -77,10 +78,10 @@ public class GnpyUtilitiesImpl { public GnpyResult gnpyResponseOneDirection(GnpyServiceImpl gnpySvc) throws GnpyException, Exception { requestId = Uint32.valueOf((requestId.toJava()) + 1); - List pathRequestList = gnpySvc.getPathRequest(); + List pathRequestList = new ArrayList(gnpySvc.getPathRequest().values()); List synchronizationList = gnpySvc.getSynchronization(); // Send the computed path to GNPY tool - List elementsList = gnpyTopo.getElements(); + List elementsList = new ArrayList(gnpyTopo.getElements().values()); List connectionsList = gnpyTopo.getConnections(); String gnpyResponse = getGnpyResponse(elementsList, connectionsList, pathRequestList, synchronizationList); @@ -98,7 +99,6 @@ public class GnpyUtilitiesImpl { AToZDirection atoztmp = new AToZDirectionBuilder() .setRate(input.getServiceAEnd().getServiceRate()) - .setAToZ(null) .build(); GnpyServiceImpl gnpySvc = new GnpyServiceImpl(input, atoztmp, requestId, gnpyTopo, pceHardConstraints); GnpyResult result = gnpyResponseOneDirection(gnpySvc); @@ -115,7 +115,8 @@ public class GnpyUtilitiesImpl { } public String getGnpyResponse(List elementsList, List connectionsList, - List pathRequestList, List synchronizationList) throws GnpyException, Exception { + List pathRequestList, List synchronizationList) + throws GnpyException, Exception { GnpyApi gnpyApi = new GnpyApiBuilder() .setTopologyFile( new TopologyFileBuilder().setElements(elementsList).setConnections(connectionsList).build()) diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/gnpy/ServiceDataStoreOperationsImpl.java b/pce/src/main/java/org/opendaylight/transportpce/pce/gnpy/ServiceDataStoreOperationsImpl.java index 72ac832b0..e1a243c0b 100644 --- a/pce/src/main/java/org/opendaylight/transportpce/pce/gnpy/ServiceDataStoreOperationsImpl.java +++ b/pce/src/main/java/org/opendaylight/transportpce/pce/gnpy/ServiceDataStoreOperationsImpl.java @@ -15,15 +15,19 @@ import java.io.IOException; import java.io.StringWriter; import java.io.Writer; import java.nio.charset.StandardCharsets; +import java.util.Collection; import java.util.Collections; import java.util.Optional; -import org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry; -import org.opendaylight.mdsal.binding.generator.impl.ModuleInfoBackedContext; -import org.opendaylight.mdsal.binding.generator.util.BindingRuntimeContext; +import org.eclipse.jdt.annotation.NonNull; +import org.opendaylight.binding.runtime.api.BindingRuntimeContext; +import org.opendaylight.binding.runtime.spi.BindingRuntimeHelpers; +import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer; +import org.opendaylight.mdsal.binding.dom.codec.impl.BindingCodecContext; import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections; import org.opendaylight.transportpce.common.DataStoreContext; import org.opendaylight.transportpce.common.converter.XMLDataObjectConverter; import org.opendaylight.transportpce.common.network.NetworkTransactionService; +import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.Result; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.OrgOpenroadmDevice; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; @@ -33,7 +37,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStre import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier; import org.opendaylight.yangtools.yang.data.codec.gson.JSONNormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.codec.gson.JsonWriterFactory; -import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -82,15 +86,16 @@ public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperation .transform(input -> BindingReflections.findQName(input.getType())), true); // Prepare the variables - final ModuleInfoBackedContext moduleContext = ModuleInfoBackedContext.create(); - Iterable moduleInfos = Collections - .singleton(BindingReflections.getModuleInfo(object.getClass())); - moduleContext.addModuleInfos(moduleInfos); - SchemaContext schemaContext = moduleContext.tryToCreateSchemaContext().get(); - BindingRuntimeContext bindingContext; - bindingContext = BindingRuntimeContext.create(moduleContext, schemaContext); - final BindingNormalizedNodeCodecRegistry codecRegistry = - new BindingNormalizedNodeCodecRegistry(bindingContext); + // Create the schema context + Collection moduleInfos = Collections.singleton(BindingReflections + .getModuleInfo(Result.class)); + @NonNull + EffectiveModelContext schemaContext = BindingRuntimeHelpers.createEffectiveModel(moduleInfos); + + // Create the binding binding normalized node codec registry + BindingRuntimeContext bindingContext = + BindingRuntimeHelpers.createRuntimeContext(); + final BindingNormalizedNodeSerializer codecRegistry = new BindingCodecContext(bindingContext); /* * This function needs : - context - scPath.getParent() - diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/MapUtils.java b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/MapUtils.java index 2385de736..1de4866e1 100644 --- a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/MapUtils.java +++ b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/MapUtils.java @@ -10,17 +10,20 @@ package org.opendaylight.transportpce.pce.networkanalyzer; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Map; import java.util.TreeMap; import org.opendaylight.transportpce.common.NetworkUtils; import org.opendaylight.transportpce.pce.constraints.PceConstraints; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Link1; import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.span.attributes.LinkConcatenation; +import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.span.attributes.LinkConcatenationKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.link.oms.attributes.Span; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmLinkType; 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.node.SupportingNode; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.LinkId; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.Link; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.SupportingLink; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -76,14 +79,14 @@ public final class MapUtils { public static String getCLLI(Node node) { // TODO STUB retrieve CLLI from node. for now it is supporting node ID of the first supp node - return node.getSupportingNode().get(0).getNodeRef().getValue(); + return node.nonnullSupportingNode().values().iterator().next().getNodeRef().getValue(); } public static List getSRLG(Link link) { List srlgList = new ArrayList<>(); try { - List linkList = getOmsAttributesSpan(link).getLinkConcatenation(); - for (LinkConcatenation lc : linkList) { + Map linkList = getOmsAttributesSpan(link).getLinkConcatenation(); + for (LinkConcatenation lc : linkList.values()) { srlgList.add(lc.getSRLGId().toJava()); } } catch (NullPointerException e) { @@ -101,12 +104,8 @@ public final class MapUtils { } else { try { - List linkConcatenation = linkC.getLinkConcatenation(); - - for (org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.networks.network.link - .LinkConcatenation lc : linkConcatenation) { + .LinkConcatenation lc : linkC.nonnullLinkConcatenation().values()) { srlgList.add(lc.getSRLGId().toJava()); } } catch (NullPointerException e) { @@ -117,8 +116,7 @@ public final class MapUtils { } public static String getSupNetworkNode(Node node) { - List supNodes = node.getSupportingNode(); - for (SupportingNode snode : supNodes) { + for (SupportingNode snode : node.nonnullSupportingNode().values()) { if (NetworkUtils.UNDERLAY_NETWORK_ID.equals(snode.getNetworkRef().getValue())) { return snode.getNodeRef().getValue(); } @@ -127,8 +125,7 @@ public final class MapUtils { } public static String getSupClliNode(Node node) { - List supNodes = node.getSupportingNode(); - for (SupportingNode snode : supNodes) { + for (SupportingNode snode : node.nonnullSupportingNode().values()) { if (NetworkUtils.CLLI_NETWORK_ID.equals(snode.getNetworkRef().getValue())) { return snode.getNodeRef().getValue(); } @@ -138,13 +135,7 @@ public final class MapUtils { public static TreeMap getAllSupNode(Node node) { TreeMap allSupNodes = new TreeMap<>(); - List supNodes = new ArrayList<>(); - try { - supNodes = node.getSupportingNode(); - } catch (NullPointerException e) { - LOG.debug("No Supporting Node for the node {}", node); - } - for (SupportingNode supnode :supNodes) { + for (SupportingNode supnode : node.nonnullSupportingNode().values()) { allSupNodes.put(supnode.getNetworkRef().getValue(), supnode.getNodeRef().getValue()); } @@ -152,13 +143,12 @@ public final class MapUtils { } public static String getSupLink(Link link) { - String supLink = ""; - try { - supLink = link.getSupportingLink().get(0).getLinkRef().toString(); - } catch (NullPointerException e) { - LOG.debug("No Supporting Link for the link {}", link); + SupportingLink first = link.nonnullSupportingLink().values().iterator().next(); + if (first != null && first.getLinkRef() != null) { + return first.getLinkRef().toString(); + } else { + return ""; } - return supLink; } diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculation.java b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculation.java index 04a8aefc6..e880d02b4 100644 --- a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculation.java +++ b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculation.java @@ -208,12 +208,13 @@ public class PceCalculation { LOG.error("readMdSal: network is null: {}", nwInstanceIdentifier); return false; } - allNodes = nw.getNode().stream().sorted((n1, n2) -> n1.getNodeId().getValue().compareTo(n2.getNodeId() - .getValue())).collect(Collectors.toList()); + allNodes = nw.nonnullNode().values().stream().sorted((n1, n2) + -> n1.getNodeId().getValue().compareTo(n2.getNodeId().getValue())).collect(Collectors.toList()); Network1 nw1 = nw.augmentation(Network1.class); if (nw1 != null) { - allLinks = nw1.getLink().stream().sorted((l1, l2) -> l1.getSource().getSourceTp().toString().compareTo(l2 - .getSource().getSourceTp().toString())).collect(Collectors.toList()); + allLinks = nw1.nonnullLink().values().stream().sorted((l1, l2) + -> l1.getSource().getSourceTp().toString().compareTo(l2.getSource().getSourceTp().toString())) + .collect(Collectors.toList()); } else { LOG.warn("no otn links in otn-topology"); } diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceLink.java b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceLink.java index 3020cab04..dde21e1a7 100644 --- a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceLink.java +++ b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceLink.java @@ -13,8 +13,12 @@ import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.List; +import java.util.Map; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Link1; +import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.span.attributes.LinkConcatenation; import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.span.attributes.LinkConcatenation.FiberType; +import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.span.attributes.LinkConcatenationKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.link.oms.attributes.Span; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmLinkType; import org.opendaylight.yang.gen.v1.http.transportpce.topology.rev200129.OtnLinkType; @@ -131,9 +135,12 @@ public class PceLink implements Serializable { try { double tmp = 0; - for (int i = 0; i < this.omsAttributesSpan.getLinkConcatenation().size(); i++) { + @NonNull + Map linkConcatenationMap = + this.omsAttributesSpan.nonnullLinkConcatenation(); + for (Map.Entry entry : linkConcatenationMap.entrySet()) { //Length is expressed in meter and latency is expressed in ms according to OpenROADM MSA - tmp += this.omsAttributesSpan.getLinkConcatenation().get(i).getSRLGLength().toJava() / CELERITY; + tmp += entry.getValue().getSRLGLength().toJava() / CELERITY; LOG.info("In PceLink: The latency of link {} == {}",link.getLinkId(),tmp); } tmplatency = (long) Math.ceil(tmp); @@ -148,7 +155,8 @@ public class PceLink implements Serializable { public double calcSpanOSNR() { try { double pout; //power on the output of the previous ROADM (dBm) - pout = retrievePower(this.omsAttributesSpan.getLinkConcatenation().get(0).getFiberType()); + pout = retrievePower(this.omsAttributesSpan.nonnullLinkConcatenation() + .values().iterator().next().getFiberType()); double spanLoss = this.omsAttributesSpan.getSpanlossCurrent().getValue().doubleValue(); // span loss (dB) double pin = pout - spanLoss; //power on the input of the current ROADM (dBm) double spanOsnrDb; diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOpticalNode.java b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOpticalNode.java index 63f2bffe0..a9199aec3 100644 --- a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOpticalNode.java +++ b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOpticalNode.java @@ -71,7 +71,7 @@ public class PceOpticalNode implements PceNode { this.node.augmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang .ietf.network.topology.rev180226.Node1.class); List allTps = nodeTp.getTerminationPoint(); + .node.TerminationPoint> allTps = new ArrayList(nodeTp.getTerminationPoint().values()); if (allTps == null) { LOG.error("initSrgTpList: ROADM TerminationPoint list is empty for node {}", this); this.valid = false; @@ -99,7 +99,8 @@ public class PceOpticalNode implements PceNode { boolean used = true; LOG.info("initSrgTpList: SRG-PP tp = {} found", tp.getTpId().getValue()); try { - List usedWavelengths = nttp1.getPpAttributes().getUsedWavelength(); + List usedWavelengths = + new ArrayList(nttp1.getPpAttributes().getUsedWavelength().values()); if (usedWavelengths.isEmpty()) { used = false; } @@ -137,7 +138,7 @@ public class PceOpticalNode implements PceNode { case SRG : List srgAvailableWL = - node1.getSrgAttributes().getAvailableWavelengths(); + new ArrayList(node1.getSrgAttributes().getAvailableWavelengths().values()); if (srgAvailableWL == null) { this.valid = false; LOG.error("initWLlist: SRG AvailableWavelengths is empty for node {}", this); @@ -151,7 +152,8 @@ public class PceOpticalNode implements PceNode { break; case DEGREE : List degAvailableWL = node1.getDegreeAttributes().getAvailableWavelengths(); + .AvailableWavelengths> degAvailableWL = + new ArrayList(node1.getDegreeAttributes().getAvailableWavelengths().values()); if (degAvailableWL == null) { this.valid = false; LOG.error("initWLlist: DEG AvailableWavelengths is empty for node {}", this); @@ -189,7 +191,7 @@ public class PceOpticalNode implements PceNode { this.node.augmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang .ietf.network.topology.rev180226.Node1.class); List allTps = nodeTp.getTerminationPoint(); + .node.TerminationPoint> allTps = new ArrayList(nodeTp.getTerminationPoint().values()); if (allTps == null) { this.valid = false; LOG.error("initXndrTps: XPONDER TerminationPoint list is empty for node {}", this); diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOtnNode.java b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOtnNode.java index 93e760e9f..c431d8b6f 100644 --- a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOtnNode.java +++ b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOtnNode.java @@ -101,7 +101,7 @@ public class PceOtnNode implements PceNode { = this.node.augmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang .ietf.network.topology.rev180226.Node1.class); List allTps = nodeTp.getTerminationPoint(); + .node.TerminationPoint> allTps = new ArrayList(nodeTp.getTerminationPoint().values()); this.valid = false; if (allTps == null) { LOG.error("PceOtnNode: initXndrTps: XPONDER TerminationPoint list is empty for node {}", this); @@ -188,8 +188,8 @@ public class PceOtnNode implements PceNode { for (TpId nwTp : netwTps) { for (TpId clTp : clientTps) { @Nullable - List nblList = node.augmentation(Node1.class).getSwitchingPools() - .getOduSwitchingPools().get(0).getNonBlockingList(); + List nblList = new ArrayList(node.augmentation(Node1.class).getSwitchingPools() + .getOduSwitchingPools().values().stream().findFirst().get().getNonBlockingList().values()); for (NonBlockingList nbl : nblList) { if (nbl.getTpList().contains(clTp) && nbl.getTpList().contains(nwTp)) { usableXpdrClientTps.add(clTp); @@ -207,8 +207,8 @@ public class PceOtnNode implements PceNode { if (clientTps == null && netwTps != null && nbClient == 0 && nbNetw == 2) { netwTps.sort(Comparator.comparing(TpId::getValue)); @Nullable - List nblList = node.augmentation(Node1.class).getSwitchingPools().getOduSwitchingPools() - .get(0).getNonBlockingList(); + List nblList = new ArrayList(node.augmentation(Node1.class).getSwitchingPools() + .getOduSwitchingPools().values().stream().findFirst().get().getNonBlockingList().values()); for (NonBlockingList nbl : nblList) { for (TpId nwTp : netwTps) { if (nbl.getTpList().contains(nwTp)) { @@ -224,7 +224,8 @@ public class PceOtnNode implements PceNode { } private boolean checkTpForOdtuTermination(TerminationPoint1 ontTp1) { - for (SupportedInterfaceCapability sic : ontTp1.getTpSupportedInterfaces().getSupportedInterfaceCapability()) { + for (SupportedInterfaceCapability sic : ontTp1.getTpSupportedInterfaces().getSupportedInterfaceCapability() + .values()) { LOG.debug("in checkTpForOduTermination - sic = {}", sic.getIfCapType()); if (sic.getIfCapType().equals(IfOCHOTU4ODU4.class) && ontTp1.getXpdrTpPortConnectionAttributes().getTsPool() == null) { @@ -238,9 +239,11 @@ public class PceOtnNode implements PceNode { if (ontTp1.getXpdrTpPortConnectionAttributes() != null && ontTp1.getXpdrTpPortConnectionAttributes().getTsPool() != null && ontTp1.getXpdrTpPortConnectionAttributes().getOdtuTpnPool() != null - && ontTp1.getXpdrTpPortConnectionAttributes().getOdtuTpnPool().get(0).getOdtuType() + && ontTp1.getXpdrTpPortConnectionAttributes().getOdtuTpnPool().values() + .stream().findFirst().get().getOdtuType() .equals(ODTU4TsAllocated.class) - && !ontTp1.getXpdrTpPortConnectionAttributes().getOdtuTpnPool().get(0).getTpnPool().isEmpty() + && !ontTp1.getXpdrTpPortConnectionAttributes().getOdtuTpnPool().values() + .stream().findFirst().get().getTpnPool().isEmpty() && (ontTp1.getXpdrTpPortConnectionAttributes().getTsPool().size() >= tsNb)) { return true; } @@ -248,7 +251,8 @@ public class PceOtnNode implements PceNode { } private boolean checkClientTp(TerminationPoint1 ontTp1) { - for (SupportedInterfaceCapability sic : ontTp1.getTpSupportedInterfaces().getSupportedInterfaceCapability()) { + for (SupportedInterfaceCapability sic : ontTp1.getTpSupportedInterfaces().getSupportedInterfaceCapability() + .values()) { LOG.debug("in checkTpForOduTermination - sic = {}", sic.getIfCapType()); switch (otnServiceType) { case "1GE": @@ -302,9 +306,9 @@ public class PceOtnNode implements PceNode { node.augmentation( org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130.Node1.class); SwitchingPools sp = node1.getSwitchingPools(); - List osp = sp.getOduSwitchingPools(); + List osp = new ArrayList(sp.getOduSwitchingPools().values()); for (OduSwitchingPools ospx : osp) { - List nbl = ospx.getNonBlockingList(); + List nbl = new ArrayList(ospx.getNonBlockingList().values()); for (NonBlockingList nbll : nbl) { if (nbll.getAvailableInterconnectBandwidth().toJava() >= neededBW && nbll.getTpList() != null && nbll.getTpList().contains(tp1.getTpId()) && nbll.getTpList().contains(tp2.getTpId())) { @@ -340,7 +344,7 @@ public class PceOtnNode implements PceNode { public void checkAvailableTribPort() { List networkTpList = node.augmentation( org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class) - .getTerminationPoint().stream() + .getTerminationPoint().values().stream() .filter(type -> type .augmentation( org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.TerminationPoint1.class) @@ -349,11 +353,11 @@ public class PceOtnNode implements PceNode { for (TerminationPoint tp : networkTpList) { if (tp.augmentation(TerminationPoint1.class).getXpdrTpPortConnectionAttributes().getOdtuTpnPool() != null - && tp.augmentation(TerminationPoint1.class).getXpdrTpPortConnectionAttributes().getOdtuTpnPool().get(0) - .getOdtuType().equals(ODTU4TsAllocated.class)) { + && tp.augmentation(TerminationPoint1.class).getXpdrTpPortConnectionAttributes().getOdtuTpnPool() + .values().stream().findFirst().get().getOdtuType().equals(ODTU4TsAllocated.class)) { @Nullable List tpnPool = tp.augmentation(TerminationPoint1.class).getXpdrTpPortConnectionAttributes() - .getOdtuTpnPool().get(0).getTpnPool(); + .getOdtuTpnPool().values().stream().findFirst().get().getTpnPool(); if (tpnPool != null) { tpAvailableTribPort.put(tp.getTpId().getValue(), tpnPool); } @@ -364,7 +368,7 @@ public class PceOtnNode implements PceNode { public void checkAvailableTribSlot() { List networkTpList = node.augmentation( org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class) - .getTerminationPoint().stream() + .getTerminationPoint().values().stream() .filter(type -> type .augmentation( org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.TerminationPoint1.class) diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/service/PathComputationServiceImpl.java b/pce/src/main/java/org/opendaylight/transportpce/pce/service/PathComputationServiceImpl.java index 0abc6d72a..e022c91ed 100644 --- a/pce/src/main/java/org/opendaylight/transportpce/pce/service/PathComputationServiceImpl.java +++ b/pce/src/main/java/org/opendaylight/transportpce/pce/service/PathComputationServiceImpl.java @@ -207,15 +207,17 @@ public class PathComputationServiceImpl implements PathComputationService { AToZDirection atoz = pathDescription.getAToZDirection(); if ((atoz != null) && (atoz.getAToZ() != null)) { LOG.debug("Impl AtoZ Notification: [{}] elements in description", atoz.getAToZ().size()); - for (int i = 0; i < atoz.getAToZ().size(); i++) { - LOG.debug("Impl AtoZ Notification: [{}] {}", i, atoz.getAToZ().get(i)); + for (org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev200629 + .path.description.atoz.direction.AToZKey key : atoz.getAToZ().keySet()) { + LOG.debug("Impl AtoZ Notification: [{}] {}", key, atoz.getAToZ().get(key)); } } ZToADirection ztoa = pathDescription.getZToADirection(); if ((ztoa != null) && (ztoa.getZToA() != null)) { LOG.debug("Impl ZtoA Notification: [{}] elements in description", ztoa.getZToA().size()); - for (int i = 0; i < ztoa.getZToA().size(); i++) { - LOG.debug("Impl ZtoA Notification: [{}] {}", i, ztoa.getZToA().get(i)); + for (org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev200629 + .path.description.ztoa.direction.ZToAKey key : ztoa.getZToA().keySet()) { + LOG.debug("Impl ZtoA Notification: [{}] {}", key, ztoa.getZToA().get(key)); } } return output.build(); @@ -243,7 +245,7 @@ public class PathComputationServiceImpl implements PathComputationService { (org.opendaylight.yang.gen.v1.gnpy.path.rev200202.result.response.response.type.PathCase) responseGnpy.getResponseType(); List pathMetricList = pathCase.getPathProperties().getPathMetric(); + .PathMetric> pathMetricList = new ArrayList(pathCase.getPathProperties().getPathMetric().values()); List gnpyPathMetricList = new ArrayList<>(); for (org.opendaylight.yang.gen.v1.gnpy.path.rev200202.generic.path.properties.path.properties.PathMetric pathMetricGnpy : pathMetricList) { diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/PcePathDescriptionTests.java b/pce/src/test/java/org/opendaylight/transportpce/pce/PcePathDescriptionTests.java index 26161ae46..6c5882086 100644 --- a/pce/src/test/java/org/opendaylight/transportpce/pce/PcePathDescriptionTests.java +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/PcePathDescriptionTests.java @@ -37,7 +37,6 @@ public class PcePathDescriptionTests extends AbstractTest { private PcePathDescription pcePathDescription; private PceResult pceResult; - private static final Long WAVE_LENGTH = 20L; private PceLink pceLink = null; private Link link = null; private Node node = null; diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/GnpyStub.java b/pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/GnpyStub.java index f2d1a87cf..b8a61a4be 100644 --- a/pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/GnpyStub.java +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/GnpyStub.java @@ -13,6 +13,7 @@ import java.io.StringReader; import java.net.URI; import java.nio.file.Files; import java.nio.file.Paths; +import java.util.ArrayList; import java.util.List; import javax.ws.rs.Consumes; import javax.ws.rs.HEAD; @@ -60,7 +61,7 @@ public class GnpyStub { // TODO: return different response based on body data try { String response = null; - List pathRequest = request.getServiceFile().getPathRequest(); + List pathRequest = new ArrayList<>(request.getServiceFile().nonnullPathRequest().values()); // this condition is totally arbitrary and could be modified if (!pathRequest.isEmpty() && "127.0.0.31".contentEquals(pathRequest.get(0).getSource().stringValue())) { response = Files diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/GnpyUtilitiesImplTest.java b/pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/GnpyUtilitiesImplTest.java index 454415253..025ccf576 100644 --- a/pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/GnpyUtilitiesImplTest.java +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/GnpyUtilitiesImplTest.java @@ -17,8 +17,7 @@ import java.io.FileReader; import java.io.IOException; import java.io.Reader; import java.net.URI; -import java.util.ArrayList; -import java.util.List; +import java.util.Map; import java.util.concurrent.ExecutionException; import org.glassfish.grizzly.http.server.HttpServer; import org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory; @@ -52,6 +51,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.NetworkKey; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.Uint32; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -161,27 +161,25 @@ public class GnpyUtilitiesImplTest extends AbstractTest { } private AToZDirectionBuilder buildAtZ() { - List atozList = new ArrayList<>(); AToZKey clientKey = new AToZKey("key"); TerminationPoint stp = new TerminationPointBuilder() .setTpId("tpName").setTpNodeId("xname") .build(); Resource clientResource = new ResourceBuilder().setResource(stp).build(); AToZ firstResource = new AToZBuilder().setId("tpName").withKey(clientKey).setResource(clientResource).build(); - atozList.add(firstResource); return new AToZDirectionBuilder() - .setRate(100L) - .setAToZ(atozList) - .setAToZWavelengthNumber(Long.valueOf(0)); + .setRate(Uint32.valueOf(100)) + .setAToZ(Map.of(firstResource.key(),firstResource)) + .setAToZWavelengthNumber(Uint32.valueOf(0)); } private ZToADirectionBuilder buildZtoA() { return new ZToADirectionBuilder() - .setRate(100L) - .setZToA(new ArrayList()) - .setZToAWavelengthNumber(Long.valueOf(0)); + .setRate(Uint32.valueOf(100)) + .setZToA(Map.of()) + .setZToAWavelengthNumber(Uint32.valueOf(0)); } } diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceLinkTest.java b/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceLinkTest.java index a2e27f848..0f9646ba2 100644 --- a/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceLinkTest.java +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceLinkTest.java @@ -8,11 +8,9 @@ package org.opendaylight.transportpce.pce.networkanalyzer; -import com.google.common.collect.ImmutableList; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.util.HashMap; +import java.util.Map; import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -20,7 +18,6 @@ import org.opendaylight.transportpce.common.NetworkUtils; import org.opendaylight.transportpce.test.AbstractTest; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.link.types.rev181130.RatioDB; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Link1Builder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.TerminationPoint1; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.TerminationPoint1Builder; import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.span.attributes.LinkConcatenation; import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.span.attributes.LinkConcatenationBuilder; @@ -37,6 +34,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev 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.rev180226.networks.network.node.SupportingNode; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNodeBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNodeKey; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.LinkId; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder; @@ -45,7 +43,9 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.top import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.LinkKey; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.DestinationBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.SourceBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPoint; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPointBuilder; +import org.opendaylight.yangtools.yang.common.Uint32; @@ -53,7 +53,6 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.top public class PceLinkTest extends AbstractTest { private static final String LINK_ID_FORMAT = "%1$s-%2$sto%3$s-%4$s"; - private static final Long WAVE_LENGTH = 20L; private PceLink pceLink = null; @Before @@ -199,15 +198,16 @@ public class PceLinkTest extends AbstractTest { LinkId oppositeLinkId = new LinkId("opposite"); //For setting up attributes for openRoadm augment + LinkConcatenation linkConcatenation = new LinkConcatenationBuilder() + .setSRLGLength(Uint32.valueOf(20)) + .setFiberType(LinkConcatenation.FiberType.Dsf) + .build(); OMSAttributesBuilder omsAttributesBuilder = new OMSAttributesBuilder() .setSpan(new SpanBuilder() .setSpanlossCurrent(new RatioDB(new BigDecimal("55"))) - .setLinkConcatenation(Arrays.asList( - new LinkConcatenationBuilder() - .setSRLGLength(20L) - .setFiberType(LinkConcatenation.FiberType.Dsf) - .build() + .setLinkConcatenation(Map.of(linkConcatenation.key(), + linkConcatenation )).build()).setOppositeLink(oppositeLinkId); @@ -217,9 +217,7 @@ public class PceLinkTest extends AbstractTest { .setLinkId(linkId) .withKey(new LinkKey(linkId)); - linkBuilder.addAugmentation( - org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Link1.class, - link1Builder.build()); + linkBuilder.addAugmentation(link1Builder.build()); org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Link1Builder linkBuilderNetworkLink = new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Link1Builder() @@ -227,16 +225,14 @@ public class PceLinkTest extends AbstractTest { .build()); - linkBuilder.addAugmentation( - org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Link1.class, - linkBuilderNetworkLink.build()); + linkBuilder.addAugmentation(linkBuilderNetworkLink.build()); return linkBuilder; } private static LinkBuilder createRoadmToRoadm(String srcNode, String destNode, String srcTp, String destTp) { Link1Builder link1Builder = new Link1Builder() - .setLinkLatency(100L) + .setLinkLatency(Uint32.valueOf(100)) .setLinkType(OpenroadmLinkType.ROADMTOROADM); return createLinkBuilder(srcNode, destNode, srcTp, destTp, link1Builder); @@ -250,23 +246,25 @@ public class PceLinkTest extends AbstractTest { } - private List geSupportingNodes() { - List supportingNodes1 = new ArrayList<>(); + private Map geSupportingNodes() { + Map supportingNodes1 = new HashMap<>(); + SupportingNode supportingNode1 = new SupportingNodeBuilder() + .setNodeRef(new NodeId("node 1")) + .setNetworkRef(new NetworkId(NetworkUtils.CLLI_NETWORK_ID)) + .build(); supportingNodes1 - .add(new SupportingNodeBuilder() - .setNodeRef(new NodeId("node 1")) - .setNetworkRef(new NetworkId(NetworkUtils.CLLI_NETWORK_ID)) - .build()); + .put(supportingNode1.key(),supportingNode1); + SupportingNode supportingNode2 = new SupportingNodeBuilder() + .setNodeRef(new NodeId("node 2")) + .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID)) + .build(); supportingNodes1 - .add(new SupportingNodeBuilder() - .setNodeRef(new NodeId("node 2")) - .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID)) - .build()); + .put(supportingNode2.key(),supportingNode2); return supportingNodes1; } - private NodeBuilder getNodeBuilder(List supportingNodes1) { + private NodeBuilder getNodeBuilder(Map supportingNodes1) { //update tp of nodes @@ -274,17 +272,16 @@ public class PceLinkTest extends AbstractTest { TerminationPoint1Builder tp1Bldr = new TerminationPoint1Builder(); tp1Bldr.setTpType(OpenroadmTpType.XPONDERNETWORK); - xpdrTpBldr.addAugmentation( - TerminationPoint1.class, tp1Bldr.build()); + xpdrTpBldr.addAugmentation(tp1Bldr.build()); + TerminationPoint xpdr = xpdrTpBldr.build(); org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 node1 = - new Node1Builder().setTerminationPoint(ImmutableList.of(xpdrTpBldr.build())).build(); + new Node1Builder().setTerminationPoint(Map.of(xpdr.key(),xpdr)).build(); return new NodeBuilder() .setNodeId(new NodeId("node 1")) .withKey(new NodeKey(new NodeId("node 1"))) - .addAugmentation( - Node1.class, node1) + .addAugmentation(node1) .setSupportingNode(supportingNodes1); } diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOpticalNodeTest.java b/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOpticalNodeTest.java index f32a42d7b..aa4baad56 100644 --- a/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOpticalNodeTest.java +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOpticalNodeTest.java @@ -8,18 +8,16 @@ package org.opendaylight.transportpce.pce.networkanalyzer; -import com.google.common.collect.ImmutableList; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; +import java.util.HashMap; +import java.util.Map; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.opendaylight.transportpce.common.NetworkUtils; import org.opendaylight.transportpce.pce.utils.TransactionUtils; import org.opendaylight.transportpce.test.AbstractTest; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.TerminationPoint1; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.TerminationPoint1Builder; +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.AvailableWavelengthsBuilder; 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; @@ -43,10 +41,12 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev 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.rev180226.networks.network.node.SupportingNode; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNodeBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNodeKey; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder; 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.TerminationPoint; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPointBuilder; +import org.opendaylight.yangtools.yang.common.Uint32; public class PceOpticalNodeTest extends AbstractTest { @@ -190,72 +190,68 @@ public class PceOpticalNodeTest extends AbstractTest { Assert.assertTrue(pceOpticalNode.checkTP("testTP")); } - private List geSupportingNodes() { - List supportingNodes1 = new ArrayList<>(); + private Map geSupportingNodes() { + Map supportingNodes1 = new HashMap<>(); + SupportingNode supportingNode1 = new SupportingNodeBuilder() + .setNodeRef(new NodeId("node 1")) + .setNetworkRef(new NetworkId(NetworkUtils.CLLI_NETWORK_ID)) + .build(); supportingNodes1 - .add(new SupportingNodeBuilder() - .setNodeRef(new NodeId("node 1")) - .setNetworkRef(new NetworkId(NetworkUtils.CLLI_NETWORK_ID)) - .build()); + .put(supportingNode1.key(),supportingNode1); + SupportingNode supportingNode2 = new SupportingNodeBuilder() + .setNodeRef(new NodeId("node 2")) + .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID)) + .build(); supportingNodes1 - .add(new SupportingNodeBuilder() - .setNodeRef(new NodeId("node 2")) - .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID)) - .build()); + .put(supportingNode2.key(),supportingNode2); return supportingNodes1; } - private NodeBuilder getNodeBuilder(List supportingNodes1, OpenroadmTpType openroadmTpType) { + private NodeBuilder getNodeBuilder(Map supportingNodes1, + OpenroadmTpType openroadmTpType) { TerminationPoint1Builder tp1Bldr = getTerminationPoint1Builder(openroadmTpType); TerminationPointBuilder xpdrTpBldr = getTerminationPointBuilder(); - xpdrTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build()); - xpdrTpBldr.addAugmentation( - org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.TerminationPoint1.class, - createAnotherTerminationPoint().build()); + xpdrTpBldr.addAugmentation(tp1Bldr.build()); + xpdrTpBldr.addAugmentation(createAnotherTerminationPoint().build()); org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1 node1 = getNode1(); + TerminationPoint xpdr = xpdrTpBldr.build(); org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 node1Rev180226 = new Node1Builder() - .setTerminationPoint(ImmutableList.of(xpdrTpBldr.build())) + .setTerminationPoint(Map.of(xpdr.key(),xpdr)) .build(); return new NodeBuilder() .setNodeId(new NodeId("node_test")) .withKey(new NodeKey(new NodeId("node 1"))) - .addAugmentation( - Node1.class, node1Rev180226) - .addAugmentation( - org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1.class, - node1) + .addAugmentation(node1Rev180226) + .addAugmentation(node1) .setSupportingNode(supportingNodes1); } - private NodeBuilder getNodeBuilderEmpty(List supportingNodes1, OpenroadmTpType openroadmTpType) { + private NodeBuilder getNodeBuilderEmpty(Map supportingNodes1, + OpenroadmTpType openroadmTpType) { TerminationPoint1Builder tp1Bldr = getTerminationPoint1Builder(openroadmTpType); TerminationPointBuilder xpdrTpBldr = getTerminationPointBuilder(); - xpdrTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build()); - xpdrTpBldr.addAugmentation( - org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.TerminationPoint1.class, - createAnotherTerminationPoint().build()); + xpdrTpBldr.addAugmentation(tp1Bldr.build()); + xpdrTpBldr.addAugmentation(createAnotherTerminationPoint().build()); org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1 node1 = getNode1Empty(); + TerminationPoint xpdr = xpdrTpBldr.build(); org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 node1Rev180226 = new Node1Builder() - .setTerminationPoint(ImmutableList.of(xpdrTpBldr.build())) + .setTerminationPoint(Map.of(xpdr.key(),xpdr)) .build(); return new NodeBuilder() .setNodeId(new NodeId("node_test")) .withKey(new NodeKey(new NodeId("node 1"))) - .addAugmentation( - Node1.class, node1Rev180226) - .addAugmentation( - org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1.class, - node1) + .addAugmentation(node1Rev180226) + .addAugmentation(node1) .setSupportingNode(supportingNodes1); } @@ -276,9 +272,9 @@ public class PceOpticalNodeTest extends AbstractTest { } private DegreeAttributes getDegAttributes() { + AvailableWavelengths aval = new AvailableWavelengthsBuilder().setIndex(Uint32.valueOf(20)).build(); return (new DegreeAttributesBuilder()) - .setAvailableWavelengths( - Collections.singletonList(new AvailableWavelengthsBuilder().setIndex(20L).build())) + .setAvailableWavelengths(Map.of(aval.key(),aval)) .build(); } @@ -288,15 +284,12 @@ public class PceOpticalNodeTest extends AbstractTest { private DegreeAttributes getEmptyDegAttributes() { return (new DegreeAttributesBuilder()) - .setAvailableWavelengths(new ArrayList<>()) + .setAvailableWavelengths(Map.of()) .build(); } private SrgAttributes getEmptySrgAttributes() { - List - waveList = new ArrayList<>(); - return new SrgAttributesBuilder().setAvailableWavelengths(waveList).build(); + return new SrgAttributesBuilder().setAvailableWavelengths(Map.of()).build(); } private TerminationPointBuilder getTerminationPointBuilder() { @@ -314,11 +307,11 @@ public class PceOpticalNodeTest extends AbstractTest { return new org.opendaylight .yang.gen.v1.http.org.openroadm.network.topology.rev181130.TerminationPoint1Builder() .setTpType(OpenroadmTpType.XPONDERNETWORK) - .setCtpAttributes((new CtpAttributesBuilder()).setUsedWavelengths(new ArrayList<>()).build()) - .setCpAttributes((new CpAttributesBuilder()).setUsedWavelengths(new ArrayList<>()).build()) - .setTxTtpAttributes((new TxTtpAttributesBuilder()).setUsedWavelengths(new ArrayList<>()).build()) - .setRxTtpAttributes((new RxTtpAttributesBuilder()).setUsedWavelengths(new ArrayList<>()).build()) - .setPpAttributes((new PpAttributesBuilder()).setUsedWavelength(new ArrayList<>()).build()) + .setCtpAttributes((new CtpAttributesBuilder()).setUsedWavelengths(Map.of()).build()) + .setCpAttributes((new CpAttributesBuilder()).setUsedWavelengths(Map.of()).build()) + .setTxTtpAttributes((new TxTtpAttributesBuilder()).setUsedWavelengths(Map.of()).build()) + .setRxTtpAttributes((new RxTtpAttributesBuilder()).setUsedWavelengths(Map.of()).build()) + .setPpAttributes((new PpAttributesBuilder()).setUsedWavelength(Map.of()).build()) .setXpdrClientAttributes((new XpdrClientAttributesBuilder()).build()) .setXpdrPortAttributes((new XpdrPortAttributesBuilder()).build()) .setXpdrNetworkAttributes(new XpdrNetworkAttributesBuilder() diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOtnNodeTest.java b/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOtnNodeTest.java index 561c1a9a5..35df80772 100644 --- a/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOtnNodeTest.java +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOtnNodeTest.java @@ -8,18 +8,16 @@ package org.opendaylight.transportpce.pce.networkanalyzer; -import com.google.common.collect.ImmutableList; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; +import java.util.HashMap; +import java.util.Map; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import org.opendaylight.transportpce.common.NetworkUtils; import org.opendaylight.transportpce.test.AbstractTest; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.TerminationPoint1; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.TerminationPoint1Builder; +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.AvailableWavelengthsBuilder; 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; @@ -37,6 +35,7 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.O import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmTpType; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.xpdr.tp.supported.interfaces.SupportedInterfaceCapability; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.xpdr.tp.supported.interfaces.SupportedInterfaceCapabilityBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.xpdr.tp.supported.interfaces.SupportedInterfaceCapabilityKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130.networks.network.node.termination.point.TpSupportedInterfaces; import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130.networks.network.node.termination.point.TpSupportedInterfacesBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130.networks.network.node.termination.point.XpdrTpPortConnectionAttributesBuilder; @@ -52,9 +51,10 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev 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.rev180226.networks.network.node.SupportingNode; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNodeBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNodeKey; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder; 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.TerminationPoint; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPointBuilder; import org.opendaylight.yangtools.yang.common.Uint32; @@ -192,91 +192,78 @@ public class PceOtnNodeTest extends AbstractTest { Assert.assertFalse("not valid otn service Type" , pceOtnNode.isPceOtnNodeValid(pceOtnNode)); } - private List geSupportingNodes() { - List supportingNodes1 = new ArrayList<>(); + private Map geSupportingNodes() { + Map supportingNodes1 = new HashMap<>(); + SupportingNode supportingNode1 = new SupportingNodeBuilder() + .setNodeRef(new NodeId("node 1")) + .setNetworkRef(new NetworkId(NetworkUtils.CLLI_NETWORK_ID)) + .build(); supportingNodes1 - .add(new SupportingNodeBuilder() - .setNodeRef(new NodeId("node 1")) - .setNetworkRef(new NetworkId(NetworkUtils.CLLI_NETWORK_ID)) - .build()); + .put(supportingNode1.key(),supportingNode1); + SupportingNode supportingNode2 = new SupportingNodeBuilder() + .setNodeRef(new NodeId("node 2")) + .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID)) + .build(); supportingNodes1 - .add(new SupportingNodeBuilder() - .setNodeRef(new NodeId("node 2")) - .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID)) - .build()); + .put(supportingNode2.key(),supportingNode2); return supportingNodes1; } - private NodeBuilder getNodeBuilder(List supportingNodes1, OpenroadmTpType openroadmTpType) { + private NodeBuilder getNodeBuilder(Map supportingNodes1, + OpenroadmTpType openroadmTpType) { TerminationPoint1Builder tp1Bldr = getTerminationPoint1Builder(openroadmTpType); TerminationPointBuilder xpdrTpBldr = getTerminationPointBuilder(openroadmTpType); - xpdrTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build()); + xpdrTpBldr.addAugmentation(tp1Bldr.build()); - xpdrTpBldr.addAugmentation( - org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130 - .TerminationPoint1.class, - createAnother2TerminationPoint(openroadmTpType).build()); - xpdrTpBldr.addAugmentation( - org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.TerminationPoint1.class, - createAnotherTerminationPoint(openroadmTpType).build()); + xpdrTpBldr.addAugmentation(createAnother2TerminationPoint(openroadmTpType).build()); + xpdrTpBldr.addAugmentation(createAnotherTerminationPoint(openroadmTpType).build()); org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1 node1 = getNode1(); + TerminationPoint xpdr = xpdrTpBldr.build(); org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 node1Rev180226 = new Node1Builder() - .setTerminationPoint(ImmutableList.of(xpdrTpBldr.build())) + .setTerminationPoint(Map.of(xpdr.key(),xpdr)) .build(); org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 nodeIetf = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226 .Node1Builder() - .setTerminationPoint(ImmutableList.of(xpdrTpBldr.build())) + .setTerminationPoint(Map.of(xpdr.key(),xpdr)) .build(); return new NodeBuilder() .setNodeId(new NodeId("node_test")) .withKey(new NodeKey(new NodeId("node 1"))) - .addAugmentation( - Node1.class, node1Rev180226) - .addAugmentation( - org.opendaylight - .yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1.class, - node1) - .addAugmentation( - org.opendaylight - .yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class, - nodeIetf - ) + .addAugmentation(node1Rev180226) + .addAugmentation(node1) + .addAugmentation(nodeIetf) .setSupportingNode(supportingNodes1); } - private NodeBuilder getNodeBuilderEmpty(List supportingNodes1, OpenroadmTpType openroadmTpType) { + private NodeBuilder getNodeBuilderEmpty(Map supportingNodes1, + OpenroadmTpType openroadmTpType) { TerminationPoint1Builder tp1Bldr = getTerminationPoint1Builder(openroadmTpType); TerminationPointBuilder xpdrTpBldr = getTerminationPointBuilder(openroadmTpType); - xpdrTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build()); - xpdrTpBldr.addAugmentation( - org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130 - .TerminationPoint1.class, - createAnotherTerminationPoint(openroadmTpType).build()); + xpdrTpBldr.addAugmentation(tp1Bldr.build()); + xpdrTpBldr.addAugmentation(createAnotherTerminationPoint(openroadmTpType).build()); org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1 node1 = getNode1Empty(); + TerminationPoint xpdr = xpdrTpBldr.build(); org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 node1Rev180226 = new Node1Builder() - .setTerminationPoint(ImmutableList.of(xpdrTpBldr.build())) + .setTerminationPoint(Map.of(xpdr.key(),xpdr)) .build(); return new NodeBuilder() .setNodeId(new NodeId("node_test")) .withKey(new NodeKey(new NodeId("node 1"))) - .addAugmentation( - Node1.class, node1Rev180226) - .addAugmentation( - org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1.class, - node1) + .addAugmentation(node1Rev180226) + .addAugmentation(node1) .setSupportingNode(supportingNodes1); } @@ -297,11 +284,11 @@ public class PceOtnNodeTest extends AbstractTest { } private DegreeAttributes getDegAttributes() { + AvailableWavelengths aval = new AvailableWavelengthsBuilder() + .setIndex(Uint32.valueOf(20)) + .build(); return (new DegreeAttributesBuilder()) - .setAvailableWavelengths( - Collections.singletonList(new AvailableWavelengthsBuilder() - .setIndex(20L) - .build())) + .setAvailableWavelengths(Map.of(aval.key(),aval)) .build(); } @@ -311,25 +298,18 @@ public class PceOtnNodeTest extends AbstractTest { private DegreeAttributes getEmptyDegAttributes() { return (new DegreeAttributesBuilder()) - .setAvailableWavelengths( - new ArrayList<>()) + .setAvailableWavelengths(Map.of()) .build(); } private SrgAttributes getEmptySrgAttributes() { - List - waveList = new ArrayList<>(); - return new SrgAttributesBuilder().setAvailableWavelengths(waveList).build(); + return new SrgAttributesBuilder().setAvailableWavelengths(Map.of()).build(); } private TerminationPointBuilder getTerminationPointBuilder(OpenroadmTpType openroadmTpType) { return new TerminationPointBuilder() .setTpId(new TpId("2")) - .addAugmentation( - org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130 - .TerminationPoint1.class, - createOTNTerminationPoint(openroadmTpType).build()); + .addAugmentation(createOTNTerminationPoint(openroadmTpType).build()); } private TerminationPoint1Builder getTerminationPoint1Builder(OpenroadmTpType openroadmTpType) { @@ -346,11 +326,11 @@ public class PceOtnNodeTest extends AbstractTest { return new org.opendaylight .yang.gen.v1.http.org.openroadm.network.topology.rev181130.TerminationPoint1Builder() .setTpType(openroadmTpType) - .setCtpAttributes((new CtpAttributesBuilder()).setUsedWavelengths(new ArrayList<>()).build()) - .setCpAttributes((new CpAttributesBuilder()).setUsedWavelengths(new ArrayList<>()).build()) - .setTxTtpAttributes((new TxTtpAttributesBuilder()).setUsedWavelengths(new ArrayList<>()).build()) - .setRxTtpAttributes((new RxTtpAttributesBuilder()).setUsedWavelengths(new ArrayList<>()).build()) - .setPpAttributes((new PpAttributesBuilder()).setUsedWavelength(new ArrayList<>()).build()) + .setCtpAttributes((new CtpAttributesBuilder()).setUsedWavelengths(Map.of()).build()) + .setCpAttributes((new CpAttributesBuilder()).setUsedWavelengths(Map.of()).build()) + .setTxTtpAttributes((new TxTtpAttributesBuilder()).setUsedWavelengths(Map.of()).build()) + .setRxTtpAttributes((new RxTtpAttributesBuilder()).setUsedWavelengths(Map.of()).build()) + .setPpAttributes((new PpAttributesBuilder()).setUsedWavelength(Map.of()).build()) .setXpdrClientAttributes((new XpdrClientAttributesBuilder()).build()) .setXpdrPortAttributes((new XpdrPortAttributesBuilder()).build()) .setXpdrNetworkAttributes(new XpdrNetworkAttributesBuilder() @@ -374,11 +354,11 @@ public class PceOtnNodeTest extends AbstractTest { .setIfCapType(If1GEODU0.class) .build(); - List supIfCapaList = new ArrayList<>(); - supIfCapaList.add(supIfCapa); - supIfCapaList.add(supIfCapa1); - supIfCapaList.add(supIfCapa2); - supIfCapaList.add(supIfCapa3); + Map supIfCapaList = new HashMap<>(); + supIfCapaList.put(supIfCapa.key(),supIfCapa); + supIfCapaList.put(supIfCapa1.key(),supIfCapa1); + supIfCapaList.put(supIfCapa2.key(),supIfCapa2); + supIfCapaList.put(supIfCapa3.key(),supIfCapa3); TpSupportedInterfaces tpSupIf = new TpSupportedInterfacesBuilder() .setSupportedInterfaceCapability(supIfCapaList) @@ -400,12 +380,15 @@ public class PceOtnNodeTest extends AbstractTest { .setTpType(openroadmTpType); } - private static List create96AvalWaveSrg() { + private static 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> + create96AvalWaveSrg() { - List - waveList = new ArrayList<>(); + 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> + waveList = new HashMap<>(); for (int i = 1; i < 97; i++) { org.opendaylight.yang.gen @@ -415,7 +398,9 @@ public class PceOtnNodeTest extends AbstractTest { .setIndex(Uint32.valueOf(i)) .withKey(new org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev181130.srg.node.attributes .AvailableWavelengthsKey(Uint32.valueOf(i))); - waveList.add(avalBldr.build()); + org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev181130.srg.node.attributes.AvailableWavelengths + aval = avalBldr.build(); + waveList.put(aval.key(),aval); } return waveList; } diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/service/PathComputationServiceImplTest.java b/pce/src/test/java/org/opendaylight/transportpce/pce/service/PathComputationServiceImplTest.java index 20d904e1e..df4e006e0 100644 --- a/pce/src/test/java/org/opendaylight/transportpce/pce/service/PathComputationServiceImplTest.java +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/service/PathComputationServiceImplTest.java @@ -8,7 +8,7 @@ package org.opendaylight.transportpce.pce.service; import java.math.BigDecimal; -import java.util.Arrays; +import java.util.Map; import org.junit.After; import org.junit.Assert; import org.junit.Before; @@ -27,6 +27,7 @@ import org.opendaylight.transportpce.pce.utils.TransactionUtils; import org.opendaylight.transportpce.test.AbstractTest; import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.PathBandwidth; import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.generic.path.properties.PathPropertiesBuilder; +import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.generic.path.properties.path.properties.PathMetric; import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.generic.path.properties.path.properties.PathMetricBuilder; import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.no.path.info.NoPathBuilder; import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.result.Response; @@ -77,10 +78,11 @@ public class PathComputationServiceImplTest extends AbstractTest { @Test public void testPathComputationRequestPathCase() { - Response response = new ResponseBuilder().setResponseType(new PathCaseBuilder() - .setPathProperties(new PathPropertiesBuilder().setPathMetric(Arrays.asList(new PathMetricBuilder() + PathMetric pathMetric = new PathMetricBuilder() .setAccumulativeValue(new BigDecimal(21)) - .setMetricType(PathBandwidth.class).build())) + .setMetricType(PathBandwidth.class).build(); + Response response = new ResponseBuilder().setResponseType(new PathCaseBuilder() + .setPathProperties(new PathPropertiesBuilder().setPathMetric(Map.of(pathMetric.key(),pathMetric)) .build()).build()).build(); pathComputationServiceImpl.generateGnpyResponse(response,"path"); diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/utils/JsonUtil.java b/pce/src/test/java/org/opendaylight/transportpce/pce/utils/JsonUtil.java index b97d105eb..9ac12d85b 100644 --- a/pce/src/test/java/org/opendaylight/transportpce/pce/utils/JsonUtil.java +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/utils/JsonUtil.java @@ -12,9 +12,10 @@ import java.io.IOException; import java.util.LinkedList; import java.util.List; import java.util.ServiceLoader; -import org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry; -import org.opendaylight.mdsal.binding.generator.impl.ModuleInfoBackedContext; -import org.opendaylight.mdsal.binding.generator.util.BindingRuntimeContext; +import org.opendaylight.binding.runtime.api.BindingRuntimeContext; +import org.opendaylight.binding.runtime.spi.BindingRuntimeHelpers; +import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer; +import org.opendaylight.mdsal.binding.dom.codec.impl.BindingCodecContext; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.YangModelBindingProvider; import org.opendaylight.yangtools.yang.binding.YangModuleInfo; @@ -37,7 +38,7 @@ public final class JsonUtil { private SchemaContext schemaCtx; - private BindingNormalizedNodeCodecRegistry codecRegistry; + private BindingNormalizedNodeSerializer codecRegistry; private JsonUtil() { List moduleInfos = new LinkedList<>(); @@ -46,15 +47,14 @@ public final class JsonUtil { moduleInfos.add(yangModelBindingProvider.getModuleInfo()); } /* Create the schema context for loaded models */ - ModuleInfoBackedContext moduleInfoBackedCntxt = ModuleInfoBackedContext.create(); - moduleInfoBackedCntxt.addModuleInfos(moduleInfos); - schemaCtx = moduleInfoBackedCntxt.getSchemaContext(); + this.schemaCtx = BindingRuntimeHelpers.createEffectiveModel(moduleInfos); if (schemaCtx == null) { throw new IllegalStateException("Failed to load schema context"); } // Create the binding binding normalized node codec registry - BindingRuntimeContext bindingRuntimeContext = BindingRuntimeContext.create(moduleInfoBackedCntxt, schemaCtx); - codecRegistry = new BindingNormalizedNodeCodecRegistry(bindingRuntimeContext); + BindingRuntimeContext bindingContext = + BindingRuntimeHelpers.createRuntimeContext(); + this.codecRegistry = new BindingCodecContext(bindingContext); } public static JsonUtil getInstance() { diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/utils/NodeUtils.java b/pce/src/test/java/org/opendaylight/transportpce/pce/utils/NodeUtils.java index 6adfaf99e..a1777e861 100644 --- a/pce/src/test/java/org/opendaylight/transportpce/pce/utils/NodeUtils.java +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/utils/NodeUtils.java @@ -8,24 +8,25 @@ package org.opendaylight.transportpce.pce.utils; -import com.google.common.collect.ImmutableList; import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.opendaylight.transportpce.common.NetworkUtils; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.link.types.rev181130.FiberPmd; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.link.types.rev181130.RatioDB; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Link1Builder; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev181130.State; +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.AvailableWavelengthsBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev181130.AdminStates; import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes.AmplifiedLink; +import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes.AmplifiedLinkKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes.amplified.link.SectionElementBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.span.attributes.LinkConcatenation; import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.span.attributes.LinkConcatenationBuilder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Link1; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.TerminationPoint1; +import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.span.attributes.LinkConcatenationKey; 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.link.OMSAttributesBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.link.oms.attributes.AmplifiedLinkBuilder; @@ -46,6 +47,7 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.O import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmTpType; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.xpdr.tp.supported.interfaces.SupportedInterfaceCapability; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.xpdr.tp.supported.interfaces.SupportedInterfaceCapabilityBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.xpdr.tp.supported.interfaces.SupportedInterfaceCapabilityKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130.networks.network.node.termination.point.TpSupportedInterfaces; import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130.networks.network.node.termination.point.TpSupportedInterfacesBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130.networks.network.node.termination.point.XpdrTpPortConnectionAttributesBuilder; @@ -59,8 +61,8 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev 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.rev180226.networks.network.node.SupportingNode; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNodeBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNodeKey; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.LinkId; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder; 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.Link; @@ -68,8 +70,10 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.top import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.LinkKey; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.DestinationBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.SourceBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPoint; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPointBuilder; import org.opendaylight.yangtools.yang.binding.Augmentation; +import org.opendaylight.yangtools.yang.common.Uint16; import org.opendaylight.yangtools.yang.common.Uint32; public class NodeUtils { @@ -93,56 +97,55 @@ public class NodeUtils { // Augementation Augmentation aug11 = new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130 .Link1Builder() - .setAdministrativeGroup(Long.valueOf(123)) + .setAdministrativeGroup(Uint32.valueOf(123)) .setAdministrativeState(State.InService) .setAmplified(true) - .setLinkLatency(Long.valueOf(123)) + .setLinkLatency(Uint32.valueOf(123)) .setLinkLength(BigDecimal.valueOf(123)) .setOMSAttributes(new OMSAttributesBuilder() .setOppositeLink(new LinkId("OpenROADM-3-2-DEG1-to-OpenROADM-3-1-DEG1")) .setSpan(new SpanBuilder().build()) - .setTEMetric(Long.valueOf(123)).build()) + .setTEMetric(Uint32.valueOf(123)).build()) .setOperationalState(State.InService).build(); LinkBuilder linkBuilder = new LinkBuilder() .setSource(ietfSrcLinkBldr.build()) .setDestination(ietfDestLinkBldr.build()) .setLinkId(linkId) - .addAugmentation(Link1.class, aug11) + .addAugmentation(aug11) .withKey(new LinkKey(linkId)); - linkBuilder.addAugmentation( - org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Link1.class, - link1Builder.build()); + linkBuilder.addAugmentation(link1Builder.build()); return linkBuilder; } public static LinkBuilder createRoadmToRoadm(String srcNode, String destNode, String srcTp, String destTp) { Link1Builder link1Builder = new Link1Builder() - .setLinkLatency(30L) + .setLinkLatency(Uint32.valueOf(30)) .setLinkType(OpenroadmLinkType.ROADMTOROADM); return createLinkBuilder(srcNode, destNode, srcTp, destTp, link1Builder); } - public static List geSupportingNodes() { - List supportingNodes1 = new ArrayList<>(); -// + public static Map geSupportingNodes() { + Map supportingNodes1 = new HashMap<>(); + SupportingNode supportingNode1 = new SupportingNodeBuilder() + .setNodeRef(new NodeId("node 1")) + .setNetworkRef(new NetworkId(NetworkUtils.CLLI_NETWORK_ID)) + .build(); supportingNodes1 - .add(new SupportingNodeBuilder() - .setNodeRef(new NodeId("node 1")) - .setNetworkRef(new NetworkId(NetworkUtils.CLLI_NETWORK_ID)) - .build()); + .put(supportingNode1.key(),supportingNode1); + SupportingNode supportingNode2 = new SupportingNodeBuilder() + .setNodeRef(new NodeId("node 2")) + .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID)) + .build(); supportingNodes1 - .add(new SupportingNodeBuilder() - .setNodeRef(new NodeId("node 2")) - .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID)) - .build()); + .put(supportingNode2.key(),supportingNode2); return supportingNodes1; } - public static NodeBuilder getNodeBuilder(List supportingNodes1) { + public static NodeBuilder getNodeBuilder(Map supportingNodes1) { //update tp of nodes @@ -150,39 +153,39 @@ public class NodeUtils { TerminationPoint1Builder tp1Bldr = new TerminationPoint1Builder(); tp1Bldr.setTpType(OpenroadmTpType.XPONDERNETWORK); - xpdrTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build()); + xpdrTpBldr.addAugmentation(tp1Bldr.build()); + TerminationPoint xpdr = xpdrTpBldr.build(); org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 node1 = - new Node1Builder().setTerminationPoint(ImmutableList.of(xpdrTpBldr.build())).build(); + new Node1Builder().setTerminationPoint(Map.of(xpdr.key(),xpdr)).build(); return new NodeBuilder() .setNodeId(new NodeId("node 1")) .withKey(new NodeKey(new NodeId("node 1"))) - .addAugmentation( - Node1.class, node1) + .addAugmentation(node1) .setSupportingNode(supportingNodes1); } private Link genereateLinkBuilder() { - List linkConcentationValues = new ArrayList<>(); + Map linkConcentationValues = new HashMap<>(); LinkConcatenation linkConcatenation = new LinkConcatenationBuilder() .setFiberType(LinkConcatenation.FiberType.Truewave) .setPmd(new FiberPmd(BigDecimal.ONE)) - .setSRLGId(Long.valueOf(1)) - .setSRLGLength(Long.valueOf(1)) + .setSRLGId(Uint32.valueOf(1)) + .setSRLGLength(Uint32.valueOf(1)) .build(); LinkConcatenation linkConcatenation2 = new LinkConcatenationBuilder() .setFiberType(LinkConcatenation.FiberType.Truewave) .setPmd(new FiberPmd(BigDecimal.ONE)) - .setSRLGId(Long.valueOf(1)) - .setSRLGLength(Long.valueOf(1)) + .setSRLGId(Uint32.valueOf(1)) + .setSRLGLength(Uint32.valueOf(1)) .build(); - linkConcentationValues.add(linkConcatenation); - linkConcentationValues.add(linkConcatenation2); + linkConcentationValues.put(linkConcatenation.key(),linkConcatenation); + linkConcentationValues.put(linkConcatenation2.key(),linkConcatenation2); - List - amplifiedLinkValues = new ArrayList<>(); + Map + amplifiedLinkValues = new HashMap<>(); org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes.AmplifiedLink al = new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes .AmplifiedLinkBuilder().setSectionElement(new SectionElementBuilder() @@ -203,7 +206,7 @@ public class NodeUtils { .build()) .build()) .build()) - .setSectionEltNumber(Integer.valueOf(1)).build(); + .setSectionEltNumber(Uint16.valueOf(1)).build(); org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes.AmplifiedLink al2 = new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes .AmplifiedLinkBuilder().setSectionElement(new SectionElementBuilder() @@ -225,16 +228,16 @@ public class NodeUtils { .build()) .build()) .build()) - .setSectionEltNumber(Integer.valueOf(1)).build(); + .setSectionEltNumber(Uint16.valueOf(1)).build(); - amplifiedLinkValues.add(al); - amplifiedLinkValues.add(al2); + amplifiedLinkValues.put(al.key(),al); + amplifiedLinkValues.put(al2.key(),al2); Augmentation aug11 = new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Link1Builder() - .setAdministrativeGroup(Long.valueOf(123)) + .setAdministrativeGroup(Uint32.valueOf(123)) .setAdministrativeState(State.InService) .setAmplified(true) - .setLinkLatency(Long.valueOf(123)) + .setLinkLatency(Uint32.valueOf(123)) .setLinkLength(BigDecimal.valueOf(123)) .setOMSAttributes(new OMSAttributesBuilder() .setAmplifiedLink(new AmplifiedLinkBuilder() @@ -242,7 +245,7 @@ public class NodeUtils { .build()) .setOppositeLink(new LinkId("link 1")) .setSpan(new SpanBuilder().build()) - .setTEMetric(Long.valueOf(123)).build()) + .setTEMetric(Uint32.valueOf(123)).build()) .setOperationalState(State.InService).build(); TransactionUtils.getNetworkForSpanLoss(); @@ -256,7 +259,7 @@ public class NodeUtils { new DestinationBuilder() .setDestNode(new NodeId("OpenROADM-3-1-DEG1")) .setDestTp("DEG1-TTP-RX").build()) - .addAugmentation(Link1.class, aug11) + .addAugmentation(aug11) .build(); @@ -279,86 +282,63 @@ public class NodeUtils { return supportingNodes1; } - public static NodeBuilder getOTNNodeBuilder(List supportingNodes1, + public static NodeBuilder getOTNNodeBuilder(Map supportingNodes1, OpenroadmTpType openroadmTpType) { org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.TerminationPoint1Builder tp1Bldr = getTerminationPoint1Builder(openroadmTpType); TerminationPointBuilder xpdrTpBldr = getTerminationPointBuilder(openroadmTpType); xpdrTpBldr - .addAugmentation( - org.opendaylight - .yang.gen.v1.http.org.openroadm.common.network.rev181130.TerminationPoint1.class, - tp1Bldr.build()); - - xpdrTpBldr.addAugmentation( - org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130 - .TerminationPoint1.class, - createAnother2TerminationPoint(openroadmTpType).build()); - xpdrTpBldr.addAugmentation( - org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.TerminationPoint1.class, - createAnotherTerminationPoint(openroadmTpType).build()); + .addAugmentation(tp1Bldr.build()); + + xpdrTpBldr.addAugmentation(createAnother2TerminationPoint(openroadmTpType).build()); + xpdrTpBldr.addAugmentation(createAnotherTerminationPoint(openroadmTpType).build()); org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1 node1 = getNode1(); + TerminationPoint xpdr = xpdrTpBldr.build(); org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 node1Rev180226 = new Node1Builder() - .setTerminationPoint(ImmutableList.of(xpdrTpBldr.build())) + .setTerminationPoint(Map.of(xpdr.key(),xpdr)) .build(); org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 nodeIetf = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226 .Node1Builder() - .setTerminationPoint(ImmutableList.of(xpdrTpBldr.build())) + .setTerminationPoint(Map.of(xpdr.key(),xpdr)) .build(); return new NodeBuilder() .setNodeId(new NodeId("node_test")) .withKey(new NodeKey(new NodeId("node 1"))) - .addAugmentation( - Node1.class, node1Rev180226) - .addAugmentation( - org.opendaylight - .yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1.class, - node1) - .addAugmentation( - org.opendaylight - .yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class, - nodeIetf - ) + .addAugmentation(node1Rev180226) + .addAugmentation(node1) + .addAugmentation(nodeIetf) .setSupportingNode(supportingNodes1); } - public static NodeBuilder getOTNNodeBuilderEmpty(List supportingNodes1, + public static NodeBuilder getOTNNodeBuilderEmpty(Map supportingNodes1, OpenroadmTpType openroadmTpType) { org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.TerminationPoint1Builder tp1Bldr = getTerminationPoint1Builder(openroadmTpType); TerminationPointBuilder xpdrTpBldr = getTerminationPointBuilder(openroadmTpType); - xpdrTpBldr.addAugmentation( - org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130 - .TerminationPoint1.class, - tp1Bldr.build()); - xpdrTpBldr.addAugmentation( - org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130 - .TerminationPoint1.class, - createAnotherTerminationPoint(openroadmTpType).build()); + xpdrTpBldr.addAugmentation(tp1Bldr.build()); + xpdrTpBldr.addAugmentation(createAnotherTerminationPoint(openroadmTpType).build()); org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1 node1 = getNode1Empty(); + TerminationPoint xpdr = xpdrTpBldr.build(); org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 node1Rev180226 = new Node1Builder() - .setTerminationPoint(ImmutableList.of(xpdrTpBldr.build())) + .setTerminationPoint(Map.of(xpdr.key(),xpdr)) .build(); return new NodeBuilder() .setNodeId(new NodeId("node_test")) .withKey(new NodeKey(new NodeId("node 1"))) - .addAugmentation( - Node1.class, node1Rev180226) - .addAugmentation( - org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1.class, - node1) + .addAugmentation(node1Rev180226) + .addAugmentation(node1) .setSupportingNode(supportingNodes1); } @@ -379,11 +359,11 @@ public class NodeUtils { } private static DegreeAttributes getDegAttributes() { + AvailableWavelengths aval = new AvailableWavelengthsBuilder() + .setIndex(Uint32.valueOf(20)) + .build(); return (new DegreeAttributesBuilder()) - .setAvailableWavelengths( - Collections.singletonList(new AvailableWavelengthsBuilder() - .setIndex(20L) - .build())) + .setAvailableWavelengths(Map.of(aval.key(),aval)) .build(); } @@ -393,25 +373,18 @@ public class NodeUtils { private static DegreeAttributes getEmptyDegAttributes() { return (new DegreeAttributesBuilder()) - .setAvailableWavelengths( - new ArrayList<>()) + .setAvailableWavelengths(Map.of()) .build(); } private static SrgAttributes getEmptySrgAttributes() { - List - waveList = new ArrayList<>(); - return new SrgAttributesBuilder().setAvailableWavelengths(waveList).build(); + return new SrgAttributesBuilder().setAvailableWavelengths(Map.of()).build(); } private static TerminationPointBuilder getTerminationPointBuilder(OpenroadmTpType openroadmTpType) { return new TerminationPointBuilder() .setTpId(new TpId("2")) - .addAugmentation( - org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130 - .TerminationPoint1.class, - createOTNTerminationPoint(openroadmTpType).build()); + .addAugmentation(createOTNTerminationPoint(openroadmTpType).build()); } private static org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.TerminationPoint1Builder @@ -429,11 +402,11 @@ public class NodeUtils { return new org.opendaylight .yang.gen.v1.http.org.openroadm.network.topology.rev181130.TerminationPoint1Builder() .setTpType(openroadmTpType) - .setCtpAttributes((new CtpAttributesBuilder()).setUsedWavelengths(new ArrayList<>()).build()) - .setCpAttributes((new CpAttributesBuilder()).setUsedWavelengths(new ArrayList<>()).build()) - .setTxTtpAttributes((new TxTtpAttributesBuilder()).setUsedWavelengths(new ArrayList<>()).build()) - .setRxTtpAttributes((new RxTtpAttributesBuilder()).setUsedWavelengths(new ArrayList<>()).build()) - .setPpAttributes((new PpAttributesBuilder()).setUsedWavelength(new ArrayList<>()).build()) + .setCtpAttributes((new CtpAttributesBuilder()).setUsedWavelengths(Map.of()).build()) + .setCpAttributes((new CpAttributesBuilder()).setUsedWavelengths(Map.of()).build()) + .setTxTtpAttributes((new TxTtpAttributesBuilder()).setUsedWavelengths(Map.of()).build()) + .setRxTtpAttributes((new RxTtpAttributesBuilder()).setUsedWavelengths(Map.of()).build()) + .setPpAttributes((new PpAttributesBuilder()).setUsedWavelength(Map.of()).build()) .setXpdrClientAttributes((new XpdrClientAttributesBuilder()).build()) .setXpdrPortAttributes((new XpdrPortAttributesBuilder()).build()) .setXpdrNetworkAttributes(new XpdrNetworkAttributesBuilder() @@ -457,11 +430,11 @@ public class NodeUtils { .setIfCapType(If1GEODU0.class) .build(); - List supIfCapaList = new ArrayList<>(); - supIfCapaList.add(supIfCapa); - supIfCapaList.add(supIfCapa1); - supIfCapaList.add(supIfCapa2); - supIfCapaList.add(supIfCapa3); + Map supIfCapaList = new HashMap<>(); + supIfCapaList.put(supIfCapa.key(),supIfCapa); + supIfCapaList.put(supIfCapa1.key(),supIfCapa1); + supIfCapaList.put(supIfCapa2.key(),supIfCapa2); + supIfCapaList.put(supIfCapa3.key(),supIfCapa3); TpSupportedInterfaces tpSupIf = new TpSupportedInterfacesBuilder() .setSupportedInterfaceCapability(supIfCapaList) @@ -483,11 +456,14 @@ public class NodeUtils { .setTpType(openroadmTpType); } - private static List create96AvalWaveSrg() { - List - waveList = new ArrayList<>(); + Map + waveList = new HashMap<>(); for (int i = 1; i < 97; i++) { org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev181130.srg.node.attributes @@ -497,7 +473,10 @@ public class NodeUtils { .setIndex(Uint32.valueOf(i)) .withKey(new org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev181130.srg.node.attributes .AvailableWavelengthsKey(Uint32.valueOf(i))); - waveList.add(avalBldr.build()); + org.opendaylight.yang.gen.v1.http.org.openroadm.srg + .rev181130.srg.node.attributes.AvailableWavelengths aval = + avalBldr.build(); + waveList.put(aval.key(),aval); } return waveList; } diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/utils/PceTestData.java b/pce/src/test/java/org/opendaylight/transportpce/pce/utils/PceTestData.java index 58fa93319..cb08b6cb9 100644 --- a/pce/src/test/java/org/opendaylight/transportpce/pce/utils/PceTestData.java +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/utils/PceTestData.java @@ -8,6 +8,7 @@ package org.opendaylight.transportpce.pce.utils; import java.util.Arrays; +import java.util.Map; import org.opendaylight.transportpce.common.ResponseCodes; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev200128.PathComputationRequestInput; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev200128.PathComputationRequestInputBuilder; @@ -37,6 +38,7 @@ import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev171017.constraints.sp.co.routing.or.general.general.ExcludeBuilder; import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev171017.constraints.sp.co.routing.or.general.general.IncludeBuilder; import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev171017.constraints.sp.co.routing.or.general.general.LatencyBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev171017.constraints.sp.co.routing.or.general.general.include_.OrderedHops; import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev171017.constraints.sp.co.routing.or.general.general.include_.OrderedHopsBuilder; import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev171017.diversity.existing.service.contraints.sp.ExistingServiceApplicability; import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev171017.diversity.existing.service.contraints.sp.ExistingServiceApplicabilityBuilder; @@ -53,6 +55,8 @@ import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128.service.endpoint.sp.TxDirectionBuilder; import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128.service.handler.header.ServiceHandlerHeader; import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128.service.handler.header.ServiceHandlerHeaderBuilder; +import org.opendaylight.yangtools.yang.common.Uint16; +import org.opendaylight.yangtools.yang.common.Uint32; public final class PceTestData { @@ -97,7 +101,7 @@ public final class PceTestData { .build(); ServiceAEnd serviceAEnd = new ServiceAEndBuilder() .setServiceFormat(ServiceFormat.ODU) - .setServiceRate(100L) + .setServiceRate(Uint32.valueOf(100)) .setClli("clli11") .setNodeId("XPONDER-2-2") .setTxDirection(new TxDirectionBuilder().setPort( @@ -125,7 +129,7 @@ public final class PceTestData { .build(); ServiceZEnd serviceZEnd = new ServiceZEndBuilder() .setServiceFormat(ServiceFormat.ODU) - .setServiceRate(0L) + .setServiceRate(Uint32.valueOf(0)) .setClli("Some clli11") .setNodeId("XPONDER-1-2") .setTxDirection(new TxDirectionBuilder().setPort( @@ -190,7 +194,7 @@ public final class PceTestData { .build(); ServiceAEnd serviceAEnd = new ServiceAEndBuilder() .setServiceFormat(ServiceFormat.Ethernet) - .setServiceRate(100L) + .setServiceRate(Uint32.valueOf(100)) .setClli("clli11") .setNodeId("XPONDER-2-2") .setTxDirection(new TxDirectionBuilder().setPort( @@ -218,7 +222,7 @@ public final class PceTestData { .build(); ServiceZEnd serviceZEnd = new ServiceZEndBuilder() .setServiceFormat(ServiceFormat.Ethernet) - .setServiceRate(0L) + .setServiceRate(Uint32.valueOf(0)) .setClli("Some clli11") .setNodeId("XPONDER-1-2") .setTxDirection(new TxDirectionBuilder().setPort( @@ -283,7 +287,7 @@ public final class PceTestData { .build(); ServiceAEnd serviceAEnd = new ServiceAEndBuilder() .setServiceFormat(ServiceFormat.Ethernet) - .setServiceRate(100L) + .setServiceRate(Uint32.valueOf(100)) .setClli("clli11") .setNodeId("XPONDER-2-2") .setTxDirection(new TxDirectionBuilder().setPort( @@ -311,7 +315,7 @@ public final class PceTestData { .build(); ServiceZEnd serviceZEnd = new ServiceZEndBuilder() .setServiceFormat(ServiceFormat.Ethernet) - .setServiceRate(0L) + .setServiceRate(Uint32.valueOf(0)) .setClli("Some clli11") .setNodeId("XPONDER-1-2") .setTxDirection(new TxDirectionBuilder().setPort( @@ -419,11 +423,11 @@ public final class PceTestData { .setRequestId("request 1") .build(); ServiceAEnd serviceAEnd = new ServiceAEndBuilder() - .setServiceRate(0L) + .setServiceRate(Uint32.valueOf(0)) .setNodeId("XPONDER-1-2") .build(); ServiceZEnd serviceZEnd = new ServiceZEndBuilder() - .setServiceRate(0L) + .setServiceRate(Uint32.valueOf(0)) .setNodeId("XPONDER-3-2") .build(); PathComputationRequestInput input = new PathComputationRequestInputBuilder() @@ -486,13 +490,18 @@ public final class PceTestData { .setRequestId("request 1") .build(); ServiceAEnd serviceAEnd = new ServiceAEndBuilder() - .setServiceRate(0L) + .setServiceRate(Uint32.valueOf(0)) .setNodeId("XPONDER-1-2") .build(); ServiceZEnd serviceZEnd = new ServiceZEndBuilder() - .setServiceRate(0L) + .setServiceRate(Uint32.valueOf(0)) .setNodeId("XPONDER-3-2") .build(); + OrderedHops orderedHops = new OrderedHopsBuilder() + .setHopNumber(Uint16.valueOf(22)) + .setHopType(new HopTypeBuilder() + .setHopType(new HopTypeBuilder().getHopType()).build()) + .build(); PathComputationRequestInput input = new PathComputationRequestInputBuilder() .setServiceHandlerHeader(serviceHandlerHeader) .setServiceName("service 1") @@ -505,13 +514,9 @@ public final class PceTestData { .setExclude(new ExcludeBuilder() .setNodeId(Arrays.asList("OpenROADM-2-2")) .build()) - .setLatency(new LatencyBuilder().setMaxLatency(3223L).build()) + .setLatency(new LatencyBuilder().setMaxLatency(Uint32.valueOf(3223)).build()) .setInclude(new IncludeBuilder() - .setOrderedHops(Arrays.asList(new OrderedHopsBuilder() - .setHopNumber(22) - .setHopType(new HopTypeBuilder() - .setHopType(new HopTypeBuilder().getHopType()).build()) - .build())) + .setOrderedHops(Map.of(orderedHops.key(),orderedHops)) .build()) .build()) .build()) @@ -567,11 +572,11 @@ public final class PceTestData { .setRequestId("request 1") .build(); ServiceAEnd serviceAEnd = new ServiceAEndBuilder() - .setServiceRate(0L) + .setServiceRate(Uint32.valueOf(0)) .setNodeId("XPONDER-1-2") .build(); ServiceZEnd serviceZEnd = new ServiceZEndBuilder() - .setServiceRate(0L) + .setServiceRate(Uint32.valueOf(0)) .setNodeId("XPONDER-3-2") .build(); PathComputationRequestInput input = new PathComputationRequestInputBuilder() @@ -612,11 +617,11 @@ public final class PceTestData { .setRequestId("request 1") .build(); ServiceAEnd serviceAEnd = new ServiceAEndBuilder() - .setServiceRate(0L) + .setServiceRate(Uint32.valueOf(0)) .setNodeId("XPONDER-1-2") .build(); ServiceZEnd serviceZEnd = new ServiceZEndBuilder() - .setServiceRate(0L) + .setServiceRate(Uint32.valueOf(0)) .setNodeId("XPONDER-3-2") .build(); HardConstraints hardConstrains = new HardConstraintsBuilder().build(); @@ -639,11 +644,11 @@ public final class PceTestData { .setRequestId("request 1") .build(); ServiceAEnd serviceAEnd = new ServiceAEndBuilder() - .setServiceRate(0L) + .setServiceRate(Uint32.valueOf(0)) .setNodeId("XPONDER-1-2") .build(); ServiceZEnd serviceZEnd = new ServiceZEndBuilder() - .setServiceRate(0L) + .setServiceRate(Uint32.valueOf(0)) .setNodeId("XPONDER-3-2") .build(); PathComputationRequestInput input = new PathComputationRequestInputBuilder() @@ -679,14 +684,12 @@ public final class PceTestData { private static PathDescription createPathDescription(long azRate, long azWaveLength, long zaRate, long zaWaveLength) { AToZDirection atozDirection = new AToZDirectionBuilder() - .setRate(azRate) - .setAToZWavelengthNumber(azWaveLength) - .setAToZ(null) + .setRate(Uint32.valueOf(azRate)) + .setAToZWavelengthNumber(Uint32.valueOf(azWaveLength)) .build(); ZToADirection ztoaDirection = new ZToADirectionBuilder() - .setRate(zaRate) - .setZToAWavelengthNumber(zaWaveLength) - .setZToA(null) + .setRate(Uint32.valueOf(zaRate)) + .setZToAWavelengthNumber(Uint32.valueOf(zaWaveLength)) .build(); PathDescription pathDescription = new PathDescriptionBuilder() .setAToZDirection(atozDirection) @@ -733,11 +736,11 @@ public final class PceTestData { .setNode(true).build(); ServiceAEnd serviceAEnd = new ServiceAEndBuilder() - .setServiceRate(0L) + .setServiceRate(Uint32.valueOf(0)) .setNodeId("XPONDER-1-1") .build(); ServiceZEnd serviceZEnd = new ServiceZEndBuilder() - .setServiceRate(0L) + .setServiceRate(Uint32.valueOf(0)) .setNodeId("XPONDER-3-1") .build(); @@ -748,7 +751,7 @@ public final class PceTestData { .setHardConstraints(new HardConstraintsBuilder() .setCoRoutingOrGeneral(new GeneralBuilder() .setLatency(new LatencyBuilder() - .setMaxLatency(3223L).build()) + .setMaxLatency(Uint32.valueOf(3223)).build()) .setDiversity(new DiversityBuilder() .setExistingService(Arrays.asList(base.getServiceName())) .setExistingServiceApplicability(nodeTrue) @@ -765,7 +768,7 @@ public final class PceTestData { new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531 .service.create.input.ServiceAEndBuilder() .setClli("clli") - .setServiceRate((long) 0) + .setServiceRate(Uint32.valueOf(0)) .setNodeId(new NodeIdType("XPONDER-1-2")) .setTxDirection(new org.opendaylight.yang.gen.v1.http.org .openroadm.common.service.types.rev190531.service.endpoint.TxDirectionBuilder() @@ -781,7 +784,7 @@ public final class PceTestData { new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531 .service.create.input.ServiceZEndBuilder() .setClli("clli") - .setServiceRate((long) 0) + .setServiceRate(Uint32.valueOf(0)) .setNodeId(new NodeIdType("XPONDER-3-2")) .setTxDirection(new org.opendaylight.yang.gen.v1.http.org .openroadm.common.service.types.rev190531.service.endpoint.TxDirectionBuilder() @@ -813,7 +816,7 @@ public final class PceTestData { .build(); ServiceAEnd serviceAEnd = new ServiceAEndBuilder() .setServiceFormat(ServiceFormat.Ethernet) - .setServiceRate(100L) + .setServiceRate(Uint32.valueOf(100)) .setClli("clli11") .setNodeId(nodeA) .setTxDirection(new TxDirectionBuilder().setPort( @@ -841,7 +844,7 @@ public final class PceTestData { .build(); ServiceZEnd serviceZEnd = new ServiceZEndBuilder() .setServiceFormat(ServiceFormat.Ethernet) - .setServiceRate(0L) + .setServiceRate(Uint32.valueOf(0)) .setClli("Some clli11") .setNodeId(nodeZ) .setTxDirection(new TxDirectionBuilder().setPort( diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/utils/PceTestUtils.java b/pce/src/test/java/org/opendaylight/transportpce/pce/utils/PceTestUtils.java index 5aee69c20..61da615cc 100644 --- a/pce/src/test/java/org/opendaylight/transportpce/pce/utils/PceTestUtils.java +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/utils/PceTestUtils.java @@ -12,10 +12,14 @@ import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.Reader; +import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.Optional; import java.util.concurrent.ExecutionException; import java.util.stream.Collectors; +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; import org.junit.Assert; import org.opendaylight.mdsal.binding.api.DataBroker; import org.opendaylight.mdsal.binding.api.WriteTransaction; @@ -26,6 +30,7 @@ import org.opendaylight.transportpce.common.converter.XMLDataObjectConverter; import org.opendaylight.transportpce.common.converter.api.DataObjectConverter; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev200128.PathComputationRequestOutput; 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.atoz.direction.AToZKey; import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev200629.pce.resource.resource.resource.Node; 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; @@ -83,10 +88,12 @@ public final class PceTestUtils { Networks networks = (Networks) JsonUtil.getInstance().getDataObjectFromJson(networkReader, QName.create("urn:ietf:params:xml:ns:yang:ietf-network", "2018-02-26", "networks")); - saveOpenRoadmNetwork(networks.getNetwork().get(0), NetworkUtils.UNDERLAY_NETWORK_ID, dataBroker); + @NonNull + List networkMap = new ArrayList<>(networks.nonnullNetwork().values()); + saveOpenRoadmNetwork(networkMap.get(0), NetworkUtils.UNDERLAY_NETWORK_ID, dataBroker); networks = (Networks) JsonUtil.getInstance().getDataObjectFromJson(topoReader, QName.create("urn:ietf:params:xml:ns:yang:ietf-network", "2018-02-26", "networks")); - saveOpenRoadmNetwork(networks.getNetwork().get(0), NetworkUtils.OVERLAY_NETWORK_ID, dataBroker); + saveOpenRoadmNetwork(networkMap.get(0), NetworkUtils.OVERLAY_NETWORK_ID, dataBroker); } catch (IOException | ExecutionException | InterruptedException e) { LOG.error("Cannot init test ", e); Assert.fail("Cannot init test "); @@ -164,8 +171,9 @@ public final class PceTestUtils { } private static List getNodesFromPath(PathComputationRequestOutput output) { - List atozList = output.getResponseParameters().getPathDescription().getAToZDirection().getAToZ(); - return atozList.stream() + @Nullable Map atozList = output.getResponseParameters() + .getPathDescription().getAToZDirection().getAToZ(); + return atozList.values().stream() .filter(aToZ -> { if ((aToZ.getResource() == null) || (aToZ.getResource().getResource() == null)) { LOG.debug("Diversity constraint: Resource of AToZ node {} is null! Skipping this node!", diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/utils/TransactionUtils.java b/pce/src/test/java/org/opendaylight/transportpce/pce/utils/TransactionUtils.java index b44f47e39..0318b4c60 100644 --- a/pce/src/test/java/org/opendaylight/transportpce/pce/utils/TransactionUtils.java +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/utils/TransactionUtils.java @@ -10,9 +10,8 @@ package org.opendaylight.transportpce.pce.utils; import java.math.BigDecimal; -import java.util.ArrayList; import java.util.Collections; -import java.util.List; +import java.util.HashMap; import java.util.Map; import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; @@ -23,7 +22,6 @@ import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmappi import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200827.network.nodes.MappingBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.link.types.rev181130.FiberPmd; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.link.types.rev181130.RatioDB; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1Builder; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev181130.State; import org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev181130.degree.node.attributes.AvailableWavelengthsBuilder; @@ -32,10 +30,11 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.interfac import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.OrgOpenroadmDevice; import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev181130.AdminStates; import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes.AmplifiedLink; +import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes.AmplifiedLinkKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes.amplified.link.SectionElementBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.span.attributes.LinkConcatenation; import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.span.attributes.LinkConcatenationBuilder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Link1; +import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.span.attributes.LinkConcatenationKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Link1Builder; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.link.OMSAttributesBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.link.oms.attributes.AmplifiedLinkBuilder; @@ -54,15 +53,19 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev181019.current.pm.l import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev181019.current.pm.list.CurrentPmEntryBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev181019.current.pm.val.group.Measurement; import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev181019.current.pm.val.group.MeasurementBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev181019.current.pm.val.group.MeasurementKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.types.rev171215.PmDataType; import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.types.rev171215.Validity; +import org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev181130.srg.node.attributes.AvailableWavelengths; 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.NodeId; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.NetworkBuilder; 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.NodeBuilder; +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.rev180226.networks.network.node.SupportingNode; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNodeBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNodeKey; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.LinkId; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Network1; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Network1Builder; @@ -74,6 +77,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types. import org.opendaylight.yangtools.yang.binding.Augmentation; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.common.Uint16; import org.opendaylight.yangtools.yang.common.Uint32; public final class TransactionUtils { @@ -93,47 +97,46 @@ public final class TransactionUtils { public static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks .Network getNetworkForSpanLoss() { - List linkConcentationValues = new ArrayList<>(); + Map linkConcentationValues = new HashMap<>(); LinkConcatenation linkConcatenation = new LinkConcatenationBuilder() .setFiberType(LinkConcatenation.FiberType.Truewave) .setPmd(new FiberPmd(BigDecimal.ONE)) - .setSRLGId(Long.valueOf(1)) - .setSRLGLength(Long.valueOf(1)) + .setSRLGId(Uint32.valueOf(1)) + .setSRLGLength(Uint32.valueOf(1)) .build(); LinkConcatenation linkConcatenation2 = new LinkConcatenationBuilder() .setFiberType(LinkConcatenation.FiberType.Truewave) .setPmd(new FiberPmd(BigDecimal.ONE)) - .setSRLGId(Long.valueOf(1)) - .setSRLGLength(Long.valueOf(1)) + .setSRLGId(Uint32.valueOf(1)) + .setSRLGLength(Uint32.valueOf(1)) .build(); - linkConcentationValues.add(linkConcatenation); - linkConcentationValues.add(linkConcatenation2); + linkConcentationValues.put(linkConcatenation.key(),linkConcatenation); + linkConcentationValues.put(linkConcatenation2.key(),linkConcatenation2); // create 2 openroadm-topology degree nodes, end points of the link to be // measured - List supportingNodeListA = new ArrayList<>(); - supportingNodeListA.add(new SupportingNodeBuilder().setNetworkRef(new NetworkId("openroadm-network")) - .setNodeRef(new NodeId("ROADM-A1")).build()); - Node ietfNodeA = new NodeBuilder().setNodeId(new NodeId("ROADM-A1-DEG2")).setSupportingNode(supportingNodeListA) - .addAugmentation(Node1.class,getNode1AugImpl()).build(); - List supportingNodeListC = new ArrayList<>(); - supportingNodeListC.add(new SupportingNodeBuilder().setNetworkRef(new NetworkId("openroadm-network")) - - .setNodeRef(new NodeId("ROADM-C1")).build()); - supportingNodeListC.add(new SupportingNodeBuilder().setNetworkRef(new NetworkId("clli-network")) - .setNodeRef(new NodeId("ROADM-C2")).build()); + SupportingNode supportingNodeA = new SupportingNodeBuilder().setNetworkRef(new NetworkId("openroadm-network")) + .setNodeRef(new NodeId("ROADM-A1")).build(); + Node ietfNodeA = new NodeBuilder().setNodeId(new NodeId("ROADM-A1-DEG2")) + .setSupportingNode(Map.of(supportingNodeA.key(),supportingNodeA)) + .addAugmentation(getNode1AugImpl()).build(); + Map supportingNodeListC = new HashMap<>(); + SupportingNode supportingNode = new SupportingNodeBuilder().setNetworkRef(new NetworkId("openroadm-network")) + .setNodeRef(new NodeId("ROADM-C1")).build(); + supportingNodeListC.put(supportingNode.key(),supportingNode); + SupportingNode supportingNode2 = new SupportingNodeBuilder().setNetworkRef(new NetworkId("clli-network")) + .setNodeRef(new NodeId("ROADM-C2")).build(); + supportingNodeListC.put(supportingNode2.key(),supportingNode2); Node ietfNodeC = new NodeBuilder().setNodeId(new NodeId("ROADM-C1-DEG1")).setSupportingNode(supportingNodeListC) - .addAugmentation(Node1.class,getNode1AugImpl()) - .addAugmentation( - org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1.class, - getNode1()) + .addAugmentation(getNode1AugImpl()) + .addAugmentation(getNode1()) .build(); - List ietfNodeList = new ArrayList<>(); - ietfNodeList.add(ietfNodeA); - ietfNodeList.add(ietfNodeC); + Map ietfNodeList = new HashMap<>(); + ietfNodeList.put(ietfNodeA.key(),ietfNodeA); + ietfNodeList.put(ietfNodeC.key(),ietfNodeC); - List - amplifiedLinkValues = new ArrayList<>(); + Map + amplifiedLinkValues = new HashMap<>(); org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes.AmplifiedLink al = new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes .AmplifiedLinkBuilder().setSectionElement(new SectionElementBuilder() @@ -154,7 +157,7 @@ public final class TransactionUtils { .build()) .build()) .build()) - .setSectionEltNumber(Integer.valueOf(1)).build(); + .setSectionEltNumber(Uint16.valueOf(1)).build(); org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes.AmplifiedLink al2 = new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes .AmplifiedLinkBuilder().setSectionElement(new SectionElementBuilder() @@ -176,61 +179,58 @@ public final class TransactionUtils { .build()) .build()) .build()) - .setSectionEltNumber(Integer.valueOf(1)).build(); - amplifiedLinkValues.add(al); - amplifiedLinkValues.add(al2); + .setSectionEltNumber(Uint16.valueOf(1)).build(); + amplifiedLinkValues.put(al.key(),al); + amplifiedLinkValues.put(al2.key(),al2); Map>, Augmentation> map = Collections.emptyMap(); - Augmentation aug11 = new Link1Builder().setAdministrativeGroup(Long.valueOf(123)) + Augmentation aug11 = new Link1Builder().setAdministrativeGroup(Uint32.valueOf(123)) .setAdministrativeState(State.InService) .setAmplified(true) - .setLinkLatency(Long.valueOf(123)) + .setLinkLatency(Uint32.valueOf(123)) .setLinkLength(BigDecimal.valueOf(123)) .setOMSAttributes(new OMSAttributesBuilder() .setAmplifiedLink(new AmplifiedLinkBuilder().setAmplifiedLink(amplifiedLinkValues).build()) .setOppositeLink(new LinkId("link 1")) .setSpan(new SpanBuilder().build()) - .setTEMetric(Long.valueOf(123)).build()) + .setTEMetric(Uint32.valueOf(123)).build()) .setOperationalState(State.InService).build(); org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Link1 aug12 = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Link1Builder() .setLinkType(OpenroadmLinkType.ROADMTOROADM).build(); Augmentation aug21 = new Link1Builder() - .setAdministrativeGroup(Long.valueOf(123)) + .setAdministrativeGroup(Uint32.valueOf(123)) .setAdministrativeState(State.InService) .setAmplified(true) - .setLinkLatency(Long.valueOf(123)) + .setLinkLatency(Uint32.valueOf(123)) .setLinkLength(BigDecimal.valueOf(123)) .setOMSAttributes(new OMSAttributesBuilder() .setAmplifiedLink(new AmplifiedLinkBuilder().setAmplifiedLink(amplifiedLinkValues).build()) .setOppositeLink(new LinkId("link 1")) .setSpan(new SpanBuilder().build()) - .setTEMetric(Long.valueOf(123)).build()) + .setTEMetric(Uint32.valueOf(123)).build()) .setOperationalState(State.InService).build(); org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Link1 aug22 = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Link1Builder() .setLinkType(OpenroadmLinkType.ROADMTOROADM).build(); // create the roadm-to-roadm link to be measured - List ietfLinkList = new ArrayList<>(); Link roadm2roadmLink = new LinkBuilder().setLinkId(new LinkId("ROADM-A1-to-ROADM-C1")) .setSource(new SourceBuilder().setSourceNode(ietfNodeA.getNodeId()) .setSourceTp("DEG2-TTP-TXRX").build()) .setDestination( new DestinationBuilder().setDestNode(ietfNodeC.getNodeId()).setDestTp("DEG1-TTP-TXRX").build()) - .addAugmentation(Link1.class, aug11) - .addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Link1.class, - aug12) - .addAugmentation(Link1.class, aug21) - .addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Link1.class, - aug22) + .addAugmentation(aug11) + .addAugmentation(aug12) + .addAugmentation(aug21) + .addAugmentation(aug22) .build(); - ietfLinkList.add(roadm2roadmLink); // create the ietf network - Network1 openroadmAugmToIetfNetwork = new Network1Builder().setLink(ietfLinkList).build(); + Network1 openroadmAugmToIetfNetwork = new Network1Builder() + .setLink(Map.of(roadm2roadmLink.key(),roadm2roadmLink)).build(); // openroadm Topology builder NetworkBuilder ietfNetworkBldr = new NetworkBuilder() .setNetworkId(new NetworkId("openroadm-topology")) .setNode(ietfNodeList) - .addAugmentation(Network1.class, openroadmAugmToIetfNetwork); + .addAugmentation(openroadmAugmToIetfNetwork); return ietfNetworkBldr.build(); } @@ -255,19 +255,15 @@ public final class TransactionUtils { .setPmParameterValue(new PmDataType(new BigDecimal("-3.5"))) .setValidity(Validity.Complete) .build(); - List measurementListA = new ArrayList<>(); - measurementListA.add(measurementA); CurrentPm cpA = new CurrentPmBuilder() .setType(org.opendaylight.yang.gen.v1.http.org.openroadm.pm.types.rev171215.PmNamesEnum .OpticalPowerOutput) - .setMeasurement(measurementListA) + .setMeasurement(Map.of(measurementA.key(),measurementA)) .build(); - List currentPmListA = new ArrayList<>(); - currentPmListA.add(cpA); InstanceIdentifier interfaceIIDA = InstanceIdentifier.create(OrgOpenroadmDevice.class) .child(Interface.class, new InterfaceKey("OTS-DEG2-TTP-TXRX")); CurrentPmEntry currentPmEntryA = new CurrentPmEntryBuilder() - .setCurrentPm(currentPmListA) + .setCurrentPm(Map.of(cpA.key(),cpA)) .setPmResourceInstance(interfaceIIDA) .setPmResourceType( org.opendaylight.yang.gen.v1.http.org.openroadm.resource.types.rev181019.ResourceTypeEnum @@ -275,9 +271,8 @@ public final class TransactionUtils { .setPmResourceTypeExtension("") .setRetrievalTime(new DateAndTime("2018-06-07T13:22:58+00:00")) .build(); - List currentPmEntryListA = new ArrayList<>(); - currentPmEntryListA.add(currentPmEntryA); - return Optional.of(new CurrentPmListBuilder().setCurrentPmEntry(currentPmEntryListA).build()); + return Optional.of(new CurrentPmListBuilder() + .setCurrentPmEntry(Map.of(currentPmEntryA.key(),currentPmEntryA)).build()); } public static Optional getCurrentPmListC() { @@ -286,19 +281,17 @@ public final class TransactionUtils { .setPmParameterValue(new PmDataType(new BigDecimal("-18.1"))) .setValidity(Validity.Complete) .build(); - List measurementListC = new ArrayList<>(); - measurementListC.add(measurementC); + Map measurementListC = new HashMap<>(); + measurementListC.put(measurementC.key(),measurementC); CurrentPm cpC = new CurrentPmBuilder() .setType(org.opendaylight.yang.gen.v1.http.org.openroadm.pm.types.rev171215.PmNamesEnum .OpticalPowerInput) .setMeasurement(measurementListC) .build(); - List currentPmListC = new ArrayList<>(); - currentPmListC.add(cpC); InstanceIdentifier interfaceIIDC = InstanceIdentifier.create(OrgOpenroadmDevice.class) .child(Interface.class, new InterfaceKey("OTS-DEG1-TTP-TXRX")); CurrentPmEntry currentPmEntryC = new CurrentPmEntryBuilder() - .setCurrentPm(currentPmListC) + .setCurrentPm(Map.of(cpC.key(),cpC)) .setPmResourceInstance(interfaceIIDC) .setPmResourceType( org.opendaylight.yang.gen.v1.http.org.openroadm.resource.types.rev181019.ResourceTypeEnum @@ -306,9 +299,8 @@ public final class TransactionUtils { .setPmResourceTypeExtension("") .setRetrievalTime(new DateAndTime("2018-06-07T13:22:58+00:00")) .build(); - List currentPmEntryListC = new ArrayList<>(); - currentPmEntryListC.add(currentPmEntryC); - return Optional.of(new CurrentPmListBuilder().setCurrentPmEntry(currentPmEntryListC).build()); + return Optional.of(new CurrentPmListBuilder() + .setCurrentPmEntry(Map.of(currentPmEntryC.key(),currentPmEntryC)).build()); } private static org.opendaylight @@ -320,11 +312,12 @@ public final class TransactionUtils { } private static DegreeAttributes getDegAttributes() { + org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev181130.degree.node.attributes.AvailableWavelengths + aval = new AvailableWavelengthsBuilder() + .setIndex(Uint32.valueOf(20L)) + .build(); return (new DegreeAttributesBuilder()) - .setAvailableWavelengths( - Collections.singletonList(new AvailableWavelengthsBuilder() - .setIndex(20L) - .build())) + .setAvailableWavelengths(Map.of(aval.key(),aval)) .build(); } @@ -332,12 +325,14 @@ public final class TransactionUtils { return new SrgAttributesBuilder().setAvailableWavelengths(create96AvalWaveSrg()).build(); } - public static List create96AvalWaveSrg() { - List - waveList = new ArrayList<>(); + waveMap = new HashMap<>(); for (int i = 1; i < 97; i++) { org.opendaylight.yang.gen @@ -347,9 +342,10 @@ public final class TransactionUtils { .setIndex(Uint32.valueOf(i)) .withKey(new org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev181130.srg.node.attributes .AvailableWavelengthsKey(Uint32.valueOf(i))); - waveList.add(avalBldr.build()); + AvailableWavelengths aval = avalBldr.build(); + waveMap.put(aval.key(),aval); } - return waveList; + return waveMap; } -- 2.36.6