From c72d565bb58226b20625b2bce5f0019046bee649 Mon Sep 17 00:00:00 2001 From: "Sonsino, Ofir (os0695)" Date: Tue, 10 Jul 2018 14:20:54 +0300 Subject: Merge 1806 code of vid-common Change-Id: I75d52abed4a24dfe3827d79edc4a2938726aa87a Issue-ID: VID-208 Signed-off-by: Sonsino, Ofir (os0695) --- .../org/onap/vid/aai/AaiResponseTranslator.java | 103 +++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 vid-app-common/src/main/java/org/onap/vid/aai/AaiResponseTranslator.java (limited to 'vid-app-common/src/main/java/org/onap/vid/aai/AaiResponseTranslator.java') diff --git a/vid-app-common/src/main/java/org/onap/vid/aai/AaiResponseTranslator.java b/vid-app-common/src/main/java/org/onap/vid/aai/AaiResponseTranslator.java new file mode 100644 index 000000000..6f503799c --- /dev/null +++ b/vid-app-common/src/main/java/org/onap/vid/aai/AaiResponseTranslator.java @@ -0,0 +1,103 @@ +package org.onap.vid.aai; + +import org.apache.commons.lang3.StringUtils; +import org.codehaus.jackson.JsonNode; +import org.springframework.stereotype.Component; + +import java.util.Optional; + +@Component +public class AaiResponseTranslator { + + public PortMirroringConfigData extractPortMirroringConfigData(AaiResponse aaiResponse) { + return extractErrorResponseIfHttpError(aaiResponse).orElseGet(() -> extractPortMirroringConfigData(aaiResponse.getT())); + } + + public PortMirroringConfigData extractPortMirroringConfigData(JsonNode cloudRegionAndSourceFromConfigurationResponse) { + final JsonNode payload = cloudRegionAndSourceFromConfigurationResponse; + if (payload == null) { + return new PortMirroringConfigDataError("Response payload is null", null); + } + + final JsonNode results = payload.path("results"); + if (results.isMissingNode()) { + return new PortMirroringConfigDataError("Root node 'results' is missing", payload.toString()); + } + + for (JsonNode resultNode : results) { + final JsonNode nodeType = resultNode.path("node-type"); + if (nodeType.isTextual() && "cloud-region".equals(nodeType.getTextValue())) { + return getPortMirroringConfigData(payload, resultNode); + } + } + return new PortMirroringConfigDataError("Root node 'results' has no node where 'node-TYPE' is 'cloud-region'", payload.toString()); + } + + private PortMirroringConfigData getPortMirroringConfigData(JsonNode payload, JsonNode resultNode) { + final JsonNode properties = resultNode.path("properties"); + if (properties.isMissingNode()) { + final String message = "The node-type 'cloud-region' does not contain a 'properties' node"; + return new PortMirroringConfigDataError(message, payload.toString()); + } + + final JsonNode cloudRegionIdNode = properties.path("cloud-region-id"); + if (cloudRegionIdNode.isMissingNode()) { + return new PortMirroringConfigDataError("The node-type 'cloud-region' does not contain the property 'cloud-region-id'", payload.toString()); + } + if (!cloudRegionIdNode.isTextual()) { + return new PortMirroringConfigDataError("The node-type 'cloud-region' contains a non-textual value for the property 'cloud-region-id'", payload.toString()); + } + + final String cloudRegionId = cloudRegionIdNode.asText(); + if (StringUtils.isBlank(cloudRegionId)) { + return new PortMirroringConfigDataError("Node 'properties.cloud-region-id' of node-type 'cloud-region' is blank", payload.toString()); + } + + return new PortMirroringConfigDataOk(cloudRegionId); + } + + private Optional extractErrorResponseIfHttpError(AaiResponse aaiResponse) { + if (aaiResponse.getHttpCode() != org.springframework.http.HttpStatus.OK.value()) { + final String errorMessage = aaiResponse.getErrorMessage(); + return Optional.of(new PortMirroringConfigDataError( + "Got " + aaiResponse.getHttpCode() + " from aai", + errorMessage != null ? errorMessage.toString() : null) + ); + } else { + return Optional.empty(); + } + } + + public abstract static class PortMirroringConfigData { + } + + public static class PortMirroringConfigDataOk extends PortMirroringConfigData { + private final String cloudRegionId; + + public PortMirroringConfigDataOk(String cloudRegionId) { + this.cloudRegionId = cloudRegionId; + } + + public String getCloudRegionId() { + return cloudRegionId; + } + } + + public static class PortMirroringConfigDataError extends PortMirroringConfigData { + private final String errorDescription; + private final String rawAaiResponse; + + public PortMirroringConfigDataError(String errorDescription, String rawAaiResponse) { + this.errorDescription = errorDescription; + this.rawAaiResponse = rawAaiResponse; + } + + public String getErrorDescription() { + return errorDescription; + } + + public String getRawAaiResponse() { + return rawAaiResponse; + } + } +} -- cgit 1.2.3-korg