X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=renderer%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Ftransportpce%2Frenderer%2FModelMappingUtils.java;h=8197b9ba06e47c79036d260987122550521d264c;hb=refs%2Fchanges%2F46%2F100646%2F27;hp=418e7e9ed6841395b6a0c57e051f56e949771d56;hpb=9b98d36cc5644123059a899750ff4f9141731b1e;p=transportpce.git diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/ModelMappingUtils.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/ModelMappingUtils.java index 418e7e9ed..8197b9ba0 100644 --- a/renderer/src/main/java/org/opendaylight/transportpce/renderer/ModelMappingUtils.java +++ b/renderer/src/main/java/org/opendaylight/transportpce/renderer/ModelMappingUtils.java @@ -8,45 +8,56 @@ package org.opendaylight.transportpce.renderer; import com.google.common.util.concurrent.ListenableFuture; +import java.math.BigDecimal; import java.util.ArrayList; +import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.Set; import java.util.TreeMap; +import java.util.stream.Collectors; import org.opendaylight.transportpce.common.NodeIdPair; import org.opendaylight.transportpce.common.StringConstants; import org.opendaylight.transportpce.common.fixedflex.GridConstant; import org.opendaylight.transportpce.common.fixedflex.GridUtils; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.Action; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.OtnServicePathInput; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.OtnServicePathInputBuilder; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.ServicePathInput; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.ServicePathInputBuilder; +import org.opendaylight.transportpce.common.mapping.PortMappingUtils; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.Action; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.OtnServicePathInput; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.OtnServicePathInputBuilder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathInput; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathInputBuilder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.az.api.info.AEndApiInfo; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.az.api.info.AEndApiInfoBuilder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.az.api.info.ZEndApiInfo; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.az.api.info.ZEndApiInfoBuilder; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerSetupInput; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerSetupInputBuilder; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210618.ServiceDeleteOutput; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210618.ServiceDeleteOutputBuilder; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210618.ServiceImplementationRequestInput; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210618.ServiceImplementationRequestOutput; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210618.ServiceImplementationRequestOutputBuilder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.configuration.response.common.ConfigurationResponseCommon; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.configuration.response.common.ConfigurationResponseCommonBuilder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteOutput; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteOutputBuilder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestInput; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestOutput; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestOutputBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.configuration.response.common.ConfigurationResponseCommon; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.configuration.response.common.ConfigurationResponseCommonBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.FrequencyGHz; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.FrequencyTHz; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.ModulationFormat; -import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev181130.OpucnTribSlotDef; -import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.ServiceDeleteInput; +import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.OpucnTribSlotDef; +import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceDeleteInput; import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.PathDescription; import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.AToZDirection; import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ZToADirection; import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZ; import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ztoa.direction.ZToA; import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.Resource; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.Link; import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.TerminationPoint; -import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev210618.optical.renderer.nodes.Nodes; -import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev210618.optical.renderer.nodes.NodesBuilder; -import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev210618.optical.renderer.nodes.NodesKey; +import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev210930.optical.renderer.nodes.Nodes; +import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev210930.optical.renderer.nodes.NodesBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev210930.optical.renderer.nodes.NodesKey; +import org.opendaylight.yangtools.yang.common.Decimal64; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; import org.opendaylight.yangtools.yang.common.Uint32; @@ -54,7 +65,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; - public final class ModelMappingUtils { private static final Logger LOG = LoggerFactory.getLogger(ModelMappingUtils.class); @@ -73,14 +83,19 @@ public final class ModelMappingUtils { olmSetupBldr.setWaveNumber(atoZDirection.getAToZWavelengthNumber()); if (atoZDirection.getAToZMinFrequency() != null) { olmSetupBldr.setLowerSpectralSlotNumber(Uint32 - .valueOf(GridUtils - .getLowerSpectralIndexFromFrequency(atoZDirection.getAToZMinFrequency().getValue()))); + .valueOf(GridUtils + .getLowerSpectralIndexFromFrequency(atoZDirection.getAToZMinFrequency().getValue()))); } if (atoZDirection.getAToZMaxFrequency() != null) { olmSetupBldr.setHigherSpectralSlotNumber(Uint32 - .valueOf(GridUtils - .getHigherSpectralIndexFromFrequency(atoZDirection.getAToZMaxFrequency().getValue()))); + .valueOf(GridUtils + .getHigherSpectralIndexFromFrequency(atoZDirection.getAToZMaxFrequency().getValue()))); } + // Set the MC-width for the OLM + olmSetupBldr.setMcWidth(new FrequencyGHz(Decimal64.valueOf( + atoZDirection.getAToZMaxFrequency().getValue().decimalValue() + .subtract(atoZDirection.getAToZMinFrequency().getValue().decimalValue()) + .multiply(new BigDecimal(1000))))); } return olmSetupBldr.build(); } @@ -124,7 +139,10 @@ public final class ModelMappingUtils { .setServiceName(serviceName) .setOperation(operation) .setNodes(nodeLists.getRendererNodeList()) - .setWidth(new FrequencyGHz(GridConstant.WIDTH_40)); + .setNmcWidth(new FrequencyGHz(Decimal64.valueOf(GridConstant.WIDTH_40))) + .setMcWidth(new FrequencyGHz(Decimal64.valueOf( + pathDescription.getAToZDirection().getAToZMaxFrequency().getValue().decimalValue() + .subtract(pathDescription.getAToZDirection().getAToZMinFrequency().getValue().decimalValue())))); if (atoZDirection.getAToZWavelengthNumber() != null) { servicePathInputBuilder .setWaveNumber(atoZDirection.getAToZWavelengthNumber()); @@ -146,9 +164,10 @@ public final class ModelMappingUtils { .getHigherSpectralIndexFromFrequency(atoZDirection.getAToZMaxFrequency().getValue()))); } if (atoZDirection.getAToZMinFrequency() != null && atoZDirection.getAToZMaxFrequency() != null) { - servicePathInputBuilder.setCenterFreq( - GridUtils.getCentralFrequencyWithPrecision(atoZDirection.getAToZMinFrequency().getValue(), - atoZDirection.getAToZMaxFrequency().getValue(), scale)); + servicePathInputBuilder.setCenterFreq(GridUtils.getCentralFrequencyWithPrecision( + atoZDirection.getAToZMinFrequency().getValue().decimalValue(), + atoZDirection.getAToZMaxFrequency().getValue().decimalValue(), + scale)); } if (atoZDirection.getRate() != null && atoZDirection.getModulationFormat() != null) { Optional optionalModulationFormat = ModulationFormat @@ -157,12 +176,14 @@ public final class ModelMappingUtils { && GridConstant.FREQUENCY_WIDTH_TABLE .contains(atoZDirection.getRate(), optionalModulationFormat.get())) { servicePathInputBuilder - .setWidth(FrequencyGHz + .setNmcWidth(FrequencyGHz .getDefaultInstance(GridConstant.FREQUENCY_WIDTH_TABLE.get(atoZDirection.getRate(), optionalModulationFormat.get()))); } } - servicePathInputBuilder.setModulationFormat(atoZDirection.getModulationFormat()); + servicePathInputBuilder.setModulationFormat(atoZDirection.getModulationFormat()) + .setAEndApiInfo(createAendApiInfo(pathDescription, false)) + .setZEndApiInfo(createZendApiInfo(pathDescription, false)); return new ServicePathInputData(servicePathInputBuilder.build(), nodeLists); } @@ -176,7 +197,10 @@ public final class ModelMappingUtils { .setOperation(operation) .setServiceName(serviceName) .setNodes(nodeLists.getRendererNodeList()) - .setWidth(new FrequencyGHz(GridConstant.WIDTH_40)); + .setNmcWidth(new FrequencyGHz(Decimal64.valueOf(GridConstant.WIDTH_40))) + .setMcWidth(new FrequencyGHz(Decimal64.valueOf( + pathDescription.getAToZDirection().getAToZMaxFrequency().getValue().decimalValue() + .subtract(pathDescription.getAToZDirection().getAToZMinFrequency().getValue().decimalValue())))); if (ztoADirection.getZToAWavelengthNumber() != null) { servicePathInputBuilder .setWaveNumber(ztoADirection.getZToAWavelengthNumber()); @@ -198,9 +222,10 @@ public final class ModelMappingUtils { .getHigherSpectralIndexFromFrequency(ztoADirection.getZToAMaxFrequency().getValue()))); } if (ztoADirection.getZToAMinFrequency() != null && ztoADirection.getZToAMaxFrequency() != null) { - servicePathInputBuilder.setCenterFreq( - GridUtils.getCentralFrequencyWithPrecision(ztoADirection.getZToAMinFrequency().getValue(), - ztoADirection.getZToAMaxFrequency().getValue(), scale)); + servicePathInputBuilder.setCenterFreq(GridUtils.getCentralFrequencyWithPrecision( + ztoADirection.getZToAMinFrequency().getValue().decimalValue(), + ztoADirection.getZToAMaxFrequency().getValue().decimalValue(), + scale)); } if (ztoADirection.getRate() != null && ztoADirection.getModulationFormat() != null) { Optional optionalModulationFormat = ModulationFormat @@ -208,12 +233,14 @@ public final class ModelMappingUtils { if (optionalModulationFormat.isPresent() && GridConstant.FREQUENCY_WIDTH_TABLE .contains(ztoADirection.getRate(), optionalModulationFormat.get())) { - servicePathInputBuilder.setWidth(FrequencyGHz + servicePathInputBuilder.setNmcWidth(FrequencyGHz .getDefaultInstance(GridConstant.FREQUENCY_WIDTH_TABLE.get(ztoADirection.getRate(), optionalModulationFormat.get()))); } } - servicePathInputBuilder.setModulationFormat(ztoADirection.getModulationFormat()); + servicePathInputBuilder.setModulationFormat(ztoADirection.getModulationFormat()) + .setAEndApiInfo(createAendApiInfo(pathDescription, false)) + .setZEndApiInfo(createZendApiInfo(pathDescription, false)); return new ServicePathInputData(servicePathInputBuilder.build(), nodeLists); } @@ -221,7 +248,7 @@ public final class ModelMappingUtils { public static OtnServicePathInput rendererCreateOtnServiceInput(String serviceName, Action operation, String serviceFormat, Uint32 serviceRate, PathDescription pathDescription, boolean asideToZside) { // If atoZ is set true use A-to-Z direction otherwise use Z-to-A - List nodes = + List nodes = new ArrayList<>(); NodeLists nodeLists = (asideToZside) @@ -229,19 +256,24 @@ public final class ModelMappingUtils { : getNodesListZtoA(pathDescription.getZToADirection().nonnullZToA().values().iterator()); LOG.info("These are node-lists {}, {}", nodeLists.getRendererNodeList(), nodeLists.getOlmNodeList()); for (Nodes node: nodeLists.getRendererNodeList()) { - nodes.add(new org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev210618.otn.renderer.nodes - .NodesBuilder() - .setNodeId(node.getNodeId()) - .setClientTp(node.getSrcTp()) - .setNetworkTp(node.getDestTp()) - .build()); + org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev210930.otn.renderer.nodes.NodesBuilder nb + = new org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev210930.otn.renderer.nodes + .NodesBuilder().setNodeId(node.getNodeId()).setNetworkTp(node.getDestTp()); + if (node.getSrcTp() != null && node.getSrcTp().contains("NETWORK")) { + nb.setNetwork2Tp(node.getSrcTp()); + } else { + nb.setClientTp(node.getSrcTp()); + } + nodes.add(nb.build()); } OtnServicePathInputBuilder otnServicePathInputBuilder = new OtnServicePathInputBuilder() .setServiceName(serviceName) .setOperation(operation) .setServiceFormat(serviceFormat) .setServiceRate(serviceRate) - .setNodes(nodes); + .setNodes(nodes) + .setAEndApiInfo(createAendApiInfo(pathDescription, true)) + .setZEndApiInfo(createZendApiInfo(pathDescription, true)); // set the trib-slots and trib-ports for the lower oder odu if (serviceRate.intValue() == 1 || (serviceRate.intValue() == 10)) { @@ -253,10 +285,13 @@ public final class ModelMappingUtils { .setTribPortNumber(tribPort) .setTribSlot(minTribSlot); } - if (serviceRate.intValue() == 100) { - List opucnTribSlotDefList = new ArrayList<>(); - opucnTribSlotDefList.add(pathDescription.getAToZDirection().getMinTribSlot()); - opucnTribSlotDefList.add(pathDescription.getAToZDirection().getMaxTribSlot()); + if (serviceRate.intValue() == 100 && pathDescription.getAToZDirection().getMinTribSlot() != null + && pathDescription.getAToZDirection().getMaxTribSlot() != null) { + Set opucnTribSlotDefList = new HashSet<>(); + opucnTribSlotDefList.add( + new OpucnTribSlotDef(pathDescription.getAToZDirection().getMinTribSlot().getValue())); + opucnTribSlotDefList.add( + new OpucnTribSlotDef(pathDescription.getAToZDirection().getMaxTribSlot().getValue())); otnServicePathInputBuilder.setOpucnTribSlots(opucnTribSlotDefList); } return otnServicePathInputBuilder.build(); @@ -268,6 +303,23 @@ public final class ModelMappingUtils { return new ServicePathInputBuilder().setServiceName(serviceName).build(); } + public static Set getLinksFromServicePathDescription(PathDescription pathDescription) { + Set linkidList = new HashSet<>(); + pathDescription.getAToZDirection().getAToZ().values().stream() + .filter(lk -> "Link".equals(lk.getResource().getResource().implementedInterface().getSimpleName())) + .forEach(rsc -> { + Link link = (Link) rsc.getResource().getResource(); + linkidList.add(link.getLinkId()); + }); + pathDescription.getZToADirection().getZToA().values().stream() + .filter(lk -> "Link".equals(lk.getResource().getResource().implementedInterface().getSimpleName())) + .forEach(rsc -> { + Link link = (Link) rsc.getResource().getResource(); + linkidList.add(link.getLinkId()); + }); + return linkidList; + } + private static NodeLists getNodesListZtoA(Iterator iterator) { Map treeMap = new TreeMap<>(); List olmList = new ArrayList<>(); @@ -394,32 +446,127 @@ public final class ModelMappingUtils { } } + private static AEndApiInfo createAendApiInfo(PathDescription pathDescription, boolean isForOtn) { + String anodeId = null; + String sapi = null; + String dapi = null; + if (isForOtn) { + anodeId = extractAendFromPathDescriptionForOtn(pathDescription).get("nodeId"); + sapi = PortMappingUtils.fnv1size64( + String.join("-", anodeId, extractAendFromPathDescriptionForOtn(pathDescription).get("tpid"))); + dapi = PortMappingUtils.fnv1size64( + String.join("-", extractZendFromPathDescriptionForOtn(pathDescription).get("nodeId"), + extractZendFromPathDescriptionForOtn(pathDescription).get("tpid"))); + } else { + anodeId = extractAendFromPathDescriptionForOptical(pathDescription).get("nodeId"); + sapi = PortMappingUtils.fnv1size64( + String.join("-", anodeId, extractAendFromPathDescriptionForOptical(pathDescription).get("tpid"))); + dapi = PortMappingUtils.fnv1size64( + String.join("-", extractZendFromPathDescriptionForOptical(pathDescription).get("nodeId"), + extractZendFromPathDescriptionForOptical(pathDescription).get("tpid"))); + } + return new AEndApiInfoBuilder() + .setSapi(sapi) + .setExpectedDapi(sapi) + .setDapi(dapi) + .setExpectedSapi(dapi) + .setNodeId(anodeId) + .build(); + } - @edu.umd.cs.findbugs.annotations.SuppressFBWarnings( - value = "PZLA_PREFER_ZERO_LENGTH_ARRAYS", - justification = "not relevant to return a zero length array" - + " as we need real pos") - public static int[] findTheLongestSubstring(String s1, String s2) { - if ((s1 == null) || (s2 == null)) { - return null; + private static ZEndApiInfo createZendApiInfo(PathDescription pathDescription, boolean isForOtn) { + String znodeId = null; + String sapi = null; + String dapi = null; + if (isForOtn) { + znodeId = extractZendFromPathDescriptionForOtn(pathDescription).get("nodeId"); + sapi = PortMappingUtils.fnv1size64( + String.join("-", znodeId, extractZendFromPathDescriptionForOtn(pathDescription).get("tpid"))); + dapi = PortMappingUtils.fnv1size64( + String.join("-", extractAendFromPathDescriptionForOtn(pathDescription).get("nodeId"), + extractAendFromPathDescriptionForOtn(pathDescription).get("tpid"))); + } else { + znodeId = extractZendFromPathDescriptionForOptical(pathDescription).get("nodeId"); + sapi = PortMappingUtils.fnv1size64( + String.join("-", znodeId, extractZendFromPathDescriptionForOptical(pathDescription).get("tpid"))); + dapi = PortMappingUtils.fnv1size64( + String.join("-", extractAendFromPathDescriptionForOptical(pathDescription).get("nodeId"), + extractAendFromPathDescriptionForOptical(pathDescription).get("tpid"))); } - int[][] dp = new int[s1.length() + 1][s2.length() + 1]; - int maxLen = 0; - int endPos = 0; - for (int i = 1; i < dp.length; i++) { - for (int j = 1; j < dp[0].length; j++) { - char ch1 = s1.charAt(i - 1); - char ch2 = s2.charAt(j - 1); - if (ch1 == ch2) { - dp[i][j] = dp[i - 1][j - 1] + 1; - if (dp[i][j] >= maxLen) { - maxLen = dp[i][j]; - endPos = i; - } - } + return new ZEndApiInfoBuilder() + .setSapi(sapi) + .setExpectedDapi(sapi) + .setDapi(dapi) + .setExpectedSapi(dapi) + .setNodeId(znodeId) + .build(); + } + + private static Map extractAendFromPathDescriptionForOtn(PathDescription pathDescription) { + List tpList = pathDescription.getAToZDirection().getAToZ().values().stream() + .sorted((az1, az2) -> Integer.compare(Integer.parseInt(az1.getId()), Integer.parseInt(az2.getId()))) + .filter(az -> TERMINATION_POINT.equals(az.getResource().getResource().implementedInterface() + .getSimpleName())) + .collect(Collectors.toList()); + for (AToZ atoZ : tpList) { + TerminationPoint tp = (TerminationPoint) atoZ.getResource().getResource(); + if (!tp.getTpId().isEmpty() && !tp.getTpNodeId().isEmpty()) { + String nodeId = tp.getTpNodeId(); + String lcp = tp.getTpId(); + return Map.of("nodeId", nodeId, "tpid", lcp); + } + } + return Map.of(); + } + + private static Map extractZendFromPathDescriptionForOtn(PathDescription pathDescription) { + List tpList = pathDescription.getZToADirection().getZToA().values().stream() + .sorted((az1, az2) -> Integer.compare(Integer.parseInt(az1.getId()), Integer.parseInt(az2.getId()))) + .filter(az -> TERMINATION_POINT.equals(az.getResource().getResource().implementedInterface() + .getSimpleName())) + .collect(Collectors.toList()); + for (ZToA ztoA : tpList) { + TerminationPoint tp = (TerminationPoint) ztoA.getResource().getResource(); + if (!tp.getTpId().isEmpty() && !tp.getTpNodeId().isEmpty()) { + String nodeId = tp.getTpNodeId(); + String lcp = tp.getTpId(); + return Map.of("nodeId", nodeId, "tpid", lcp); + } + } + return Map.of(); + } + + private static Map extractAendFromPathDescriptionForOptical(PathDescription pathDescription) { + List tpList = pathDescription.getAToZDirection().getAToZ().values().stream() + .sorted((az1, az2) -> Integer.compare(Integer.parseInt(az1.getId()), Integer.parseInt(az2.getId()))) + .filter(az -> TERMINATION_POINT.equals(az.getResource().getResource().implementedInterface() + .getSimpleName())) + .collect(Collectors.toList()); + for (AToZ atoZ : tpList) { + TerminationPoint tp = (TerminationPoint) atoZ.getResource().getResource(); + if (!tp.getTpId().contains("CLIENT") && !tp.getTpId().isEmpty() && !tp.getTpNodeId().isEmpty()) { +// String nodeId = tp.getTpNodeId(); +// String lcp = tp.getTpId(); + return Map.of("nodeId", tp.getTpNodeId(), "tpid", tp.getTpId()); } } - return new int[] { endPos - maxLen, endPos }; + return Map.of(); } + private static Map extractZendFromPathDescriptionForOptical(PathDescription pathDescription) { + List tpList = pathDescription.getZToADirection().getZToA().values().stream() + .sorted((az1, az2) -> Integer.compare(Integer.parseInt(az1.getId()), Integer.parseInt(az2.getId()))) + .filter(az -> TERMINATION_POINT.equals(az.getResource().getResource().implementedInterface() + .getSimpleName())) + .collect(Collectors.toList()); + for (ZToA ztoA : tpList) { + TerminationPoint tp = (TerminationPoint) ztoA.getResource().getResource(); + if (!tp.getTpId().contains("CLIENT") && !tp.getTpId().isEmpty() && !tp.getTpNodeId().isEmpty()) { +// String nodeId = tp.getTpNodeId(); +// String lcp = tp.getTpId(); + return Map.of("nodeId", tp.getTpNodeId(), "tpid", tp.getTpId()); + } + } + return Map.of(); + } }