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) --- .../onap/vid/aai/model/PortDetailsTranslator.java | 138 +++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 vid-app-common/src/main/java/org/onap/vid/aai/model/PortDetailsTranslator.java (limited to 'vid-app-common/src/main/java/org/onap/vid/aai/model/PortDetailsTranslator.java') diff --git a/vid-app-common/src/main/java/org/onap/vid/aai/model/PortDetailsTranslator.java b/vid-app-common/src/main/java/org/onap/vid/aai/model/PortDetailsTranslator.java new file mode 100644 index 000000000..f8980457a --- /dev/null +++ b/vid-app-common/src/main/java/org/onap/vid/aai/model/PortDetailsTranslator.java @@ -0,0 +1,138 @@ +package org.onap.vid.aai.model; + + +import com.google.common.collect.ImmutableList; +import org.onap.vid.aai.AaiResponse; +import org.onap.vid.properties.Features; +import org.togglz.core.manager.FeatureManager; + +import javax.inject.Inject; +import java.util.LinkedList; +import java.util.List; +import java.util.Optional; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +public class PortDetailsTranslator { + + @Inject + FeatureManager featureManager; + + public static class PortDetailsOk extends PortDetails { + + private final String interfaceId; + private final String interfaceName; + private final boolean isPortMirrored; + + public PortDetailsOk(String interfaceId, String interfaceName, boolean isPortMirrored) { + this.interfaceId = interfaceId; + this.interfaceName = interfaceName; + this.isPortMirrored = isPortMirrored; + } + + public String getInterfaceId() { + return interfaceId; + } + + public String getInterfaceName() { + return interfaceName; + } + + public boolean getIsPortMirrored() { + return isPortMirrored; + } + } + + public abstract static class PortDetails { + } + + public static class PortDetailsError extends PortDetails { + private final String errorDescription; + private final String rawAaiResponse; + + public PortDetailsError(String errorDescription, String rawAaiResponse){ + this.errorDescription = errorDescription; + this.rawAaiResponse = rawAaiResponse; + } + + public String getErrorDescription() { + return errorDescription; + } + + public String getRawAaiResponse() { + return rawAaiResponse; + } + } + + public static PortDetails extractPortDetailsFromProperties(Properties properties, String rawPayload){ + List errorDescriptions = new LinkedList<>(); + describeIfNullOrEmpty("interface-id", properties.getInterfaceId(), errorDescriptions); + describeIfNullOrEmpty("interface-name", properties.getInterfaceName(), errorDescriptions); + describeIfNullOrEmpty("is-port-mirrored", properties.getIsPortMirrored(), errorDescriptions); + + if(errorDescriptions.isEmpty()){ + return new PortDetailsOk(properties.getInterfaceId(), properties.getInterfaceName(), properties.getIsPortMirrored()); + } else { + return new PortDetailsError(String.join(" ", errorDescriptions), rawPayload); + } + } + + private static void describeIfNullOrEmpty(String name, Object value, List errorDescriptions) { + if (value == null) { + errorDescriptions.add("Value of '" + name + "' is missing."); + } else if (value.toString().isEmpty()) { + errorDescriptions.add("Value of '" + name + "' is empty."); + } + } + + private static Optional> extractErrorResponseIfHttpError(AaiResponse aaiResponse, String rawPayload) { + if (aaiResponse.getHttpCode() != org.springframework.http.HttpStatus.OK.value()) { + final String errorMessage = aaiResponse.getErrorMessage(); + return Optional.of(ImmutableList.of(new PortDetailsError( + "Got " + aaiResponse.getHttpCode() + " from aai", + errorMessage != null ? errorMessage.toString() : rawPayload) + )); + } else { + return Optional.empty(); + } + } + + public List extractPortDetailsInternal(AaiGetPortMirroringSourcePorts aaiGetPortsResponse, String rawPayload){ + List filteredResult = getFilteredPortList(aaiGetPortsResponse.getResults()); + + return filteredResult.stream() + .map(SimpleResult::getProperties) + .map(p -> extractPortDetailsFromProperties(p, rawPayload)) + .collect(Collectors.toList()); + } + + public List getFilteredPortList(List results) { + String LINTERFACE = "l-interface"; + + final Predicate ifIsPort = (SimpleResult r) -> LINTERFACE.equals(r.getNodeType()); + Predicate ifIsSource = getIsSourcePredicate(); + + return results.stream() + .filter(ifIsPort) + .filter(ifIsSource) + .collect(Collectors.toList()); + } + + private Predicate getIsSourcePredicate() { + boolean FLAG_ADVANCED_PORTS_FILTER = featureManager.isActive(Features.FLAG_ADVANCED_PORTS_FILTER); + + if (FLAG_ADVANCED_PORTS_FILTER) { + String PORT_LABEL = "org.onap.relationships.inventory.Source"; + return (SimpleResult r) -> r.getRelatedTo().stream() + .anyMatch(relatedTo -> PORT_LABEL.equalsIgnoreCase(relatedTo.getRelationshipLabel())); + } else { + return (SimpleResult r) -> true; + } + } + + public List extractPortDetails(AaiResponse aaiGetPortsResponse, String rawPayload){ + return extractErrorResponseIfHttpError(aaiGetPortsResponse, rawPayload).orElseGet(() -> extractPortDetailsInternal(aaiGetPortsResponse.getT(), rawPayload)); + + } + +} -- cgit 1.2.3-korg