Changes to config bundle for vnf level enhancement
[appc.git] / appc-config / appc-flow-controller / provider / src / main / java / org / onap / appc / flow / controller / node / CapabilitiesDataExtractor.java
index b740e4f..a98d326 100644 (file)
@@ -3,6 +3,7 @@
  * ONAP : APPC
  * ================================================================================
  * Copyright (C) 2018 Nokia. All rights reserved.
+ * Copyright (C) 2019 AT&T intellectual property. All rights reserved.
  * =============================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -32,7 +33,13 @@ import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.apache.commons.lang3.StringUtils;
 import org.onap.appc.flow.controller.dbervices.FlowControlDBService;
 import org.onap.appc.flow.controller.interfaceData.Capabilities;
 import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
@@ -40,56 +47,80 @@ import org.onap.ccsdk.sli.core.sli.SvcLogicException;
 
 public class CapabilitiesDataExtractor {
 
-  private static final EELFLogger log = EELFManager.getInstance().getLogger(CapabilitiesDataExtractor.class);
+    private static final EELFLogger log = EELFManager.getInstance().getLogger(CapabilitiesDataExtractor.class);
 
-  private final FlowControlDBService dbService;
-  private final ObjectMapper mapper;
+    private final FlowControlDBService dbService;
+    private final ObjectMapper mapper;
 
-  public CapabilitiesDataExtractor() {
-    this(FlowControlDBService.initialise());
-  }
+    public CapabilitiesDataExtractor() {
+        this(FlowControlDBService.initialise());
+    }
 
-  /**
-   * Ctor for tests, prefer to use default one
-   */
-  public CapabilitiesDataExtractor(FlowControlDBService dbService) {
-    this.dbService = dbService;
+    /**
+     * Ctor for tests, prefer to use default one
+     */
+    public CapabilitiesDataExtractor(FlowControlDBService dbService) {
+        this.dbService = dbService;
 
-    mapper = new ObjectMapper();
-    mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-    mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
-  }
+        mapper = new ObjectMapper();
+        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+        mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
+    }
 
-  Capabilities getCapabilitiesData(SvcLogicContext ctx) throws SvcLogicException, IOException {
+    Capabilities getCapabilitiesData(SvcLogicContext ctx) throws SvcLogicException, IOException {
 
-    String fn = "FlowExecutorNode.getCapabilitiesData";
-    String capabilitiesData = dbService.getCapabilitiesData(ctx);
-    log.info(fn + "capabilitiesDataInput:" + capabilitiesData);
+        String fn = "FlowExecutorNode.getCapabilitiesData";
+        String capabilitiesData = dbService.getCapabilitiesData(ctx);
+        log.info(fn + ":capabilitiesDataInput:" + capabilitiesData);
 
-    Capabilities capabilities = new Capabilities();
-    if (capabilitiesData == null) {
-      return capabilities;
-    }
+        Capabilities capabilities = new Capabilities();
+        if (StringUtils.isBlank(capabilitiesData)) {
+            return capabilities;
+        }
 
-    JsonNode capabilitiesNode = mapper.readTree(capabilitiesData);
-    log.info("capabilitiesNode:" + capabilitiesNode.toString());
+        JsonNode capabilitiesNode = mapper.readTree(capabilitiesData);
+        JsonNode capNode = capabilitiesNode.get("capabilities");
+        log.info("capabilitiesNode:" + capabilitiesNode.toString());
 
-    capabilities.getVfModule().addAll(extractParameterList(capabilitiesNode, VF_MODULE));
-    capabilities.getVnfc().addAll(extractParameterList(capabilitiesNode, VNFC));
-    capabilities.getVnf().addAll(extractParameterList(capabilitiesNode, VNF));
-    capabilities.getVm().addAll(extractParameterList(capabilitiesNode, VM));
+        capabilities.getVfModule().addAll(extractParameterList(capNode, VF_MODULE));
+        capabilities.getVnfc().addAll(extractParameterList(capNode, VNFC));
+        capabilities.getVnf().addAll(extractParameterList(capNode, VNF));
+        capabilities.getVm().putAll(extractParameterMap(capNode, VM));
 
-    log.info("Capabilities Output:" + capabilities.toString());
+        log.info("Capabilities Output:" + capabilities.toString());
 
-    return capabilities;
-  }
+        return capabilities;
+    }
 
-  private <T> List<T> extractParameterList(JsonNode root, String parameter) throws IOException {
-    JsonNode parameterNode = root.get(parameter);
-    if (parameterNode == null) {
-      return new ArrayList<>();
+    private List<String> extractParameterList(JsonNode root, String parameter) throws IOException {
+        JsonNode parameterNode = root.get(parameter);
+        if (parameterNode == null) {
+            return new ArrayList<>();
+        }
+        return mapper.readValue(parameterNode.toString(), new TypeReference<List<String>>() {
+        });
     }
-    return mapper.readValue(parameterNode.toString(), new TypeReference<List<T>>() {});
-  }
 
-}
\ No newline at end of file
+    private HashMap<String, List<String>> extractParameterMap(JsonNode root, String parameter) throws IOException {
+        JsonNode parameterNode = root.get(parameter);
+        HashMap<String, List<String>> hm = new HashMap<>();
+        if (parameterNode == null || !parameterNode.isArray()) {
+            return hm;
+        }
+        for (JsonNode n : parameterNode) {
+            Iterator<Map.Entry<String, JsonNode>> fldIter = n.fields();
+            while (fldIter.hasNext()) {
+                Map.Entry<String, JsonNode> currentEntry = fldIter.next();
+                if (currentEntry.getValue().isArray()) {
+                    Iterator<JsonNode> nodeIter = currentEntry.getValue().elements();
+                    List<String> listOfT = new ArrayList<>();
+                    while (nodeIter.hasNext()) {
+                        listOfT.add((nodeIter.next().asText()));
+                    }
+                    hm.put(currentEntry.getKey(), listOfT);
+                }
+            }
+        }
+        return hm;
+    }
+}