import tosca bug
[sdc.git] / openecomp-be / lib / openecomp-tosca-converter-lib / openecomp-tosca-converter-core / src / main / java / org / openecomp / core / impl / ToscaConverterImpl.java
index 55f92aa..c321e59 100644 (file)
@@ -36,7 +36,7 @@ public class ToscaConverterImpl implements ToscaConverter {
 
     @Override
     public ToscaServiceModel convert(FileContentHandler fileContentHandler)
-            throws IOException {
+        throws IOException {
         Map<String, byte[]> csarFiles = new HashMap<>(fileContentHandler.getFiles());
         ToscaServiceModel toscaServiceModel = new ToscaServiceModel();
         Map<String, ServiceTemplate> serviceTemplates = new HashMap<>();
@@ -89,9 +89,9 @@ public class ToscaConverterImpl implements ToscaConverter {
             }
         } catch (YAMLException ye) {
             throw new CoreException(new ErrorCode.ErrorCodeBuilder()
-                    .withMessage("Invalid YAML content in file " + key + ". reason - "
-                            + ye.getMessage())
-                    .withCategory(ErrorCategory.APPLICATION).build());
+                .withMessage("Invalid YAML content in file " + key + ". reason - "
+                    + ye.getMessage())
+                .withCategory(ErrorCategory.APPLICATION).build());
         }
     }
 
@@ -112,7 +112,7 @@ public class ToscaConverterImpl implements ToscaConverter {
                                          GlobalSubstitutionServiceTemplate globalSubstitutionServiceTemplate,
                                          Map<String, byte[]> csarFiles) {
         Collection<ServiceTemplate> globalServiceTemplates =
-                GlobalTypesGenerator.getGlobalTypesServiceTemplate().values();
+            GlobalTypesGenerator.getGlobalTypesServiceTemplate().values();
         addGlobalServiceTemplates(globalServiceTemplates, serviceTemplates);
         toscaServiceModel.setEntryDefinitionServiceTemplate(mainStName);
         toscaServiceModel.setServiceTemplates(serviceTemplates);
@@ -137,10 +137,10 @@ public class ToscaConverterImpl implements ToscaConverter {
                                        String fileName, Map<String, byte[]> csarFiles,
                                        Map<String, ServiceTemplate> serviceTemplates) {
         Optional<ServiceTemplate> serviceTemplate =
-                getServiceTemplateFromCsar(fileName, csarFiles);
+            getServiceTemplateFromCsar(fileName, csarFiles);
         serviceTemplate.ifPresent(
-                serviceTemplate1 -> addServiceTemplate(serviceTemplateName, serviceTemplate1,
-                        serviceTemplates));
+            serviceTemplateValue -> addServiceTemplate(serviceTemplateName, serviceTemplateValue,
+                serviceTemplates));
     }
 
     private void addServiceTemplate(String serviceTemplateName,
@@ -172,7 +172,7 @@ public class ToscaConverterImpl implements ToscaConverter {
         ServiceTemplate serviceTemplate = new ServiceTemplate();
         try {
             ServiceTemplateReaderService readerService =
-                    new ServiceTemplateReaderServiceImpl(fileContent);
+                new ServiceTemplateReaderServiceImpl(fileContent);
             convertMetadata(serviceTemplateName, serviceTemplate, readerService);
             convertToscaVersion(serviceTemplate, readerService);
             convertImports(serviceTemplate);
@@ -181,9 +181,9 @@ public class ToscaConverterImpl implements ToscaConverter {
 
         } catch (YAMLException ye) {
             throw new CoreException(new ErrorCode.ErrorCodeBuilder()
-                    .withMessage("Invalid YAML content in file" + serviceTemplateName + ". reason - "
-                            + ye.getMessage())
-                    .withCategory(ErrorCategory.APPLICATION).build());
+                .withMessage("Invalid YAML content in file" + serviceTemplateName + ". reason - "
+                    + ye.getMessage())
+                .withCategory(ErrorCategory.APPLICATION).build());
         }
 
 
@@ -199,7 +199,7 @@ public class ToscaConverterImpl implements ToscaConverter {
     private void convertImports(ServiceTemplate serviceTemplate) {
         serviceTemplate.setImports(new ArrayList<>());
         serviceTemplate.getImports()
-                .add(createImportMap(openecompHeatIndex, "openecomp-heat/_index.yml"));
+            .add(createImportMap(openecompHeatIndex, "openecomp-heat/_index.yml"));
         serviceTemplate.getImports().add(createImportMap(globalSubstitution, globalStName));
 
     }
@@ -222,7 +222,7 @@ public class ToscaConverterImpl implements ToscaConverter {
         if (MapUtils.isNotEmpty(metadataToConvert)) {
             for (Map.Entry<String, Object> metadataEntry : metadataToConvert.entrySet()) {
                 if (Objects.isNull(metadataEntry.getValue()) ||
-                        !(metadataEntry.getValue() instanceof String)) {
+                    !(metadataEntry.getValue() instanceof String)) {
                     continue;
                 }
                 finalMetadata.put(metadataEntry.getKey(), (String) metadataEntry.getValue());
@@ -240,10 +240,12 @@ public class ToscaConverterImpl implements ToscaConverter {
         }
 
         for (Map.Entry<String, Object> nodeTypeEntry : nodeTypes.entrySet()) {
-            DataModelUtil
-                    .addNodeType(serviceTemplate, nodeTypeEntry.getKey(),
-                            (NodeType) createObjectFromClass(nodeTypeEntry.getKey(), nodeTypeEntry.getValue(),
-                                    NodeType.class));
+            Optional<NodeType> nodeType = ToscaConverterUtil
+                .createObjectFromClass(nodeTypeEntry.getKey(), nodeTypeEntry.getValue(),
+                    NodeType.class);
+
+            nodeType.ifPresent(nodeTypeValue -> DataModelUtil
+                .addNodeType(serviceTemplate, nodeTypeEntry.getKey(), nodeTypeValue));
         }
     }
 
@@ -276,11 +278,28 @@ public class ToscaConverterImpl implements ToscaConverter {
         }
 
         for (Map.Entry<String, Object> entry : mapToConvert.entrySet()) {
-            ParameterDefinition parameterDefinition =
-                    (ParameterDefinition) createObjectFromClass(
-                            entry.getKey(), entry.getValue(), ParameterDefinition.class);
-            addToServiceTemplateAccordingToSection(
-                    serviceTemplate, inputsOrOutputs, entry.getKey(), parameterDefinition);
+            Optional<ParameterDefinition> parameterDefinition =
+                ToscaConverterUtil.createObjectFromClass(
+                    entry.getKey(), entry.getValue(), ParameterDefinition.class);
+
+            parameterDefinition.ifPresent(parameterDefinitionValue -> {
+                handleDefaultValue(entry.getValue(), parameterDefinition.get());
+                addToServiceTemplateAccordingToSection(
+                    serviceTemplate, inputsOrOutputs, entry.getKey(), parameterDefinition.get());
+            } );
+        }
+    }
+
+    private void handleDefaultValue(Object entryValue,
+                                    ParameterDefinition parameterDefinition) {
+        if(!(entryValue instanceof Map)
+            || Objects.isNull(parameterDefinition)){
+            return;
+        }
+
+        Object defaultValue = ((Map) entryValue).get("default");
+        if(Objects.nonNull(defaultValue)) {
+            parameterDefinition.set_default(defaultValue);
         }
     }
 
@@ -291,11 +310,11 @@ public class ToscaConverterImpl implements ToscaConverter {
         switch (inputsOrOutputs) {
             case inputs:
                 DataModelUtil
-                        .addInputParameterToTopologyTemplate(serviceTemplate, parameterId, parameterDefinition);
+                    .addInputParameterToTopologyTemplate(serviceTemplate, parameterId, parameterDefinition);
                 break;
             case outputs:
                 DataModelUtil
-                        .addOutputParameterToTopologyTemplate(serviceTemplate, parameterId, parameterDefinition);
+                    .addOutputParameterToTopologyTemplate(serviceTemplate, parameterId, parameterDefinition);
         }
     }
 
@@ -327,15 +346,15 @@ public class ToscaConverterImpl implements ToscaConverter {
 
         substitutionMapping.setNode_type((String) substitutionMappings.get(nodeType));
         substitutionMapping.setCapabilities(
-                convertSubstitutionMappingsSections((Map<String, Object>) substitutionMappings.get(capabilities)));
+            convertSubstitutionMappingsSections((Map<String, Object>) substitutionMappings.get(capabilities)));
         substitutionMapping.setRequirements(
-                convertSubstitutionMappingsSections((Map<String, Object>) substitutionMappings.get(requirements)));
+            convertSubstitutionMappingsSections((Map<String, Object>) substitutionMappings.get(requirements)));
 
         return substitutionMapping;
     }
 
     private Map<String, List<String>> convertSubstitutionMappingsSections(
-            Map<String, Object> sectionToConvert) {
+        Map<String, Object> sectionToConvert) {
         Map<String, List<String>> convertedSection = new HashMap<>();
         if (MapUtils.isEmpty(sectionToConvert)) {
             return null;
@@ -385,14 +404,14 @@ public class ToscaConverterImpl implements ToscaConverter {
         nodeTemplate.setDescription((String) nodeTemplateAsMap.get("description"));
         nodeTemplate.setDirectives((List<String>) nodeTemplateAsMap.get("directives"));
         nodeTemplate.setInterfaces(
-                (Map<String, InterfaceDefinition>) nodeTemplateAsMap.get("interfaces"));
+            (Map<String, InterfaceDefinition>) nodeTemplateAsMap.get("interfaces"));
         nodeTemplate.setNode_filter((NodeFilter) nodeTemplateAsMap.get("node_filter"));
         nodeTemplate.setProperties((Map<String, Object>) nodeTemplateAsMap.get("properties"));
         nodeTemplate.setRequirements(
-                (List<Map<String, RequirementAssignment>>) nodeTemplateAsMap.get("requirements"));
+            (List<Map<String, RequirementAssignment>>) nodeTemplateAsMap.get("requirements"));
         nodeTemplate.setType((String) nodeTemplateAsMap.get("type"));
         nodeTemplate.setCapabilities(
-                convertCapabilities((Map<String, Object>) nodeTemplateAsMap.get("capabilities")));
+            convertCapabilities((Map<String, Object>) nodeTemplateAsMap.get("capabilities")));
 
         return nodeTemplate;
     }
@@ -404,27 +423,20 @@ public class ToscaConverterImpl implements ToscaConverter {
         }
         for (Map.Entry<String, Object> capabilityAssignmentEntry : capabilities.entrySet()) {
             Map<String, CapabilityAssignment> tempMap = new HashMap<>();
-            tempMap.put(capabilityAssignmentEntry.getKey(),
-                    (CapabilityAssignment) createObjectFromClass
-                            (capabilityAssignmentEntry.getKey(), capabilityAssignmentEntry.getValue(), CapabilityAssignment.class));
-            convertedCapabilities.add(tempMap);
+            Optional<CapabilityAssignment> capabilityAssignment = ToscaConverterUtil.createObjectFromClass
+                (capabilityAssignmentEntry.getKey(), capabilityAssignmentEntry.getValue(),
+                    CapabilityAssignment.class);
+
+            capabilityAssignment.ifPresent(capabilityAssignmentValue -> {
+                tempMap.put(capabilityAssignmentEntry.getKey(), capabilityAssignmentValue);
+                convertedCapabilities.add(tempMap);
+                }
+            );
+
         }
         return convertedCapabilities;
     }
 
-    private Object createObjectFromClass(String nodeTypeId,
-                                         Object objectCandidate,
-                                         Class classToCreate) {
-        try {
-            return JsonUtil.json2Object(objectCandidate.toString(), classToCreate);
-        } catch (Exception e) {
-            //todo - return error to user?
-            throw new CoreException(new ErrorCode.ErrorCodeBuilder()
-                    .withCategory(ErrorCategory.APPLICATION)
-                    .withMessage("Can't create " + classToCreate.getSimpleName() + " from " +
-                        nodeTypeId).build());
-        }
-    }
 
     private boolean isMainServiceTemplate(String fileName) {
         return fileName.endsWith(mainStName);