aboutsummaryrefslogtreecommitdiffstats
path: root/vid-app-common/src/main/java/org/onap/vid/aai/model/PortDetailsTranslator.java
diff options
context:
space:
mode:
authorSonsino, Ofir (os0695) <os0695@intl.att.com>2018-07-10 14:20:54 +0300
committerSonsino, Ofir (os0695) <os0695@intl.att.com>2018-07-10 14:20:54 +0300
commitc72d565bb58226b20625b2bce5f0019046bee649 (patch)
tree8658e49595705b02e47ddc14afa20d6bb7123547 /vid-app-common/src/main/java/org/onap/vid/aai/model/PortDetailsTranslator.java
parentef8a6b47847012fd59ea20da21d8d3d7c4a301ed (diff)
Merge 1806 code of vid-common
Change-Id: I75d52abed4a24dfe3827d79edc4a2938726aa87a Issue-ID: VID-208 Signed-off-by: Sonsino, Ofir (os0695) <os0695@intl.att.com>
Diffstat (limited to 'vid-app-common/src/main/java/org/onap/vid/aai/model/PortDetailsTranslator.java')
-rw-r--r--vid-app-common/src/main/java/org/onap/vid/aai/model/PortDetailsTranslator.java138
1 files changed, 138 insertions, 0 deletions
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<String> 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<String> 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<List<PortDetails>> 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<PortDetails> extractPortDetailsInternal(AaiGetPortMirroringSourcePorts aaiGetPortsResponse, String rawPayload){
+ List<SimpleResult> filteredResult = getFilteredPortList(aaiGetPortsResponse.getResults());
+
+ return filteredResult.stream()
+ .map(SimpleResult::getProperties)
+ .map(p -> extractPortDetailsFromProperties(p, rawPayload))
+ .collect(Collectors.toList());
+ }
+
+ public List<SimpleResult> getFilteredPortList(List<SimpleResult> results) {
+ String LINTERFACE = "l-interface";
+
+ final Predicate<SimpleResult> ifIsPort = (SimpleResult r) -> LINTERFACE.equals(r.getNodeType());
+ Predicate<SimpleResult> ifIsSource = getIsSourcePredicate();
+
+ return results.stream()
+ .filter(ifIsPort)
+ .filter(ifIsSource)
+ .collect(Collectors.toList());
+ }
+
+ private Predicate<SimpleResult> 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<PortDetails> extractPortDetails(AaiResponse<AaiGetPortMirroringSourcePorts> aaiGetPortsResponse, String rawPayload){
+ return extractErrorResponseIfHttpError(aaiGetPortsResponse, rawPayload).orElseGet(() -> extractPortDetailsInternal(aaiGetPortsResponse.getT(), rawPayload));
+
+ }
+
+}