add resource input 17/86617/1
authorzm330 <zhangminyj@chinamobile.com>
Tue, 30 Apr 2019 12:11:22 +0000 (20:11 +0800)
committerzm330 <zhangminyj@chinamobile.com>
Tue, 30 Apr 2019 12:17:31 +0000 (20:17 +0800)
Save format when resource is list type
e.g.
{key2:vf_prop_list,INDEX,key|default}

Change-Id: I1cde294eb790df0be6df13cfae9959310b93f366
Issue-ID: SO-1393
Signed-off-by: zm330 <zhangminyj@chinamobile.com>
adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceVnfs.java
asdc-controller/src/main/java/org/onap/so/asdc/installer/heat/ToscaResourceInstaller.java
asdc-controller/src/test/java/org/onap/so/asdc/installer/heat/ToscaResourceInputTest.java

index e5241a4..a0d822d 100644 (file)
@@ -49,6 +49,7 @@ public class QueryServiceVnfs extends CatalogQuery {
             + "\t\"nfFunction\"                : <NF_FUNCTION>,\n" + "\t\"nfType\"                             : <NF_TYPE>,\n"
             + "\t\"nfRole\"                            : <NF_ROLE>,\n" + "\t\"nfNamingCode\"           : <NF_NAMING_CODE>,\n"
             + "\t\"multiStageDesign\"         : <MULTI_STEP_DESIGN>,\n"
+            + "\t\"vnfcInstGroupOrder\"       : <VNFC_INSTANCE_GROUP_ORDER>,\n"
             + "\t\"resourceInput\"            : <RESOURCE_INPUT>,\n" + "<_VFMODULES_>,\n" + "<_GROUPS_>\n" + "\t}";
 
     public QueryServiceVnfs() {
@@ -118,6 +119,7 @@ public class QueryServiceVnfs extends CatalogQuery {
             put(valueMap, "NF_TYPE", o.getNfType());
             put(valueMap, "NF_ROLE", o.getNfRole());
             put(valueMap, "NF_NAMING_CODE", o.getNfNamingCode());
+            put(valueMap, "VNFC_INSTANCE_GROUP_ORDER", o.getVnfcInstanceGroupOrder());
             put(valueMap, "MULTI_STEP_DESIGN", o.getMultiStageDesign());
             put(valueMap, "RESOURCE_INPUT", o.getResourceInput());
 
index ddf1f3d..5f449c4 100644 (file)
@@ -35,6 +35,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 import org.hibernate.StaleObjectStateException;
 import org.hibernate.exception.ConstraintViolationException;
@@ -48,14 +50,7 @@ import org.onap.sdc.tosca.parser.elements.queries.EntityQuery;
 import org.onap.sdc.tosca.parser.elements.queries.TopologyTemplateQuery;
 import org.onap.sdc.tosca.parser.enums.SdcTypes;
 import org.onap.sdc.tosca.parser.impl.SdcPropertyNames;
-import org.onap.sdc.toscaparser.api.CapabilityAssignment;
-import org.onap.sdc.toscaparser.api.CapabilityAssignments;
-import org.onap.sdc.toscaparser.api.Group;
-import org.onap.sdc.toscaparser.api.NodeTemplate;
-import org.onap.sdc.toscaparser.api.Policy;
-import org.onap.sdc.toscaparser.api.Property;
-import org.onap.sdc.toscaparser.api.RequirementAssignment;
-import org.onap.sdc.toscaparser.api.RequirementAssignments;
+import org.onap.sdc.toscaparser.api.*;
 import org.onap.sdc.toscaparser.api.elements.Metadata;
 import org.onap.sdc.toscaparser.api.functions.GetInput;
 import org.onap.sdc.toscaparser.api.parameters.Input;
@@ -528,27 +523,35 @@ public class ToscaResourceInstaller {
         logger.debug(" resourceSeq for service uuid(" + service.getModelUUID() + ") : " + resourceSeqStr);
     }
 
-    private static String getValue(Object value, List<Input> servInputs) {
-        String output = null;
+
+    // this of temporary solution
+    private static String getValue(Object value, List<Input> inputs) {
+        String outInput;
+        String defaultValue = null;
         if (value instanceof Map) {
-            // currently this logic handles only one level of nesting.
-            return ((LinkedHashMap) value).values().toArray()[0].toString();
+            outInput = ((LinkedHashMap) value).values().toArray()[0].toString();
         } else if (value instanceof GetInput) {
             String inputName = ((GetInput) value).getInputName();
-
-            for (Input input : servInputs) {
-                if (input.getName().equals(inputName)) {
-                    // keep both input name and default value
-                    // if service input does not supplies value the use default value
-                    String defaultValue = input.getDefault() != null ? (String) input.getDefault().toString() : "";
-                    output = inputName + "|" + defaultValue;// return default value
-                }
+            Optional<Input> inputOptional =
+                    inputs.stream().filter(input -> input.getName().equals(inputName)).findFirst();
+            if (inputOptional.isPresent()) {
+                Input input = inputOptional.get();
+                defaultValue = input.getDefault() != null ? input.getDefault().toString() : "";
             }
-
+            String valueStr = value.toString();
+            String regex = "(?<=\\[).*?(?=\\])";
+            Pattern pattern = Pattern.compile(regex);
+            Matcher matcher = pattern.matcher(valueStr);
+            if (matcher.find()) {
+                valueStr = matcher.group();
+            } else {
+                valueStr = inputName;
+            }
+            outInput = valueStr + "|" + defaultValue;
         } else {
-            output = value != null ? value.toString() : "";
+            outInput = value != null ? value.toString() : "";
         }
-        return output; // return property value
+        return outInput;
     }
 
     String getResourceInput(ToscaResourceStructure toscaResourceStructure, String resourceCustomizationUuid)
@@ -1791,13 +1794,16 @@ public class ToscaResourceInstaller {
         vfcInstanceGroupCustom.setFunction(toscaResourceStructure.getSdcCsarHelper()
                 .getNodeTemplatePropertyLeafValue(vnfcNodeTemplate, getInputName));
         vfcInstanceGroupCustom.setInstanceGroup(vfcInstanceGroup);
-        createVFCInstanceGroupMembers(vfcInstanceGroupCustom, group);
+
+        ArrayList<Input> inputs = vnfcNodeTemplate.getSubMappingToscaTemplate().getInputs();
+        createVFCInstanceGroupMembers(vfcInstanceGroupCustom, group, inputs);
 
         return vfcInstanceGroupCustom;
 
     }
 
-    private void createVFCInstanceGroupMembers(VnfcInstanceGroupCustomization vfcInstanceGroupCustom, Group group) {
+    private void createVFCInstanceGroupMembers(VnfcInstanceGroupCustomization vfcInstanceGroupCustom, Group group,
+            List<Input> inputList) {
         List<NodeTemplate> members = group.getMemberNodes();
         if (!CollectionUtils.isEmpty(members)) {
             for (NodeTemplate vfcTemplate : members) {
@@ -1815,13 +1821,33 @@ public class ToscaResourceInstaller {
                 vnfcCustomization.setToscaNodeType(testNull(vfcTemplate.getType()));
                 vnfcCustomization
                         .setDescription(testNull(metadata.getValue(SdcPropertyNames.PROPERTY_NAME_DESCRIPTION)));
-
-                // @After vfcInstanceGroupCustom merged
-                // vfcInstanceGroupCustom.getVnfcCustomizations().add(vnfcCustomization);
+                vnfcCustomization.setResourceInput(getVnfcResourceInput(vfcTemplate, inputList));
+                vfcInstanceGroupCustom.getVnfcCustomizations().add(vnfcCustomization);
             }
         }
     }
 
+    public String getVnfcResourceInput(NodeTemplate vfcTemplate, List<Input> inputList) {
+        Map<String, String> resouceRequest = new HashMap<>();
+        LinkedHashMap<String, Property> vfcTemplateProperties = vfcTemplate.getProperties();
+        for (String key : vfcTemplateProperties.keySet()) {
+            Property property = vfcTemplateProperties.get(key);
+            String resourceValue = getValue(property.getValue(), inputList);
+            resouceRequest.put(key, resourceValue);
+        }
+
+        String jsonStr = null;
+        try {
+            ObjectMapper objectMapper = new ObjectMapper();
+            jsonStr = objectMapper.writeValueAsString(resouceRequest);
+            jsonStr = jsonStr.replace("\"", "\\\"");
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+        }
+
+        return jsonStr;
+    }
+
     protected VfModuleCustomization createVFModuleResource(Group group, NodeTemplate vfTemplate,
             ToscaResourceStructure toscaResourceStructure, VfResourceStructure vfResourceStructure,
             IVfModuleData vfModuleData, VnfResourceCustomization vnfResource, Service service,
index 844adee..f6a369e 100644 (file)
@@ -33,10 +33,7 @@ import org.onap.sdc.toscaparser.api.parameters.Input;
 import org.onap.so.asdc.client.exceptions.ArtifactInstallerException;
 import org.onap.so.asdc.installer.ToscaResourceStructure;
 import org.onap.so.db.catalog.beans.Service;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
+import java.util.*;
 import static org.junit.Assert.assertEquals;
 import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.when;
@@ -60,6 +57,23 @@ public class ToscaResourceInputTest {
     @Mock
     Input input;
 
+    @Test
+    public void getListResourceInput() {
+        ToscaResourceInstaller toscaResourceInstaller = new ToscaResourceInstaller();
+        LinkedHashMap<String, Property> hashMap = new LinkedHashMap<>();
+        hashMap.put("key1", property);
+        when(nodeTemplate.getProperties()).thenReturn(hashMap);
+        when(property.getValue()).thenReturn(getInput);
+        when(getInput.getInputName()).thenReturn("nameKey");
+        when(input.getName()).thenReturn("nameKey");
+        when(input.getDefault()).thenReturn("defaultValue");
+        when(getInput.toString()).thenReturn("getinput:[sites,INDEX,role]");
+        List<Input> inputs = new ArrayList<>();
+        inputs.add(input);
+        String resourceInput = toscaResourceInstaller.getVnfcResourceInput(nodeTemplate, inputs);
+        assertEquals("{\\\"key1\\\":\\\"sites,INDEX,role|defaultValue\\\"}", resourceInput);
+    }
+
     @Test
     public void processResourceSequenceTest() {
         ToscaResourceInstaller toscaResourceInstaller = new ToscaResourceInstaller();