Migrate PCE module to Aluminium 85/92185/10
authormanuedelf <emmanuelle.delfour@orange.com>
Tue, 18 Aug 2020 07:12:13 +0000 (09:12 +0200)
committerguillaume.lambert <guillaume.lambert@orange.com>
Thu, 17 Sep 2020 08:28:01 +0000 (10:28 +0200)
JIRA: TRNSPRTPCE-292 TRNSPRTPCE-302
Co-authored-by: guillaume.lambert <guillaume.lambert@orange.com>
Signed-off-by: guillaume.lambert <guillaume.lambert@orange.com>
Change-Id: Ib533555abc85c2bb6b38eed02e01e6513e7afe47

26 files changed:
pce/pom.xml
pce/src/main/java/org/opendaylight/transportpce/pce/PcePathDescription.java
pce/src/main/java/org/opendaylight/transportpce/pce/constraints/PceConstraintsCalc.java
pce/src/main/java/org/opendaylight/transportpce/pce/gnpy/GnpyResult.java
pce/src/main/java/org/opendaylight/transportpce/pce/gnpy/GnpyServiceImpl.java
pce/src/main/java/org/opendaylight/transportpce/pce/gnpy/GnpyTopoImpl.java
pce/src/main/java/org/opendaylight/transportpce/pce/gnpy/GnpyUtilitiesImpl.java
pce/src/main/java/org/opendaylight/transportpce/pce/gnpy/ServiceDataStoreOperationsImpl.java
pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/MapUtils.java
pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculation.java
pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceLink.java
pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOpticalNode.java
pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOtnNode.java
pce/src/main/java/org/opendaylight/transportpce/pce/service/PathComputationServiceImpl.java
pce/src/test/java/org/opendaylight/transportpce/pce/PcePathDescriptionTests.java
pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/GnpyStub.java
pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/GnpyUtilitiesImplTest.java
pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceLinkTest.java
pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOpticalNodeTest.java
pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOtnNodeTest.java
pce/src/test/java/org/opendaylight/transportpce/pce/service/PathComputationServiceImplTest.java
pce/src/test/java/org/opendaylight/transportpce/pce/utils/JsonUtil.java
pce/src/test/java/org/opendaylight/transportpce/pce/utils/NodeUtils.java
pce/src/test/java/org/opendaylight/transportpce/pce/utils/PceTestData.java
pce/src/test/java/org/opendaylight/transportpce/pce/utils/PceTestUtils.java
pce/src/test/java/org/opendaylight/transportpce/pce/utils/TransactionUtils.java

index 0ac84a94e717a4b2976bc90d5c72b2bdffb472a5..b5447d04102992b6f57a06a01100f5e9b82c0124 100644 (file)
             <version>1.2.0</version>
         </dependency>
 
+        <!-- Aluminium bump -->
+        <dependency>
+            <groupId>org.opendaylight.mdsal</groupId>
+            <artifactId>mdsal-binding-runtime-spi</artifactId>
+        </dependency>
+
         <!-- Sodium bump: javax.annotation.Nullable and friends -->
         <dependency>
             <groupId>com.google.code.findbugs</groupId>
index bc15bf50e68b4a0a30f3744cd6c1653fbc42d30e..b067745918879a7e84949cc05540db2cae96416e 100644 (file)
@@ -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<AToZ> atozList = new ArrayList<>();
+        Map<AToZKey,AToZ> 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<ZToA> ztoaList = new ArrayList<>();
+        Map<ZToAKey,ZToA> 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<AToZ> etoeList, List<PceLink> path) {
+    private void buildAtoZ(Map<AToZKey, AToZ> atozList, List<PceLink> 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<ZToA> etoelist, List<PceLink> path) {
+    private void buildZtoA(Map<ZToAKey, ZToA> ztoaList, List<PceLink> 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() {
index 6dc9c089ea796206080050c38978555a9321b0ab..371d3252454620da39afa2d1f5a9dca92044ff19 100644 (file)
@@ -154,7 +154,7 @@ public class PceConstraintsCalc {
 
         Include include = tmpGeneral.getInclude();
         if (include != null) {
-            List<OrderedHops> listHops = include.getOrderedHops();
+            List<OrderedHops> listHops = new ArrayList<>(include.nonnullOrderedHops().values());
             if (listHops != null) {
                 readIncludeNodes(listHops, constraints);
             }
@@ -265,7 +265,7 @@ public class PceConstraintsCalc {
     }
 
     private List<String> getAToZNodeList(PathDescription pathDescription) {
-        List<AToZ> aendToZList = pathDescription.getAToZDirection().getAToZ();
+        List<AToZ> 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<String> getSRLGList(PathDescription pathDescription) {
-        List<AToZ> aendToZList = pathDescription.getAToZDirection().getAToZ();
+        List<AToZ> aendToZList = new ArrayList<>(pathDescription.getAToZDirection().nonnullAToZ().values());
         return aendToZList.stream().filter(aToZ -> {
             if (aToZ.getResource() == null
                     || aToZ.getResource().getResource() == null) {
index fc1480cdd5e360d54151a32a69d1318ca9e5f066..dd483c6ba37a83b7c6a7440a66be3dd1e320239a 100644 (file)
@@ -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<? extends YangModuleInfo> moduleInfos;
-
-        moduleInfos = Collections.singleton(BindingReflections.getModuleInfo(Result.class));
-        moduleContext.addModuleInfos(moduleInfos);
-        SchemaContext schemaContext = moduleContext.tryToCreateSchemaContext().get();
+        Collection<? extends YangModuleInfo> 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<Response> responses = null;
-        responses = ((Result) dataObject).getResponse();
-        if (responses == null) {
+        List<Response> 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<PathMetric> pathMetricList = noPathCase.getNoPath().getPathProperties().getPathMetric();
+                    Collection<PathMetric> 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<PathMetric> pathMetricList = pathCase.getPathProperties().getPathMetric();
+                Collection<PathMetric> 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<? extends DataObject> objectClass) throws GnpyException, Exception {
-
-        final ModuleInfoBackedContext moduleContext = ModuleInfoBackedContext.create();
-        Iterable<? extends YangModuleInfo> moduleInfos;
-        SchemaContext schemaContext = null;
-        moduleInfos = Collections.singleton(BindingReflections.getModuleInfo(objectClass));
-        moduleContext.addModuleInfos(moduleInfos);
-        schemaContext = moduleContext.tryToCreateSchemaContext().get();
-        return schemaContext;
+        Collection<? extends YangModuleInfo> moduleInfos = Collections.singleton(BindingReflections
+                .getModuleInfo(objectClass));
+        return BindingRuntimeHelpers.createEffectiveModel(moduleInfos);
     }
 
     /**
index 5add47d5d813fdecbd7800dc074c0b57bd81bbe9..39f40631336930083d937706700b122d8a7dc9db 100644 (file)
@@ -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> pathRequest = new ArrayList<>();
+    private Map<PathRequestKey, PathRequest> pathRequest = new HashMap<>();
     private List<Synchronization> synchronization = new ArrayList<>();
     private Map<String, String> mapDisgNodeRefNode = new HashMap<>();
     private Map<String, IpAddress> mapNodeRefIp = new HashMap<>();
     private Map<String, List<String>> mapLinkFiber = new HashMap<>();
     private Map<String, IpAddress> mapFiberIp = new HashMap<>();
     private List<String> trxList = new ArrayList<>();
-    private List<Elements> elements = new ArrayList<>();
-    private List<RouteObjectIncludeExclude> routeObjectIncludeExcludes = new ArrayList<>();
+    private Map<ElementsKey, Elements> elements = new HashMap<>();
+    private Map<RouteObjectIncludeExcludeKey,RouteObjectIncludeExclude> routeObjectIncludeExcludes = new HashMap<>();
     private IpAddress currentNodeIpAddress = null;
 
     /*
@@ -122,8 +126,9 @@ public class GnpyServiceImpl {
         }
     }
 
-    private List<PathRequest> extractPathRequest(PathComputationRequestInput input, AToZDirection atoz, Long requestId,
-        PceConstraints pceHardConstraints) throws GnpyException {
+    private Map<PathRequestKey, PathRequest> 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<AToZ> listAtoZ = atoz.getAToZ();
-        if (listAtoZ != null) {
+        List<AToZ> 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<PathRequest> pathRequestList = new ArrayList<>();
-        PathRequest pathRequestEl = new PathRequestBuilder().setRequestId(requestId)
+        Map<PathRequestKey, PathRequest> 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<PathRequest> extractPathRequest(PathComputationRequestInput input, ZToADirection ztoa, Long requestId,
-        PceConstraints pceHardConstraints) throws GnpyException {
+    private Map<PathRequestKey, PathRequest> 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<ZToA> listZtoA = ztoa.getZToA();
-        if (listZtoA != null) {
+        @NonNull List<ZToA> 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<PathRequest> pathRequestList = new ArrayList<>();
-        PathRequest pathRequestEl = new PathRequestBuilder().setRequestId(requestId)
+        Map<PathRequestKey, PathRequest> 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<AToZ> 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<ZToA> listZtoA) throws GnpyException {
+    private void extractRouteObjectIcludeZtoA(@NonNull List<ZToA> 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> 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<Synchronization> 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<PathRequest> getPathRequest() {
+    public Map<PathRequestKey, PathRequest> getPathRequest() {
         return pathRequest;
     }
 
-    public void setPathRequest(List<PathRequest> pathRequest) {
+    public void setPathRequest(Map<PathRequestKey, PathRequest> pathRequest) {
         this.pathRequest = pathRequest;
     }
 
index 94049b975d73923a85ae957ae592ee68e628b766..39b31a8d84181b2f90209af64b41753feebc7b86 100644 (file)
@@ -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> elements = new ArrayList<>();
+    private Map<ElementsKey, Elements> elements = new HashMap<>();
     private List<Connections> 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<Node> openRoadmNetNodeList = openRoadmNet.get().getNode();
-        List<Node> openRoadmTopoNodeList = openRoadmTopo.get().getNode();
+        Collection<Node> openRoadmNetNodeList = openRoadmNet.get().nonnullNode().values();
+        Collection<Node> openRoadmTopoNodeList = openRoadmTopo.get().nonnullNode().values();
         List<String> 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<SupportingNode> supportingNodeList = openRoadmTopoNode.getSupportingNode();
+            Collection<SupportingNode> 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<Link> linksList = nw1.getLink();
+        Collection<Link> 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<AmplifiedLink> amplifiedLinkList = omsAttributes.getAmplifiedLink()
-            .getAmplifiedLink();
+        List<AmplifiedLink> 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<String>());
+            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<LinkConcatenation> 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<Elements> getElements() {
+    public Map<ElementsKey, Elements> getElements() {
         return elements;
     }
 
-    public void setElements(List<Elements> elements) {
+    public void setElements(Map<ElementsKey, Elements> elements) {
         this.elements = elements;
     }
 
index fcd1cbc0cdfb3b4197a5c805465e07347b213fd3..d8560b60ba9cf315ba583681e91827d22597b736 100644 (file)
@@ -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<PathRequest> pathRequestList = gnpySvc.getPathRequest();
+        List<PathRequest> pathRequestList = new ArrayList(gnpySvc.getPathRequest().values());
         List<Synchronization> synchronizationList = gnpySvc.getSynchronization();
         // Send the computed path to GNPY tool
-        List<Elements> elementsList = gnpyTopo.getElements();
+        List<Elements> elementsList = new ArrayList(gnpyTopo.getElements().values());
         List<Connections> 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<Elements> elementsList, List<Connections> connectionsList,
-        List<PathRequest> pathRequestList, List<Synchronization> synchronizationList) throws GnpyException, Exception {
+        List<PathRequest> pathRequestList, List<Synchronization> synchronizationList)
+                throws GnpyException, Exception {
         GnpyApi gnpyApi = new GnpyApiBuilder()
             .setTopologyFile(
                 new TopologyFileBuilder().setElements(elementsList).setConnections(connectionsList).build())
index 72ac832b009e1f53bb8b81e4c97091dbb64fbb37..e1a243c0ba47aac77e31c6e5581693a1a931df3b 100644 (file)
@@ -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<? extends YangModuleInfo> 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<? extends YangModuleInfo> 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() -
index 2385de736dc91f26e95c6d53f7e627a050af1a19..1de4866e145e0bfa75c93c53cc23d6d3ea240a4c 100644 (file)
@@ -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<Long> getSRLG(Link link) {
         List<Long> srlgList = new ArrayList<>();
         try {
-            List<LinkConcatenation> linkList = getOmsAttributesSpan(link).getLinkConcatenation();
-            for (LinkConcatenation lc : linkList) {
+            Map<LinkConcatenationKey, LinkConcatenation> 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<org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.networks.network.link
-                    .LinkConcatenation> 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<SupportingNode> 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<SupportingNode> 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<String, String> getAllSupNode(Node node) {
         TreeMap<String, String> allSupNodes = new TreeMap<>();
-        List<SupportingNode> 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;
     }
 
 
index 04a8aefc63d873d9159418640ade68dbadbf1bcc..e880d02b441e9e2cf61ffa77aec0fc9320d61ae7 100644 (file)
@@ -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");
         }
index 3020cab044889865c8edbbdff785bed824645aac..dde21e1a79a0f01e2d09578a94fa998d02ce7af2 100644 (file)
@@ -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<LinkConcatenationKey, LinkConcatenation> linkConcatenationMap =
+                this.omsAttributesSpan.nonnullLinkConcatenation();
+            for (Map.Entry<LinkConcatenationKey, LinkConcatenation> 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;
index 63f2bffe0a518ec7ed49a27174695535396b22e4..a9199aec3960225c6a42489c3b86d8c279d3be33 100644 (file)
@@ -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<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network
-            .node.TerminationPoint> 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<UsedWavelength> usedWavelengths = nttp1.getPpAttributes().getUsedWavelength();
+                        List<UsedWavelength> usedWavelengths =
+                            new ArrayList(nttp1.getPpAttributes().getUsedWavelength().values());
                         if (usedWavelengths.isEmpty()) {
                             used = false;
                         }
@@ -137,7 +138,7 @@ public class PceOpticalNode implements PceNode {
             case SRG :
                 List<org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev181130.srg.node.attributes
                     .AvailableWavelengths> 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<org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev181130.degree.node.attributes
-                    .AvailableWavelengths> 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<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network
-            .node.TerminationPoint> 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);
index 93e760e9f53397a5c03364b24546ed368a7c219f..c431d8b6f0a94174fc69662f105831bbe4e5f46d 100644 (file)
@@ -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<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network
-                .node.TerminationPoint> 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<NonBlockingList> nblList = node.augmentation(Node1.class).getSwitchingPools()
-                        .getOduSwitchingPools().get(0).getNonBlockingList();
+                    List<NonBlockingList> 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<NonBlockingList> nblList = node.augmentation(Node1.class).getSwitchingPools().getOduSwitchingPools()
-                .get(0).getNonBlockingList();
+            List<NonBlockingList> 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<OduSwitchingPools> osp = sp.getOduSwitchingPools();
+        List<OduSwitchingPools> osp = new ArrayList(sp.getOduSwitchingPools().values());
         for (OduSwitchingPools ospx : osp) {
-            List<NonBlockingList> nbl = ospx.getNonBlockingList();
+            List<NonBlockingList> 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<TerminationPoint> 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<Uint16> 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<TerminationPoint> 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)
index 0abc6d72a91a721ac050adbd13eb8e4a08364710..e022c91ed70622d8fb5e6d33ad35216d143953ec 100644 (file)
@@ -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<org.opendaylight.yang.gen.v1.gnpy.path.rev200202.generic.path.properties.path.properties
-                    .PathMetric> pathMetricList = pathCase.getPathProperties().getPathMetric();
+                    .PathMetric> pathMetricList = new ArrayList(pathCase.getPathProperties().getPathMetric().values());
                 List<PathMetric> gnpyPathMetricList = new ArrayList<>();
                 for (org.opendaylight.yang.gen.v1.gnpy.path.rev200202.generic.path.properties.path.properties.PathMetric
                         pathMetricGnpy : pathMetricList) {
index 26161ae46744181226bc439aaefad5ffbf6c651e..6c58820861a6d78af999b8c8a8a2c76da5ff83f9 100644 (file)
@@ -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;
index f2d1a87cf55c2881e2ebea90f21149045dda72e2..b8a61a4be0b780069455f52d890246ec066230f8 100644 (file)
@@ -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> pathRequest = request.getServiceFile().getPathRequest();
+            List<PathRequest> 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
index 4544152531a05d9ef13098b6a6c542e9c87d963f..025ccf5768d62ede13a107b52f351fea093f7c73 100644 (file)
@@ -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<AToZ> 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));
 
     }
 }
index a2e27f848760bd90230286336bc9d2c529c9bf6f..0f9646ba2ff5c59ddf6b8d9279e3b2c438b63fd8 100644 (file)
@@ -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<SupportingNode> geSupportingNodes() {
-        List<SupportingNode> supportingNodes1 = new ArrayList<>();
+    private Map<SupportingNodeKey,SupportingNode> geSupportingNodes() {
+        Map<SupportingNodeKey,SupportingNode> 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<SupportingNode> supportingNodes1) {
+    private NodeBuilder getNodeBuilder(Map<SupportingNodeKey,SupportingNode> 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);
     }
 
index f32a42d7bcd153af98a48b61297a514204758a1c..aa4baad564880b26a018ebb2655bf3b721add0e4 100644 (file)
@@ -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<SupportingNode> geSupportingNodes() {
-        List<SupportingNode> supportingNodes1 = new ArrayList<>();
+    private Map<SupportingNodeKey,SupportingNode> geSupportingNodes() {
+        Map<SupportingNodeKey,SupportingNode> 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<SupportingNode> supportingNodes1, OpenroadmTpType openroadmTpType) {
+    private NodeBuilder getNodeBuilder(Map<SupportingNodeKey,SupportingNode> 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<SupportingNode> supportingNodes1, OpenroadmTpType openroadmTpType) {
+    private NodeBuilder getNodeBuilderEmpty(Map<SupportingNodeKey,SupportingNode>  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<org.opendaylight.yang.gen
-                .v1.http.org.openroadm.srg.rev181130.srg.node.attributes.AvailableWavelengths>
-                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()
index 561c1a9a5af7ef03f4910edcfb951ba5cfb9841b..35df80772795f3b812f1a0d858e6041be81b1344 100644 (file)
@@ -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<SupportingNode> geSupportingNodes() {
-        List<SupportingNode> supportingNodes1 = new ArrayList<>();
+    private Map<SupportingNodeKey, SupportingNode> geSupportingNodes() {
+        Map<SupportingNodeKey, SupportingNode> 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<SupportingNode> supportingNodes1, OpenroadmTpType openroadmTpType) {
+    private NodeBuilder getNodeBuilder(Map<SupportingNodeKey,SupportingNode> 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<SupportingNode> supportingNodes1, OpenroadmTpType openroadmTpType) {
+    private NodeBuilder getNodeBuilderEmpty(Map<SupportingNodeKey,SupportingNode> 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<org.opendaylight.yang.gen
-                .v1.http.org.openroadm.srg.rev181130.srg.node.attributes.AvailableWavelengths>
-                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<SupportedInterfaceCapability> supIfCapaList = new ArrayList<>();
-        supIfCapaList.add(supIfCapa);
-        supIfCapaList.add(supIfCapa1);
-        supIfCapaList.add(supIfCapa2);
-        supIfCapaList.add(supIfCapa3);
+        Map<SupportedInterfaceCapabilityKey,SupportedInterfaceCapability> 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<org.opendaylight.yang.gen
-            .v1.http.org.openroadm.srg.rev181130.srg.node.attributes.AvailableWavelengths> 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<org.opendaylight.yang.gen
-                .v1.http.org.openroadm.srg.rev181130.srg.node.attributes.AvailableWavelengths>
-                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;
     }
index 20d904e1e140abe60421053a6795befb5f2828a5..df4e006e0d06965ccc700de4ca6a48875cec66a5 100644 (file)
@@ -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");
index b97d105eba5088b899f76870b88d53ad3dc3fbee..9ac12d85b47d90c40f430f7a690da36753d73b1f 100644 (file)
@@ -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<YangModuleInfo> 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() {
index 6adfaf99eb282783038723187d265458ba0098c8..a1777e8612a4808641b28bb210158616432e8203 100644 (file)
@@ -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<Link> 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<SupportingNode> geSupportingNodes() {
-        List<SupportingNode> supportingNodes1 = new ArrayList<>();
-//
+    public static Map<SupportingNodeKey, SupportingNode> geSupportingNodes() {
+        Map<SupportingNodeKey, SupportingNode> 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<SupportingNode> supportingNodes1) {
+    public static NodeBuilder getNodeBuilder(Map<SupportingNodeKey,SupportingNode> 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<LinkConcatenation> linkConcentationValues = new ArrayList<>();
+        Map<LinkConcatenationKey,LinkConcatenation> 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<AmplifiedLink>
-                amplifiedLinkValues = new ArrayList<>();
+        Map<AmplifiedLinkKey,AmplifiedLink>
+                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<Link> 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<SupportingNode> supportingNodes1,
+    public static NodeBuilder getOTNNodeBuilder(Map<SupportingNodeKey,SupportingNode> 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<SupportingNode> supportingNodes1,
+    public static NodeBuilder getOTNNodeBuilderEmpty(Map<SupportingNodeKey,SupportingNode> 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<org.opendaylight.yang.gen
-                .v1.http.org.openroadm.srg.rev181130.srg.node.attributes.AvailableWavelengths>
-                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<SupportedInterfaceCapability> supIfCapaList = new ArrayList<>();
-        supIfCapaList.add(supIfCapa);
-        supIfCapaList.add(supIfCapa1);
-        supIfCapaList.add(supIfCapa2);
-        supIfCapaList.add(supIfCapa3);
+        Map<SupportedInterfaceCapabilityKey,SupportedInterfaceCapability> 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<org.opendaylight.yang.gen
+    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<org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev181130.srg.node.attributes.AvailableWavelengths>
-                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.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;
     }
index 58fa933197b48f3c1dfb1dd925e0852cbfc43f13..cb08b6cb987530b20acbc6de19b94635edf7fac5 100644 (file)
@@ -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(
index 5aee69c20334eb8d06effc63216a0ae4737196f6..61da615cc8caea733b9a04673fee52c5af2a0990 100644 (file)
@@ -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<Network> 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<String> getNodesFromPath(PathComputationRequestOutput output) {
-        List<AToZ> atozList = output.getResponseParameters().getPathDescription().getAToZDirection().getAToZ();
-        return atozList.stream()
+        @Nullable Map<AToZKey, AToZ> 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!",
index b44f47e39f5be0a645ed472062522930e867a9be..0318b4c60b2248619a2709adb0c602ce80044f79 100644 (file)
@@ -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<LinkConcatenation> linkConcentationValues = new ArrayList<>();
+        Map<LinkConcatenationKey,LinkConcatenation> 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<SupportingNode> 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<SupportingNode> 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<SupportingNodeKey,SupportingNode> 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<Node> ietfNodeList = new ArrayList<>();
-        ietfNodeList.add(ietfNodeA);
-        ietfNodeList.add(ietfNodeC);
+        Map<NodeKey,Node> ietfNodeList = new HashMap<>();
+        ietfNodeList.put(ietfNodeA.key(),ietfNodeA);
+        ietfNodeList.put(ietfNodeC.key(),ietfNodeC);
 
-        List<AmplifiedLink>
-                amplifiedLinkValues = new ArrayList<>();
+        Map<AmplifiedLinkKey,AmplifiedLink>
+                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<Class<? extends Augmentation<Link>>, Augmentation<Link>> map = Collections.emptyMap();
-        Augmentation<Link> aug11 = new Link1Builder().setAdministrativeGroup(Long.valueOf(123))
+        Augmentation<Link> 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<Link> 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<Link> 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<Measurement> 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<CurrentPm> currentPmListA = new ArrayList<>();
-        currentPmListA.add(cpA);
         InstanceIdentifier<Interface> 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<CurrentPmEntry> 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<CurrentPmList> getCurrentPmListC() {
@@ -286,19 +281,17 @@ public final class TransactionUtils {
                 .setPmParameterValue(new PmDataType(new BigDecimal("-18.1")))
                 .setValidity(Validity.Complete)
                 .build();
-        List<Measurement> measurementListC = new ArrayList<>();
-        measurementListC.add(measurementC);
+        Map<MeasurementKey,Measurement> 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<CurrentPm> currentPmListC = new ArrayList<>();
-        currentPmListC.add(cpC);
         InstanceIdentifier<Interface> 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<CurrentPmEntry> 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<org.opendaylight.yang.gen
+    public 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<org.opendaylight.yang.gen
+        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 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;
     }