Refactoring of Tapi Step2 02/109402/14
authororenais <olivier.renais@orange.com>
Thu, 21 Dec 2023 15:35:42 +0000 (16:35 +0100)
committerorenais <olivier.renais@orange.com>
Thu, 1 Feb 2024 10:00:49 +0000 (11:00 +0100)
Add createAvailable/SupportedPayloadStructure and photonic-owned
-node-edge-point-spec attribute in convertORToTapiTopology class

JIRA: TRNSPRTPCE-758

Signed-off-by: orenais <olivier.renais@orange.com>
Change-Id: I04821270cab8a1408032cea42e45292fdfe81ef1

tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/TapiProvider.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/ConvertORToTapiTopology.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImpl.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TopologyUtils.java
tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImplExceptionTest.java
tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImplTest.java
tests/transportpce_tests/tapi/test01_abstracted_topology.py

index 34de9e3f076dbf94434f26f801e65d92da855503..2ee735438dc777a9e7a06539cb1ba582b066e003 100644 (file)
@@ -117,7 +117,7 @@ public class TapiProvider {
         TapiConnectivityImpl tapiConnectivity = new TapiConnectivityImpl(this.serviceHandler, tapiContext,
             connectivityUtils, pceListenerImpl, rendererListenerImpl, networkTransactionService);
         rpcRegistrations.add(rpcProviderService.registerRpcImplementations(tapiConnectivity.registerRPCs()));
-        TapiTopologyImpl topo = new TapiTopologyImpl(this.dataBroker, tapiContext, topologyUtils, tapiLink);
+        TapiTopologyImpl topo = new TapiTopologyImpl(networkTransactionService, tapiContext, topologyUtils, tapiLink);
         rpcRegistrations.add(rpcProviderService.registerRpcImplementations(topo.registerRPCs()));
 
         this.listeners = new ArrayList<>();
index 134f892ea6821447a1f7f11f28ab641293c33d13..6c97ba4de538ca1167fa560f76921096fc449669 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.transportpce.tapi.topology;
 
+import java.math.RoundingMode;
 import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -17,10 +18,13 @@ import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
 import java.util.stream.Collectors;
+import org.opendaylight.transportpce.common.fixedflex.GridConstant;
 import org.opendaylight.transportpce.tapi.TapiStringConstants;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.PpAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.XpdrNetworkAttributes;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev230526.xpdr.odu.switching.pools.OduSwitchingPools;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev230526.xpdr.odu.switching.pools.OduSwitchingPoolsBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev230526.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingList;
@@ -30,10 +34,12 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.O
 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmTpType;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.xpdr.tp.supported.interfaces.SupportedInterfaceCapability;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.Node1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.xponder.rev230526.xpdr.mode.attributes.supported.operational.modes.OperationalModeKey;
 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.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.onf.otcc.yang.tapi.common.rev221121.AdministrativeState;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.CAPACITYUNITGBPS;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Direction;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.LayerProtocolName;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.LifecycleState;
@@ -45,6 +51,7 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.capa
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.Name;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.NameBuilder;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.NameKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.payload.structure.CapacityBuilder;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePoint;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePointBuilder;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePointKey;
@@ -52,11 +59,26 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.ODUTYPEODU2;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.ODUTYPEODU2E;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.ODUTYPEODU4;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.ODUTYPEODUCN;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.OTUTYPEOTUCN;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev221121.DIGITALSIGNALTYPE100GigE;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev221121.DIGITALSIGNALTYPE10GigELAN;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev221121.DIGITALSIGNALTYPEGigE;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.PHOTONICLAYERQUALIFIEROTS;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.PHOTONICLAYERQUALIFIEROTSi;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.PHOTONICLAYERQUALIFIEROTSiMC;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.context.topology.context.topology.node.owned.node.edge.point.PhotonicMediaNodeEdgePointSpec;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.context.topology.context.topology.node.owned.node.edge.point.PhotonicMediaNodeEdgePointSpecBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.photonic.media.node.edge.point.spec.SpectrumCapabilityPacBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.AvailableSpectrum;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.AvailableSpectrumBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.AvailableSpectrumKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.OccupiedSpectrum;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.OccupiedSpectrumBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.OccupiedSpectrumKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.SupportableSpectrum;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.SupportableSpectrumBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.SupportableSpectrumKey;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.FORWARDINGRULEMAYFORWARDACROSSGROUP;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.RuleType;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.NodeRuleGroup;
@@ -67,11 +89,15 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.no
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePointKey;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.RiskParameterPac;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.RiskParameterPacBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.AvailablePayloadStructure;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.AvailablePayloadStructureBuilder;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.MappedServiceInterfacePoint;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.MappedServiceInterfacePointBuilder;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.MappedServiceInterfacePointKey;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.SupportedCepLayerProtocolQualifierInstances;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.SupportedCepLayerProtocolQualifierInstancesBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.SupportedPayloadStructure;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.SupportedPayloadStructureBuilder;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.Rule;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.RuleBuilder;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.RuleKey;
@@ -85,6 +111,7 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.tr
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.transfer.cost.pac.CostCharacteristicBuilder;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.transfer.timing.pac.LatencyCharacteristic;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.transfer.timing.pac.LatencyCharacteristicBuilder;
+import org.opendaylight.yangtools.yang.common.Decimal64;
 import org.opendaylight.yangtools.yang.common.Uint16;
 import org.opendaylight.yangtools.yang.common.Uint64;
 import org.slf4j.Logger;
@@ -252,8 +279,133 @@ public class ConvertORToTapiTopology {
         return msipl;
     }
 
+    public List<AvailablePayloadStructure> createAvailablePayloadStructureForPhtncMedia(Boolean otsiProvisioned,
+            Collection<SupportedInterfaceCapability> sicList, List<OperationalModeKey> supportedOpModes) {
+        if (supportedOpModes == null || supportedOpModes.isEmpty()) {
+            return null;
+        }
+        Integer nepRate = 0;
+        Integer loopRate = 0;
+        for (OperationalModeKey operationalMode : supportedOpModes) {
+            if (operationalMode.toString().contains("800G")) {
+                loopRate = 8;
+            } else if (operationalMode.toString().contains("600G")) {
+                loopRate = 6;
+            } else if (operationalMode.toString().contains("400G")) {
+                loopRate = 4;
+            } else if (operationalMode.toString().contains("300G")) {
+                loopRate = 3;
+            } else if (operationalMode.toString().contains("200G")) {
+                loopRate = 2;
+            } else if (operationalMode.toString().contains("100G")) {
+                loopRate = 1;
+            }
+            if (loopRate >= nepRate) {
+                nepRate = loopRate;
+            }
+        }
+        CapacityBuilder capBd = new CapacityBuilder()
+            .setUnit(CAPACITYUNITGBPS.VALUE);
+        List<AvailablePayloadStructure> aps = new ArrayList<>();
+        Integer cepInstanceNber = 1;
+        if (otsiProvisioned) {
+            cepInstanceNber = 0;
+        }
+        for (SupportedInterfaceCapability sic : sicList) {
+            String ifCapType = sic.getIfCapType().toString().split("\\{")[0];
+            switch (ifCapType) {
+                case "IfOCHOTU4ODU4":
+                case "IfOCHOTU4ODU4Regen":
+                case "IfOCHOTU4ODU4Uniregen":
+                    aps.add(new AvailablePayloadStructureBuilder()
+                        .setMultiplexingSequence(Set.of(PHOTONICLAYERQUALIFIEROTSi.VALUE, ODUTYPEODU4.VALUE))
+                        .setNumberOfCepInstances(Uint64.valueOf(cepInstanceNber))
+                        .setCapacity(capBd.setValue(Decimal64.valueOf(100.0 * cepInstanceNber, RoundingMode.DOWN))
+                            .build())
+                        .build());
+                    break;
+                case "IfOCHOTUCnODUCn":
+                case "IfOtsiOtucnOducn":
+                case "IfOCHOTUCnODUCnRegen":
+                case "IfOCHOTUCnODUCnUniregen":
+                    aps.add(new AvailablePayloadStructureBuilder()
+                        .setMultiplexingSequence(Set.of(PHOTONICLAYERQUALIFIEROTSi.VALUE, OTUTYPEOTUCN.VALUE,
+                            ODUTYPEODUCN.VALUE, ODUTYPEODU4.VALUE))
+                        .setNumberOfCepInstances(Uint64.valueOf(nepRate * cepInstanceNber))
+                        .setCapacity(
+                            capBd.setValue(Decimal64.valueOf(nepRate * 100.0 * cepInstanceNber, RoundingMode.DOWN))
+                            .build())
+                        .build());
+                    break;
+                default:
+                    break;
+            }
+        }
+        return aps.stream().distinct().toList();
+    }
+
+    public List<SupportedPayloadStructure> createSupportedPayloadStructureForPhtncMedia(
+            Collection<SupportedInterfaceCapability> sicList, List<OperationalModeKey> supportedOpModes) {
+        if (supportedOpModes == null || supportedOpModes.isEmpty()) {
+            return null;
+        }
+        Integer nepRate = 0;
+        Integer loopRate = 0;
+        for (OperationalModeKey operationalMode : supportedOpModes) {
+            if (operationalMode.toString().contains("800G")) {
+                loopRate = 8;
+            } else if (operationalMode.toString().contains("600G")) {
+                loopRate = 6;
+            } else if (operationalMode.toString().contains("400G")) {
+                loopRate = 4;
+            } else if (operationalMode.toString().contains("300G")) {
+                loopRate = 3;
+            } else if (operationalMode.toString().contains("200G")) {
+                loopRate = 2;
+            } else if (operationalMode.toString().contains("100G")) {
+                loopRate = 1;
+            }
+            if (loopRate >= nepRate) {
+                nepRate = loopRate;
+            }
+        }
+        CapacityBuilder capBd = new CapacityBuilder()
+            .setUnit(CAPACITYUNITGBPS.VALUE);
+        List<SupportedPayloadStructure> sps = new ArrayList<>();
+        for (SupportedInterfaceCapability sic : sicList) {
+            String ifCapType = sic.getIfCapType().toString().split("\\{")[0];
+            switch (ifCapType) {
+                case "IfOCHOTU4ODU4":
+                case "IfOCHOTU4ODU4Regen":
+                case "IfOCHOTU4ODU4Uniregen":
+                    sps.add(new SupportedPayloadStructureBuilder()
+                        .setMultiplexingSequence(Set.of(PHOTONICLAYERQUALIFIEROTSi.VALUE, ODUTYPEODU4.VALUE))
+                        .setNumberOfCepInstances(Uint64.valueOf(1))
+                        .setCapacity(capBd.setValue(Decimal64.valueOf(100.0, RoundingMode.DOWN)).build())
+                        .build());
+                    break;
+                case "IfOCHOTUCnODUCn":
+                case "IfOtsiOtucnOducn":
+                case "IfOCHOTUCnODUCnRegen":
+                case "IfOCHOTUCnODUCnUniregen":
+                    sps.add(new SupportedPayloadStructureBuilder()
+                        .setMultiplexingSequence(Set.of(PHOTONICLAYERQUALIFIEROTSi.VALUE, OTUTYPEOTUCN.VALUE,
+                            ODUTYPEODUCN.VALUE, ODUTYPEODU4.VALUE))
+                        .setNumberOfCepInstances(Uint64.valueOf(nepRate))
+                        .setCapacity(capBd.setValue(Decimal64.valueOf(nepRate * 100.0, RoundingMode.DOWN)).build())
+                        .build());
+                    break;
+                default:
+                    break;
+            }
+        }
+        return sps.stream().distinct().toList();
+    }
+
+    @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(value = "SF_SWITCH_FALLTHROUGH",
+        justification = "Voluntarily No break in switchcase where comment is inserted in following method")
     public List<SupportedCepLayerProtocolQualifierInstances> createSupportedCepLayerProtocolQualifier(
-        Collection<SupportedInterfaceCapability> sicList, LayerProtocolName lpn) {
+            Collection<SupportedInterfaceCapability> sicList, LayerProtocolName lpn) {
         List<SupportedCepLayerProtocolQualifierInstances> sclpqiList = new ArrayList<>();
         if (sicList == null) {
             sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
@@ -269,65 +421,63 @@ public class ConvertORToTapiTopology {
                 case "ETH":
                 case "DSR":
                     switch (ifCapType) {
-                        // TODO: it may be needed to add more cases clauses if the interface capabilities of a
-                        //  port are extended in the config file
                         case "If1GEODU0":
                             sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
                                 .setLayerProtocolQualifier(ODUTYPEODU0.VALUE)
-                                .setNumberOfCepInstances(Uint64.valueOf(0))
+                                .setNumberOfCepInstances(Uint64.valueOf(1))
                                 .build());
                             sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
                                 .setLayerProtocolQualifier(DIGITALSIGNALTYPEGigE.VALUE)
-                                .setNumberOfCepInstances(Uint64.valueOf(0))
+                                .setNumberOfCepInstances(Uint64.valueOf(1))
                                 .build());
                             break;
                         case "If10GEODU2e":
                             sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
                                 .setLayerProtocolQualifier(ODUTYPEODU2E.VALUE)
-                                .setNumberOfCepInstances(Uint64.valueOf(0))
+                                .setNumberOfCepInstances(Uint64.valueOf(1))
                                 .build());
                             sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
                                 .setLayerProtocolQualifier(DIGITALSIGNALTYPE10GigELAN.VALUE)
-                                .setNumberOfCepInstances(Uint64.valueOf(0))
+                                .setNumberOfCepInstances(Uint64.valueOf(1))
                                 .build());
                             break;
                         case "If10GEODU2":
                             sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
                                 .setLayerProtocolQualifier(ODUTYPEODU2.VALUE)
-                                .setNumberOfCepInstances(Uint64.valueOf(0))
+                                .setNumberOfCepInstances(Uint64.valueOf(1))
                                 .build());
                             sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
                                 .setLayerProtocolQualifier(DIGITALSIGNALTYPE10GigELAN.VALUE)
-                                .setNumberOfCepInstances(Uint64.valueOf(0))
+                                .setNumberOfCepInstances(Uint64.valueOf(1))
                                 .build());
                             break;
                         case "If10GE":
                             sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
                                 .setLayerProtocolQualifier(DIGITALSIGNALTYPE10GigELAN.VALUE)
-                                .setNumberOfCepInstances(Uint64.valueOf(0))
+                                .setNumberOfCepInstances(Uint64.valueOf(1))
                                 .build());
                             break;
                         case "If100GEODU4":
                             sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
                                 .setLayerProtocolQualifier(DIGITALSIGNALTYPE100GigE.VALUE)
-                                .setNumberOfCepInstances(Uint64.valueOf(0))
+                                .setNumberOfCepInstances(Uint64.valueOf(1))
                                 .build());
                             sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
                                 .setLayerProtocolQualifier(ODUTYPEODU4.VALUE)
-                                .setNumberOfCepInstances(Uint64.valueOf(0))
+                                .setNumberOfCepInstances(Uint64.valueOf(1))
                                 .build());
                             break;
                         case "If100GE":
                             sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
                                 .setLayerProtocolQualifier(DIGITALSIGNALTYPE100GigE.VALUE)
-                                .setNumberOfCepInstances(Uint64.valueOf(0))
+                                .setNumberOfCepInstances(Uint64.valueOf(1))
                                 .build());
                             break;
                         case "IfOCHOTU4ODU4":
                         case "IfOCH":
                             sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
                                 .setLayerProtocolQualifier(ODUTYPEODU4.VALUE)
-                                .setNumberOfCepInstances(Uint64.valueOf(0))
+                                .setNumberOfCepInstances(Uint64.valueOf(1))
                                 .build());
                             break;
                         default:
@@ -337,25 +487,23 @@ public class ConvertORToTapiTopology {
                     break;
                 case "ODU":
                     switch (ifCapType) {
-                        // TODO: it may be needed to add more cases clauses if the interface capabilities of a
-                        //  port are extended in the config file
                         case "If1GEODU0":
                             sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
                                 .setLayerProtocolQualifier(ODUTYPEODU0.VALUE)
-                                .setNumberOfCepInstances(Uint64.valueOf(0))
+                                .setNumberOfCepInstances(Uint64.valueOf(1))
                                 .build());
                             break;
                         case "If10GEODU2e":
                             sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
                                 .setLayerProtocolQualifier(ODUTYPEODU2E.VALUE)
-                                .setNumberOfCepInstances(Uint64.valueOf(0))
+                                .setNumberOfCepInstances(Uint64.valueOf(1))
                                 .build());
                             break;
                         case "If10GEODU2":
                         case "If10GE":
                             sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
                                 .setLayerProtocolQualifier(ODUTYPEODU2.VALUE)
-                                .setNumberOfCepInstances(Uint64.valueOf(0))
+                                .setNumberOfCepInstances(Uint64.valueOf(1))
                                 .build());
                             break;
                         case "If100GEODU4":
@@ -364,7 +512,7 @@ public class ConvertORToTapiTopology {
                         case "IfOCH":
                             sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
                                 .setLayerProtocolQualifier(ODUTYPEODU4.VALUE)
-                                .setNumberOfCepInstances(Uint64.valueOf(0))
+                                .setNumberOfCepInstances(Uint64.valueOf(1))
                                 .build());
                             break;
                         default:
@@ -373,15 +521,35 @@ public class ConvertORToTapiTopology {
                     }
                     break;
                 case "PHOTONIC_MEDIA":
-                    if (ifCapType.equals("IfOCHOTU4ODU4") || ifCapType.equals("IfOCH")) {
-                        sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
-                            .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTSiMC.VALUE)
-                            .setNumberOfCepInstances(Uint64.valueOf(0))
-                            .build());
-                        sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
-                            .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTS.VALUE)
-                            .setNumberOfCepInstances(Uint64.valueOf(0))
-                            .build());
+                    switch (ifCapType) {
+                        case "IfOCHOTUCnODUCn":
+                        case "IfOtsiOtucnOducn":
+                        case "IfOCHOTUCnODUCnRegen":
+                        case "IfOCHOTUCnODUCnUniregen":
+                            sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
+                                .setLayerProtocolQualifier(ODUTYPEODUCN.VALUE)
+                                .setNumberOfCepInstances(Uint64.valueOf(1))
+                                .build());
+                            sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
+                                .setLayerProtocolQualifier(OTUTYPEOTUCN.VALUE)
+                                .setNumberOfCepInstances(Uint64.valueOf(1))
+                                .build());
+                        //fallthrough
+                        case "IfOCH":
+                        case "IfOCHOTU4ODU4":
+                        case "IfOCHOTU4ODU4Regen":
+                        case "IfOCHOTU4ODU4Uniregen":
+                            sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
+                                .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTSiMC.VALUE)
+                                .setNumberOfCepInstances(Uint64.valueOf(1))
+                                .build());
+                            sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
+                                .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTS.VALUE)
+                                .setNumberOfCepInstances(Uint64.valueOf(1))
+                                .build());
+                            break;
+                        default:
+                            break;
                     }
                     break;
                 default:
@@ -392,6 +560,44 @@ public class ConvertORToTapiTopology {
         return sclpqiList.stream().distinct().toList();
     }
 
+    public Map<Double, Double> getXpdrUsedWavelength(TerminationPoint tp) {
+        if (tp.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526
+                    .TerminationPoint1.class) == null
+                || tp.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm
+                    .network.topology.rev230526.TerminationPoint1.class).getXpdrNetworkAttributes()
+                == null) {
+            return null;
+        }
+        XpdrNetworkAttributes xnatt = tp.augmentation(
+            org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.TerminationPoint1.class)
+            .getXpdrNetworkAttributes();
+        Map<Double,Double> freqWidthMap = new HashMap<>();
+        if (xnatt.getWavelength() != null && xnatt.getWavelength().getFrequency() != null
+                && xnatt.getWavelength().getWidth() != null) {
+            freqWidthMap.put(xnatt.getWavelength().getFrequency().getValue().doubleValue(),
+                xnatt.getWavelength().getWidth().getValue().doubleValue());
+            return freqWidthMap;
+        }
+        return null;
+    }
+
+    public Map<Double, Double> getPPUsedWavelength(TerminationPoint tp) {
+        PpAttributes ppAtt = tp.augmentation(
+            org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.TerminationPoint1.class)
+            .getPpAttributes();
+        if (ppAtt == null) {
+            return null;
+        }
+        Map<Double,Double> freqWidthMap = new HashMap<>();
+        if (ppAtt.getUsedWavelength() != null && ppAtt.getUsedWavelength().entrySet().iterator().next() != null) {
+            freqWidthMap.put(ppAtt.getUsedWavelength().entrySet().iterator().next().getValue().getFrequency().getValue()
+                .doubleValue(), ppAtt.getUsedWavelength().entrySet().iterator().next().getValue().getFrequency()
+                .getValue().doubleValue());
+            return freqWidthMap;
+        }
+        return null;
+    }
+
     private OduSwitchingPools createOduSwitchingPoolForTp100G() {
         Map<NonBlockingListKey, NonBlockingList> nblMap = new HashMap<>();
         int count = 1;
@@ -567,8 +773,6 @@ public class ConvertORToTapiTopology {
                 String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA_OTS));
             onepl.put(onep.key(), onep);
         }
-        // NETWORK NEP OTSI_MC network nep creation
-        //TODO: add test to see if wavelength is provionned and condition this creation to this!
         for (int i = 0; i < oorNetworkPortList.size(); i++) {
             Uuid nepUuid3 = new Uuid(UUID.nameUUIDFromBytes(
                 (String.join("+", this.ietfNodeId, TapiStringConstants.OTSI_MC,
@@ -606,7 +810,7 @@ public class ConvertORToTapiTopology {
                 LOG.debug("UuidKey={}", String.join("+", this.ietfNodeId,
                     TapiStringConstants.E_ODU, tp.getValue()));
                 if (this.uuidMap.containsKey(String.join("+", this.ietfNodeId, TapiStringConstants.DSR,
-                    tp.getValue())) || this.uuidMap.containsKey(String.join(
+                        tp.getValue())) || this.uuidMap.containsKey(String.join(
                         "+", this.ietfNodeId, TapiStringConstants.I_ODU, tp.getValue()))) {
                     String qual = tp.getValue().contains("CLIENT") ? TapiStringConstants.DSR
                         : TapiStringConstants.I_ODU;
@@ -710,7 +914,6 @@ public class ConvertORToTapiTopology {
             LOG.warn("Tp supported interface doesnt exist on TP {}", oorTp.getTpId().getValue());
             return null;
         }
-//        Collection<SupportedInterfaceCapability> sicList = tp1.getTpSupportedInterfaces()
         Collection<SupportedInterfaceCapability> sicColl = tp1.getTpSupportedInterfaces()
             .getSupportedInterfaceCapability().values();
         OwnedNodeEdgePointBuilder onepBldr = new OwnedNodeEdgePointBuilder()
@@ -728,6 +931,89 @@ public class ConvertORToTapiTopology {
             onepBldr.setMappedServiceInterfacePoint(
                 createMSIP(1, nepProtocol, oorTp.getTpId().getValue(), keyword, sicColl, operState, adminState));
         }
+        List<OperationalModeKey> opModeList = new ArrayList<>();
+        if (oorTp.augmentation(TerminationPoint1.class).getTpType().equals(OpenroadmTpType.XPONDERNETWORK)) {
+            if (oorTp.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526
+                        .TerminationPoint1.class) == null
+                    || oorTp.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm
+                        .network.topology.rev230526.TerminationPoint1.class).getXpdrNetworkAttributes()
+                    == null) {
+                for (SupportedInterfaceCapability sic : sicColl) {
+                    String ifCapType = sic.getIfCapType().toString().split("\\{")[0];
+                    if (("IfOCHOTUCnODUCn").equals(ifCapType) || ("IfOCHOTUCnODUCnUniregen").equals(ifCapType)
+                            || ("IfOCHOTUCnODUCnRegen").equals(ifCapType)) {
+                        opModeList.add(new OperationalModeKey("400G"));
+                        break;
+                    }
+                }
+                opModeList.add(new OperationalModeKey("100G"));
+            } else {
+                opModeList = oorTp.augmentation(
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.TerminationPoint1.class)
+                    .getXpdrNetworkAttributes().getSupportedOperationalModes().getOperationalMode().keySet().stream()
+                    .toList();
+            }
+            Map<Double, Double> freqWidthMap = getXpdrUsedWavelength(oorTp);
+            if (String.join("+", this.ietfNodeId, TapiStringConstants.OTSI_MC).equals(keyword)
+                    || String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA_OTS).equals(keyword)) {
+                //Creating OTS & OTSI_MC NEP specific attributes
+                onepBldr.setSupportedPayloadStructure(createSupportedPayloadStructureForPhtncMedia(
+                    sicColl,opModeList));
+                SpectrumCapabilityPacBuilder spectrumPac = new SpectrumCapabilityPacBuilder();
+                OccupiedSpectrumBuilder ospecBd = new OccupiedSpectrumBuilder();
+                if (freqWidthMap != null && !freqWidthMap.isEmpty()) {
+                    onepBldr.setAvailablePayloadStructure(createAvailablePayloadStructureForPhtncMedia(
+                        true, sicColl,opModeList));
+                    ospecBd
+                        .setUpperFrequency(Uint64.valueOf(Math.round(
+                            freqWidthMap.keySet().iterator().next().doubleValue() * 1E09
+                            + (freqWidthMap.entrySet().iterator().next().getValue().doubleValue() * 1E06) / 2)))
+                        .setLowerFrequency(Uint64.valueOf(Math.round(
+                            freqWidthMap.keySet().iterator().next().doubleValue() * 1E09
+                            - (freqWidthMap.entrySet().iterator().next().getValue().doubleValue() * 1E06) / 2)));
+                } else {
+                    ospecBd
+                        .setUpperFrequency(Uint64.valueOf(0))
+                        .setLowerFrequency(Uint64.valueOf(0));
+                    onepBldr.setAvailablePayloadStructure(createAvailablePayloadStructureForPhtncMedia(
+                        false, sicColl,opModeList));
+                    double naz = 0.01;
+                    AvailableSpectrum  aspec = new AvailableSpectrumBuilder()
+                        .setUpperFrequency(Uint64.valueOf(Math.round(GridConstant.START_EDGE_FREQUENCY * 1E09 + naz)))
+                        .setLowerFrequency(Uint64.valueOf(Math.round(GridConstant.START_EDGE_FREQUENCY * 1E09
+                            + GridConstant.GRANULARITY * GridConstant.EFFECTIVE_BITS * 1E06 + naz)))
+                        .build();
+                    Map<AvailableSpectrumKey, AvailableSpectrum> aspecMap = new HashMap<>();
+                    aspecMap.put(new AvailableSpectrumKey(aspec.getLowerFrequency(),
+                        aspec.getUpperFrequency()), aspec);
+                    spectrumPac.setAvailableSpectrum(aspecMap);
+                }
+                OccupiedSpectrum ospec = ospecBd.build();
+                Map<OccupiedSpectrumKey, OccupiedSpectrum> ospecMap = new HashMap<>();
+                ospecMap.put(new OccupiedSpectrumKey(ospec.getLowerFrequency(),
+                    ospec.getUpperFrequency()), ospec);
+                spectrumPac.setOccupiedSpectrum(ospecMap);
+                double nazz = 0.01;
+                SupportableSpectrum  sspec = new SupportableSpectrumBuilder()
+                    .setUpperFrequency(Uint64.valueOf(Math.round(GridConstant.START_EDGE_FREQUENCY * 1E09 + nazz)))
+                    .setLowerFrequency(Uint64.valueOf(Math.round(GridConstant.START_EDGE_FREQUENCY * 1E09
+                        + GridConstant.GRANULARITY * GridConstant.EFFECTIVE_BITS * 1E06 + nazz)))
+                    .build();
+                Map<SupportableSpectrumKey, SupportableSpectrum> sspecMap = new HashMap<>();
+                sspecMap.put(new SupportableSpectrumKey(sspec.getLowerFrequency(),
+                    sspec.getUpperFrequency()), sspec);
+                spectrumPac.setSupportableSpectrum(sspecMap);
+                PhotonicMediaNodeEdgePointSpec pnepSpec = new PhotonicMediaNodeEdgePointSpecBuilder()
+                    .setSpectrumCapabilityPac(spectrumPac.build())
+                    .build();
+                org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.OwnedNodeEdgePoint1 onep1 =
+                        new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121
+                        .OwnedNodeEdgePoint1Builder()
+                        .setPhotonicMediaNodeEdgePointSpec(pnepSpec)
+                        .build();
+                onepBldr.addAugmentation(onep1);
+            }
+        }
         return onepBldr.build();
     }
 
@@ -755,6 +1041,8 @@ public class ConvertORToTapiTopology {
             .build();
     }
 
+    @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(value = "SF_SWITCH_FALLTHROUGH",
+        justification = "Voluntarily No break in switchcase where comment is inserted in following method")
     private List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
             .service._interface.point.SupportedCepLayerProtocolQualifierInstances>
             createSipSupportedLayerProtocolQualifier(
@@ -776,8 +1064,6 @@ public class ConvertORToTapiTopology {
                 case "ETH":
                 case "DSR":
                     switch (ifCapType) {
-                        // TODO: it may be needed to add more cases clauses if the interface capabilities of a
-                        //  port are extended in the config file
                         case "If1GEODU0":
                             sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
                                     .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
@@ -855,8 +1141,6 @@ public class ConvertORToTapiTopology {
                     break;
                 case "ODU":
                     switch (ifCapType) {
-                        // TODO: it may be needed to add more cases clauses if the interface capabilities of a
-                        //  port are extended in the config file
                         case "If1GEODU0":
                             sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
                                     .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
@@ -895,17 +1179,39 @@ public class ConvertORToTapiTopology {
                     }
                     break;
                 case "PHOTONIC_MEDIA":
-                    if (ifCapType.equals("IfOCHOTU4ODU4") || ifCapType.equals("IfOCH")) {
-                        sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
-                                .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
-                            .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTSiMC.VALUE)
-                            .setNumberOfCepInstances(Uint64.valueOf(0))
-                            .build());
-                        sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
-                            .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
+                    switch (ifCapType) {
+                        case "IfOCHOTUCnODUCn":
+                        case "IfOtsiOtucnOducn":
+                        case "IfOCHOTUCnODUCnRegen":
+                        case "IfOCHOTUCnODUCnUniregen":
+                            sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
+                                    .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
+                                .setLayerProtocolQualifier(ODUTYPEODUCN.VALUE)
+                                .setNumberOfCepInstances(Uint64.valueOf(1))
+                                .build());
+                            sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
+                                    .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
+                                .setLayerProtocolQualifier(OTUTYPEOTUCN.VALUE)
+                                .setNumberOfCepInstances(Uint64.valueOf(1))
+                                .build());
+                         //fallthrough
+                        case "IfOCH":
+                        case "IfOCHOTU4ODU4":
+                        case "IfOCHOTU4ODU4Regen":
+                        case "IfOCHOTU4ODU4Uniregen":
+                            sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
+                                    .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
+                                .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTSiMC.VALUE)
+                                .setNumberOfCepInstances(Uint64.valueOf(1))
+                                .build());
+                            sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
+                                    .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
                                 .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTS.VALUE)
-                            .setNumberOfCepInstances(Uint64.valueOf(0))
-                            .build());
+                                .setNumberOfCepInstances(Uint64.valueOf(1))
+                                .build());
+                            break;
+                        default:
+                            break;
                     }
                     break;
                 default:
index bd5f6a1eeaac84c13ddae7f600d30c577f41fd82..4bee83b0a0fd7386d5b60b12aa1601aa65b39910 100644 (file)
@@ -8,7 +8,6 @@
 package org.opendaylight.transportpce.tapi.topology;
 
 import com.google.common.collect.ImmutableClassToInstanceMap;
-import com.google.common.util.concurrent.FluentFuture;
 import com.google.common.util.concurrent.ListenableFuture;
 import java.nio.charset.Charset;
 import java.util.ArrayList;
@@ -26,10 +25,10 @@ import java.util.concurrent.ExecutionException;
 import java.util.stream.Collectors;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
-import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.InstanceIdentifiers;
 import org.opendaylight.transportpce.common.NetworkUtils;
+import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.tapi.TapiStringConstants;
 import org.opendaylight.transportpce.tapi.utils.TapiContext;
 import org.opendaylight.transportpce.tapi.utils.TapiLink;
@@ -101,8 +100,6 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.Ru
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.TapiTopologyService;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.get.link.details.output.LinkBuilder;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.get.node.edge.point.details.output.NodeEdgePointBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.get.topology.details.output.Topology;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.get.topology.details.output.TopologyBuilder;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.NodeRuleGroup;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.NodeRuleGroupBuilder;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.NodeRuleGroupKey;
@@ -128,17 +125,20 @@ import org.slf4j.LoggerFactory;
 public class TapiTopologyImpl implements TapiTopologyService, TapiCommonService {
 
     private static final Logger LOG = LoggerFactory.getLogger(TapiTopologyImpl.class);
-    private final DataBroker dataBroker;
+    private final NetworkTransactionService networkTransactionService;
     private final TapiContext tapiContext;
     private final TopologyUtils topologyUtils;
     private final TapiLink tapiLink;
+    private Map<ServiceInterfacePointKey, ServiceInterfacePoint> tapiSips;
 
-    public TapiTopologyImpl(DataBroker dataBroker, TapiContext tapiContext, TopologyUtils topologyUtils,
-                            TapiLink tapiLink) {
-        this.dataBroker = dataBroker;
+    public TapiTopologyImpl(NetworkTransactionService networkTransactionService, TapiContext tapiContext,
+            TopologyUtils topologyUtils, TapiLink tapiLink) {
+        this.networkTransactionService = networkTransactionService;
         this.tapiContext = tapiContext;
         this.topologyUtils = topologyUtils;
         this.tapiLink = tapiLink;
+        this.tapiSips = new HashMap<>();
+
     }
 
     @Override
@@ -164,43 +164,53 @@ public class TapiTopologyImpl implements TapiTopologyService, TapiCommonService
 
     @Override
     public ListenableFuture<RpcResult<GetTopologyDetailsOutput>> getTopologyDetails(GetTopologyDetailsInput input) {
-        // TODO -> Add check for Full T0 Multilayer
-        Uuid topologyUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER.getBytes(
+        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.Topology topology;
+        Uuid topologyUuidAbs = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_MULTILAYER.getBytes(
+            Charset.forName("UTF-8"))).toString());
+        Uuid topologyUuidFull = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER.getBytes(
             Charset.forName("UTF-8"))).toString());
-        if (input.getTopologyId().equals(topologyUuid)) {
+        if (input.getTopologyId().equals(topologyUuidFull)) {
             Context context = this.tapiContext.getTapiContext();
             Map<TopologyKey,
                 org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.Topology>
                 topologyMap = context.augmentation(Context1.class).getTopologyContext().getTopology();
-            if (topologyMap == null || !topologyMap.containsKey(new TopologyKey(topologyUuid))) {
+            if (topologyMap == null || !topologyMap.containsKey(new TopologyKey(topologyUuidFull))) {
                 LOG.error("Topology {} not found in datastore", input.getTopologyId());
                 return RpcResultBuilder.<GetTopologyDetailsOutput>failed()
                     .withError(ErrorType.RPC, "Invalid Topology name")
                     .buildFuture();
             }
-            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.Topology
-                topology = topologyMap.get(new TopologyKey(topologyUuid));
+            topology = topologyMap.get(new TopologyKey(input.getTopologyId()));
             return RpcResultBuilder.success(new GetTopologyDetailsOutputBuilder()
-                    .setTopology(this.topologyUtils.transformTopology(topology))
-                    .build())
+                .setTopology(this.topologyUtils.transformTopology(topology))
+                .build())
                 .buildFuture();
         }
-        topologyUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.TPDR_100G.getBytes(
+        Uuid topologyUuid100G = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.TPDR_100G.getBytes(
             Charset.forName("UTF-8"))).toString());
-        try {
-            LOG.info("Building TAPI Topology abstraction for {}", input.getTopologyId());
-            Topology topology = createAbstractedOtnTopology();
-            if (topologyUuid.equals(input.getTopologyId())) {
+        if (topologyUuid100G.equals(input.getTopologyId()) || topologyUuidAbs.equals(input.getTopologyId())) {
+            try {
+                LOG.info("Building TAPI Topology abstraction for {}", input.getTopologyId());
+                topology = createAbstractedOtnTopology();
+                if (input.getTopologyId().equals(topologyUuidAbs)) {
+                    return RpcResultBuilder.success(new GetTopologyDetailsOutputBuilder()
+                        .setTopology(this.topologyUtils.transformTopology(topology)).build())
+                        .buildFuture();
+                }
                 topology = createAbstracted100GTpdrTopology(topology);
+                return RpcResultBuilder.success(new GetTopologyDetailsOutputBuilder()
+                    .setTopology(this.topologyUtils.transformTopology(topology)).build())
+                    .buildFuture();
+            } catch (TapiTopologyException e) {
+                LOG.error("error building TAPI topology");
+                return RpcResultBuilder.<GetTopologyDetailsOutput>failed()
+                    .withError(ErrorType.RPC, "Error building topology")
+                    .buildFuture();
             }
-            return RpcResultBuilder.success(new GetTopologyDetailsOutputBuilder().setTopology(topology).build())
-                .buildFuture();
-        } catch (TapiTopologyException e) {
-            LOG.error("error building TAPI topology");
-            return RpcResultBuilder.<GetTopologyDetailsOutput>failed()
-                .withError(ErrorType.RPC, "Error building topology")
-                .buildFuture();
         }
+        return RpcResultBuilder.<GetTopologyDetailsOutput>failed()
+            .withError(ErrorType.RPC, "Invalid Topology name")
+            .buildFuture();
     }
 
     @Override
@@ -338,7 +348,9 @@ public class TapiTopologyImpl implements TapiTopologyService, TapiCommonService
             .build();
     }
 
-    private Topology createAbstracted100GTpdrTopology(Topology topology) {
+    public org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.Topology
+            createAbstracted100GTpdrTopology(
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.Topology topology) {
         List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node> dsrNodes =
             topology.nonnullNode().values().stream()
                 .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR))
@@ -355,31 +367,17 @@ public class TapiTopologyImpl implements TapiTopologyService, TapiCommonService
             TapiStringConstants.TPDR_100G.getBytes(Charset.forName("UTF-8"))).toString());
         org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node node =
             createTapiNode(nep100GTpdrList, topoUuid);
-        return new TopologyBuilder()
+        return new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context
+                .TopologyBuilder()
             .setName(Map.of(topoName.key(), topoName))
             .setUuid(topoUuid)
             .setNode(Map.of(node.key(), node))
+            .setLayerProtocolName(Set.of(LayerProtocolName.DSR, LayerProtocolName.ETH))
             .build();
     }
 
-    private Network readTopology(InstanceIdentifier<Network> networkIID) throws TapiTopologyException {
-        Network topology = null;
-        FluentFuture<Optional<Network>> topologyFuture = dataBroker.newReadOnlyTransaction()
-            .read(LogicalDatastoreType.CONFIGURATION, networkIID);
-        try {
-            topology = topologyFuture.get().orElseThrow();
-        } catch (InterruptedException e) {
-            Thread.currentThread().interrupt();
-            throw new TapiTopologyException("Unable to get from mdsal topology: " + networkIID
-                .firstKeyOf(Network.class).getNetworkId().getValue(), e);
-        } catch (ExecutionException e) {
-            throw new TapiTopologyException("Unable to get from mdsal topology: " + networkIID
-                .firstKeyOf(Network.class).getNetworkId().getValue(), e);
-        }
-        return topology;
-    }
-
-    private Topology createAbstractedOtnTopology() throws TapiTopologyException {
+    public org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.Topology
+            createAbstractedOtnTopology() throws TapiTopologyException {
         // read openroadm-topology
         Network openroadmTopo = readTopology(InstanceIdentifiers.OVERLAY_NETWORK_II);
         List<Link> linkList = new ArrayList<>();
@@ -457,11 +455,32 @@ public class TapiTopologyImpl implements TapiTopologyService, TapiCommonService
             .setValue(TapiStringConstants.T0_MULTILAYER)
             .setValueName("TAPI Topology Name")
             .build();
-        return new TopologyBuilder()
-                .setName(Map.of(name.key(), name))
-                .setUuid(topoUuid)
-                .setNode(tapiNodeList)
-                .setLink(tapiLinkList).build();
+        LOG.info("TOPOABSTRACTED : the list of node is as follows {}", tapiNodeList.toString());
+        this.tapiSips.putAll(tapiAbstractFactory.getTapiSips());
+        return new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context
+                .TopologyBuilder()
+            .setName(Map.of(name.key(), name))
+            .setUuid(topoUuid)
+            .setNode(tapiNodeList)
+            .setLayerProtocolName(Set.of(LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.DIGITALOTN))
+            .setLink(tapiLinkList).build();
+    }
+
+    private Network readTopology(InstanceIdentifier<Network> networkIID) throws TapiTopologyException {
+        Network topology = null;
+        ListenableFuture<Optional<Network>> topologyFuture = networkTransactionService
+            .read(LogicalDatastoreType.CONFIGURATION, networkIID);
+        try {
+            topology = topologyFuture.get().orElseThrow();
+        } catch (InterruptedException e) {
+            Thread.currentThread().interrupt();
+            throw new TapiTopologyException("Unable to get from mdsal topology: " + networkIID
+                .firstKeyOf(Network.class).getNetworkId().getValue(), e);
+        } catch (ExecutionException e) {
+            throw new TapiTopologyException("Unable to get from mdsal topology: " + networkIID
+                .firstKeyOf(Network.class).getNetworkId().getValue(), e);
+        }
+        return topology;
     }
 
     private org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node
@@ -498,9 +517,8 @@ public class TapiTopologyImpl implements TapiTopologyService, TapiCommonService
         KeyedInstanceIdentifier<Mapping, MappingKey> pmIID = InstanceIdentifier.create(
             org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.Network.class)
             .child(Nodes.class, new NodesKey(nodeIdPortMap)).child(Mapping.class, new MappingKey(networkLcp));
-        @NonNull
-        FluentFuture<Optional<Mapping>> mappingOpt = dataBroker.newReadOnlyTransaction().read(
-            LogicalDatastoreType.CONFIGURATION, pmIID);
+        ListenableFuture<Optional<Mapping>> mappingOpt = networkTransactionService
+            .read(LogicalDatastoreType.CONFIGURATION, pmIID);
         Mapping mapping = null;
         if (mappingOpt.isDone()) {
             try {
@@ -582,4 +600,8 @@ public class TapiTopologyImpl implements TapiTopologyService, TapiCommonService
         return nodeRuleGroupMap;
     }
 
+    public Map<ServiceInterfacePointKey, ServiceInterfacePoint> getSipMap() {
+        return tapiSips;
+    }
+
 }
index 726954ea256183eb37f1bf93eef5655489c2b95e..8eba6c2cf375ce1ab39257b32554d07f9d77dc61 100644 (file)
@@ -53,7 +53,7 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.glob
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.NameKey;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePoint;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePointKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.OwnedNodeEdgePoint1;
+//import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.OwnedNodeEdgePoint1;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.context.TopologyContext;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePoint;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePointBuilder;
@@ -240,6 +240,14 @@ public final class TopologyUtils {
 
             // Retrieve created sips map in TapiFactory when mapping all the nodes
             this.tapiSips.putAll(tapiFullFactory.getTapiSips());
+            var topo = new TopologyBuilder()
+                .setName(Map.of(name.key(), name))
+                .setUuid(topoUuid)
+                .setNode(tapiNodeList)
+                .setLayerProtocolName(Set.of(LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.ODU,
+                    LayerProtocolName.DSR))
+                .setLink(tapiLinkList).build();
+            LOG.error("TOPOUTIL, Initial FullTopology Builder.build = {}", topo.toString());
             return new TopologyBuilder()
                 .setName(Map.of(name.key(), name))
                 .setUuid(topoUuid)
@@ -256,10 +264,6 @@ public final class TopologyUtils {
             .build();
     }
 
-    public Map<ServiceInterfacePointKey, ServiceInterfacePoint> getSipMap() {
-        return tapiSips;
-    }
-
     public boolean checkTp(String nodeIdTopo, String nodeIdPortMap, TerminationPoint tp, List<Link> xpdOut,
                            List<Link> xpdIn) {
         LOG.info("Inside Checktp for node {}-{}", nodeIdTopo, nodeIdPortMap);
@@ -320,23 +324,20 @@ public final class TopologyUtils {
                 .setUuid(topology.getUuid())
                 .setName(topology.getName())
                 .setLayerProtocolName(topology.getLayerProtocolName())
-                .setNode(topology.getNode())
                 .setLink(topology.getLink());
-        if (topology.getNode() == null) {
-            topologyBuilder.setNode(topology.getNode());
+        if (topology.nonnullNode().isEmpty()) {
             return topologyBuilder.build();
         }
-        // TODO -> Need to remove CEPs from NEPs. If not error from get Topology details output
         Map<NodeKey, Node> mapNode = new HashMap<>();
-        for (Node node: topology.getNode().values()) {
+        for (Node node: topology.nonnullNode().values()) {
             Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepMap = new HashMap<>();
-            for (OwnedNodeEdgePoint onep: node.getOwnedNodeEdgePoint().values()) {
-                OwnedNodeEdgePoint1 onep1 = onep.augmentation(OwnedNodeEdgePoint1.class);
-                if (onep1 == null) {
-                    onepMap.put(onep.key(), onep);
-                    continue;
-                }
-                OwnedNodeEdgePointBuilder newOnepBuilder = new OwnedNodeEdgePointBuilder()
+            for (OwnedNodeEdgePoint onep: node.nonnullOwnedNodeEdgePoint().values()) {
+//                    OwnedNodeEdgePoint1 onep1 = onep.augmentation(OwnedNodeEdgePoint1.class);
+//                    if (onep1 == null) {
+//                        onepMap.put(onep.key(), onep);
+//                        continue;
+//                    }
+                OwnedNodeEdgePoint newOnep = new OwnedNodeEdgePointBuilder()
                         .setUuid(onep.getUuid())
                         .setLayerProtocolName(onep.getLayerProtocolName())
                         .setName(onep.getName())
@@ -345,17 +346,25 @@ public final class TopologyUtils {
                         .setAdministrativeState(onep.getAdministrativeState())
                         .setOperationalState(onep.getOperationalState())
                         .setLifecycleState(onep.getLifecycleState())
-//                        .setTerminationDirection(onep.getTerminationDirection())
-//                        .setTerminationState(onep.getTerminationState())
+//                            .setTerminationDirection(onep.getTerminationDirection())
+//                            .setTerminationState(onep.getTerminationState())
                         .setDirection(onep.getDirection())
-                        .setLinkPortRole(onep.getLinkPortRole());
-                if (onep.getMappedServiceInterfacePoint() != null) {
-                    newOnepBuilder.setMappedServiceInterfacePoint(onep.getMappedServiceInterfacePoint());
-                }
-                OwnedNodeEdgePoint nep = newOnepBuilder.build();
-                onepMap.put(nep.key(), nep);
+                        .setSupportedPayloadStructure(onep.getSupportedPayloadStructure())
+                        .setAvailablePayloadStructure(onep.getAvailablePayloadStructure())
+                        .setLinkPortRole(onep.getLinkPortRole())
+                        .setMappedServiceInterfacePoint(onep.nonnullMappedServiceInterfacePoint())
+                        .build();
+                onepMap.put(newOnep.key(), newOnep);
             }
-            Node newNode = new NodeBuilder(node)
+            Node newNode = new NodeBuilder()
+                    .setUuid(node.getUuid())
+                    .setName(node.getName())
+                    .setOperationalState(node.getOperationalState())
+                    .setAdministrativeState(node.getAdministrativeState())
+                    .setLifecycleState(node.getLifecycleState())
+                    .setLayerProtocolName(node.getLayerProtocolName())
+                    .setNodeRuleGroup(node.getNodeRuleGroup())
+                    .setInterRuleGroup(node.getInterRuleGroup())
                     .setOwnedNodeEdgePoint(onepMap)
                     .build();
             mapNode.put(newNode.key(), newNode);
@@ -363,4 +372,9 @@ public final class TopologyUtils {
         topologyBuilder.setNode(mapNode);
         return topologyBuilder.build();
     }
+
+    public Map<ServiceInterfacePointKey, ServiceInterfacePoint> getSipMap() {
+        return tapiSips;
+    }
+
 }
index b0ff26ba92032e7d3d477dbed6e67988c009f121..960a41c93be4e1a8d960cddd608703f65c1cb5e9 100644 (file)
@@ -7,26 +7,22 @@
  */
 package org.opendaylight.transportpce.tapi.topology;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNull;
-import static org.mockito.Mockito.mock;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.when;
 
 import com.google.common.util.concurrent.FluentFuture;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import java.nio.charset.Charset;
-import java.util.Optional;
 import java.util.UUID;
 import java.util.concurrent.ExecutionException;
-import org.eclipse.jdt.annotation.NonNull;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mock;
-import org.mockito.invocation.InvocationOnMock;
-import org.mockito.stubbing.Answer;
-import org.opendaylight.mdsal.binding.api.DataBroker;
-import org.opendaylight.mdsal.binding.api.ReadTransaction;
-import org.opendaylight.mdsal.common.api.CommitInfo;
-import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.mockito.junit.jupiter.MockitoExtension;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.tapi.TapiStringConstants;
 import org.opendaylight.transportpce.tapi.utils.TapiContext;
@@ -35,12 +31,13 @@ import org.opendaylight.transportpce.tapi.utils.TapiTopologyDataUtils;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Uuid;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetTopologyDetailsInput;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetTopologyDetailsOutput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.get.topology.details.output.Topology;
-import org.opendaylight.yangtools.yang.binding.DataObject;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.ErrorType;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 
+@ExtendWith(MockitoExtension.class)
 public class TapiTopologyImplExceptionTest {
+    @Mock
+    private NetworkTransactionService networkTransactionService;
     @Mock
     private TapiContext tapiContext;
     @Mock
@@ -50,59 +47,17 @@ public class TapiTopologyImplExceptionTest {
 
     @Test
     void getTopologyDetailsWithExceptionTest() throws InterruptedException, ExecutionException {
-        DataBroker dataBroker = mock(DataBroker.class);
-        when(dataBroker.newReadOnlyTransaction())
-                .thenReturn(new ReadTransactionMock());
-        NetworkTransactionService networkTransactionService = mock(NetworkTransactionService.class);
-        Answer<FluentFuture<CommitInfo>> answer = new Answer<FluentFuture<CommitInfo>>() {
-
-            @Override
-            public FluentFuture<CommitInfo> answer(InvocationOnMock invocation) throws Throwable {
-                return CommitInfo.emptyFluentFuture();
-            }
-
-        };
-        when(networkTransactionService.commit()).then(answer);
-        tapiContext = new TapiContext(networkTransactionService);
-
+        when(networkTransactionService.read(any(), any()))
+            .thenReturn(FluentFuture.from(Futures.immediateFailedFuture(new InterruptedException())));
         Uuid topologyUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_MULTILAYER.getBytes(
             Charset.forName("UTF-8"))).toString());
         GetTopologyDetailsInput input = TapiTopologyDataUtils.buildGetTopologyDetailsInput(topologyUuid);
-        TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(dataBroker, tapiContext, topologyUtils, tapiLink);
+        TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(networkTransactionService, tapiContext, topologyUtils,
+            tapiLink);
         ListenableFuture<RpcResult<GetTopologyDetailsOutput>> result = tapiTopoImpl.getTopologyDetails(input);
-        RpcResult<GetTopologyDetailsOutput> rpcResult = result.get();
-        if (rpcResult.isSuccessful()) {
-            Topology topology = rpcResult.getResult().getTopology();
-            assertNull(topology, "Topology should be null");
-        } else {
-            assertNull(null, "Topology should be null");
-        }
-    }
-
-    private final class ReadTransactionMock implements ReadTransaction {
-
-        @Override
-        public @NonNull Object getIdentifier() {
-            // TODO Auto-generated method stub
-            return null;
-        }
-
-        @Override
-        public <T extends DataObject> @NonNull FluentFuture<Optional<T>> read(@NonNull LogicalDatastoreType store,
-                                                                              @NonNull InstanceIdentifier<T> path) {
-            return FluentFuture.from(Futures.immediateFailedFuture(new InterruptedException()));
-        }
-
-        @Override
-        public @NonNull FluentFuture<Boolean> exists(@NonNull LogicalDatastoreType store,
-                                                     @NonNull InstanceIdentifier<?> path) {
-            // TODO Auto-generated method stub
-            return null;
-        }
-
-        @Override
-        public void close() {
-            // TODO Auto-generated method stub
-        }
+        assertFalse(result.get().isSuccessful(), "RpcResult is not successful");
+        assertNull(result.get().getResult(), "RpcResult result should be null");
+        assertEquals(ErrorType.RPC, result.get().getErrors().get(0).getErrorType());
+        assertEquals("Error building topology", result.get().getErrors().get(0).getMessage());
     }
 }
\ No newline at end of file
index 71a6aaf554a2534e503c300773d42926d00862d1..3f7b76487e99a2e2fb30383caf6e88eed7ef878e 100644 (file)
@@ -129,7 +129,8 @@ public class TapiTopologyImplTest extends AbstractTest {
             Charset.forName("UTF-8"))).toString());
         LOG.info("TPDR100GUuid = {}", topologyUuid);
         GetTopologyDetailsInput input = TapiTopologyDataUtils.buildGetTopologyDetailsInput(topologyUuid);
-        TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(getDataBroker(), tapiContext, topologyUtils, tapiLink);
+        TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(networkTransactionService, tapiContext, topologyUtils,
+            tapiLink);
         ListenableFuture<RpcResult<GetTopologyDetailsOutput>> result = tapiTopoImpl.getTopologyDetails(input);
         LOG.info("RESULT of getTopoDetailsTopo/name = {}", result.get().getResult().getTopology().getName().toString());
         result.addListener(new Runnable() {
@@ -179,7 +180,8 @@ public class TapiTopologyImplTest extends AbstractTest {
             Charset.forName("UTF-8"))).toString());
         LOG.info("T0MultilayerUuid = {}", topologyUuid);
         GetTopologyDetailsInput input = TapiTopologyDataUtils.buildGetTopologyDetailsInput(topologyUuid);
-        TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(getDataBroker(), tapiContext, topologyUtils, tapiLink);
+        TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(networkTransactionService, tapiContext, topologyUtils,
+            tapiLink);
         ListenableFuture<RpcResult<GetTopologyDetailsOutput>> result = tapiTopoImpl.getTopologyDetails(input);
         result.addListener(new Runnable() {
             @Override
@@ -329,7 +331,8 @@ public class TapiTopologyImplTest extends AbstractTest {
             Charset.forName("UTF-8"))).toString());
         LOG.info("T0FullMultilayerUuid = {}", topologyUuid);
         GetTopologyDetailsInput input = TapiTopologyDataUtils.buildGetTopologyDetailsInput(topologyUuid);
-        TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(getDataBroker(), tapiContext, topologyUtils, tapiLink);
+        TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(networkTransactionService, tapiContext, topologyUtils,
+            tapiLink);
         ListenableFuture<RpcResult<GetTopologyDetailsOutput>> result = tapiTopoImpl.getTopologyDetails(input);
         result.addListener(new Runnable() {
             @Override
@@ -460,12 +463,6 @@ public class TapiTopologyImplTest extends AbstractTest {
                 .filter(nep -> nep.getName().containsKey(new NameKey("eNodeEdgePoint"))))
             .count();
         assertEquals(4, inb5, "SPDR-SA1-XPDR2+XPONDER (switch) should have 4 external network neps");
-        Node nodeRoadm = topology.getNode().values().stream()
-            .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA)
-                && !node.getLayerProtocolName().contains(LayerProtocolName.DSR))
-            .filter(node -> node.getName().get(new NameKey("roadm node name")).getValue()
-                .equals("ROADM-A1+PHOTONIC_MEDIA"))
-            .findAny().orElseThrow();
         long inb6 = topology.getNode().values().stream()
             .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA)
                 && !node.getLayerProtocolName().contains(LayerProtocolName.DSR))
@@ -523,7 +520,8 @@ public class TapiTopologyImplTest extends AbstractTest {
         Uuid topologyUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER.getBytes(
             Charset.forName("UTF-8"))).toString());
         GetTopologyDetailsInput input = TapiTopologyDataUtils.buildGetTopologyDetailsInput(topologyUuid);
-        TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(getDataBroker(), tapiContext, topologyUtils, tapiLink);
+        TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(networkTransactionService, tapiContext, topologyUtils,
+            tapiLink);
         ListenableFuture<RpcResult<GetTopologyDetailsOutput>> result = tapiTopoImpl.getTopologyDetails(input);
         result.addListener(new Runnable() {
             @Override
@@ -536,7 +534,6 @@ public class TapiTopologyImplTest extends AbstractTest {
         @Nullable
         Topology topology = rpcResult.getResult().getTopology();
         for (Node node:topology.getNode().values()) {
-            //String nodeName = node.getName().values().stream().findFirst().orElseThrow().getValue();
             Uuid nodeUuid = node.getUuid();
             GetNodeDetailsInput input1 = TapiTopologyDataUtils.buildGetNodeDetailsInput(topologyUuid, nodeUuid);
             ListenableFuture<RpcResult<GetNodeDetailsOutput>> result1 = tapiTopoImpl.getNodeDetails(input1);
@@ -552,7 +549,6 @@ public class TapiTopologyImplTest extends AbstractTest {
             Node node1 = rpcResult1.getResult().getNode();
             assertNotNull(node1, "Node should not be null");
             for (OwnedNodeEdgePoint onep:node1.getOwnedNodeEdgePoint().values()) {
-                //String onepName = onep.getName().values().stream().findFirst().orElseThrow().getValue();
                 Uuid onepUuid = onep.getUuid();
                 GetNodeEdgePointDetailsInput input2 = TapiTopologyDataUtils.buildGetNodeEdgePointDetailsInput(
                     topologyUuid, nodeUuid, onepUuid);
@@ -580,7 +576,8 @@ public class TapiTopologyImplTest extends AbstractTest {
         Uuid topologyUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER.getBytes(
             Charset.forName("UTF-8"))).toString());
         GetTopologyDetailsInput input = TapiTopologyDataUtils.buildGetTopologyDetailsInput(topologyUuid);
-        TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(getDataBroker(), tapiContext, topologyUtils, tapiLink);
+        TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(networkTransactionService, tapiContext, topologyUtils,
+            tapiLink);
         ListenableFuture<RpcResult<GetTopologyDetailsOutput>> result = tapiTopoImpl.getTopologyDetails(input);
         result.addListener(new Runnable() {
             @Override
@@ -593,7 +590,6 @@ public class TapiTopologyImplTest extends AbstractTest {
         @Nullable
         Topology topology = rpcResult.getResult().getTopology();
         for (Link link:topology.getLink().values()) {
-            //String linkName = link.getName().values().stream().findFirst().orElseThrow().getValue();
             Uuid linkUuid = link.getUuid();
             GetLinkDetailsInput input1 = TapiTopologyDataUtils.buildGetLinkDetailsInput(
                 topologyUuid, linkUuid);
@@ -616,7 +612,8 @@ public class TapiTopologyImplTest extends AbstractTest {
     void getSipDetailsWhenSuccessful()
             throws ExecutionException, InterruptedException {
         GetServiceInterfacePointListInput input = TapiTopologyDataUtils.buildServiceInterfacePointListInput();
-        TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(getDataBroker(), tapiContext, topologyUtils, tapiLink);
+        TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(networkTransactionService, tapiContext, topologyUtils,
+            tapiLink);
         ListenableFuture<RpcResult<GetServiceInterfacePointListOutput>> result = tapiTopoImpl
             .getServiceInterfacePointList(input);
         result.addListener(new Runnable() {
index 8f44a16b2ad9fbc6ef96a47b60a5995d99a3c0c7..69800bab315ba8a8d19e9cbb71ad5465d9dc7d0c 100644 (file)
@@ -646,7 +646,7 @@ class TransportTapitesting(unittest.TestCase):
                          'node name should be: ROADM-infra')
 
     def test_43_get_tapi_topology_T100G(self):
-        self.tapi_topo["topology-id"] = test_utils.T100GE
+        self.tapi_topo["topology-id"] = test_utils.T100GE_UUID
         response = test_utils.transportpce_api_rpc_request(
             'tapi-topology', 'get-topology-details', self.tapi_topo)
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -684,14 +684,6 @@ class TransportTapitesting(unittest.TestCase):
         self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content))
 
 
-# def count_object_with_double_key(list_dicts, key1, key2, value):
-#    nb = 0
-#    for dictio in list_dicts:
-#        print(dictio)
-#        if dictio[key1][0][key2] == value:
-#            nb += 1
-#    return nb
-
 def count_object_with_double_key(list_dicts, key1, key2, value):
     nb = 0
     for dictio in list_dicts: