Fix 'Substitution Node not updated during import'-bug
[sdc.git] / catalog-be / src / main / java / org / openecomp / sdc / be / components / csar / ServiceCsarInfo.java
index cd73f70..8352a8d 100644 (file)
@@ -22,6 +22,7 @@
 package org.openecomp.sdc.be.components.csar;
 
 import static org.openecomp.sdc.be.components.impl.ImportUtils.Constants.DEFAULT_ICON;
+import static org.openecomp.sdc.be.components.impl.ImportUtils.findFirstToscaStringElement;
 import static org.openecomp.sdc.be.components.impl.ImportUtils.findToscaElement;
 
 import fj.data.Either;
@@ -170,19 +171,9 @@ public class ServiceCsarInfo extends CsarInfo {
         return getTypes(ToscaTagNamesEnum.CAPABILITY_TYPES);
     }
 
-    private Map<String, Object> getTypes(ToscaTagNamesEnum toscaTag) {
-        final Map<String, Object> types = new HashMap<>();
-        mainTemplateImports.entrySet().forEach(entry -> types.putAll(getTypesFromTemplate(entry.getValue(), toscaTag)));
-        types.putAll(getTypesFromTemplate(getMappedToscaMainTemplate(), toscaTag));
-        return types;
-    }
-
+    @Override
     public Map<String, Object> getArtifactTypes() {
-        final Map<String, Object> artifactsTypes = new HashMap<>();
-        mainTemplateImports.entrySet()
-            .forEach(entry -> artifactsTypes.putAll(getTypesFromTemplate(entry.getValue(), TypeUtils.ToscaTagNamesEnum.ARTIFACT_TYPES)));
-        artifactsTypes.putAll(getTypesFromTemplate(getMappedToscaMainTemplate(), TypeUtils.ToscaTagNamesEnum.ARTIFACT_TYPES));
-        return artifactsTypes;
+        return getTypes(ToscaTagNamesEnum.ARTIFACT_TYPES);
     }
 
     @Override
@@ -190,6 +181,13 @@ public class ServiceCsarInfo extends CsarInfo {
         return getTypes(ToscaTagNamesEnum.INTERFACE_TYPES);
     }
 
+    private Map<String, Object> getTypes(ToscaTagNamesEnum toscaTag) {
+        final Map<String, Object> types = new HashMap<>();
+        mainTemplateImports.entrySet().forEach(entry -> types.putAll(getTypesFromTemplate(entry.getValue(), toscaTag)));
+        types.putAll(getTypesFromTemplate(getMappedToscaMainTemplate(), toscaTag));
+        return types;
+    }
+
     public List<NodeTypeDefinition> getNodeTypesUsed() {
         if (nodeTypeDefinitions == null) {
             nodeTypeDefinitions = new ArrayList<>();
@@ -249,7 +247,6 @@ public class ServiceCsarInfo extends CsarInfo {
         return nodeTypesToReturn;
     }
 
-
     private Map<String, NodeTypeDefinition> getTypes(final Set<String> nodeTypes) {
         final Map<String, NodeTypeDefinition> nodeTypeDefinitionsMap = new HashMap<>();
         final Set<String> lowerPrecedenceImports = new HashSet<>();
@@ -274,7 +271,6 @@ public class ServiceCsarInfo extends CsarInfo {
         return nodeTypeDefinitionsMap;
     }
 
-    
     private void addTypesFromTemplate(final Map<String, NodeTypeDefinition> nodeTypeDefinitionsMap, final Map<String, Object> mappedTemplate,
             final Set<String> nodeTypes) {
         final Map<String, Object> types = getTypesFromTemplate(mappedTemplate, ToscaTagNamesEnum.NODE_TYPES, nodeTypes);
@@ -287,16 +283,18 @@ public class ServiceCsarInfo extends CsarInfo {
     }
 
     @SuppressWarnings("unchecked")
-    private Set<String> getNodeTypesUsedInToscaTemplate(Map<String, Object> mappedToscaTemplate) {
-        final Either<Object, ResultStatusEnum> nodeTemplatesEither = findToscaElement(mappedToscaTemplate,
-            TypeUtils.ToscaTagNamesEnum.NODE_TEMPLATES, ToscaElementTypeEnum.MAP);
-        final Set<String> nodeTypesUsedInNodeTemplates = new HashSet<>();
+    private Set<String> getNodeTypesUsedInToscaTemplate(final Map<String, Object> mappedToscaTemplate) {
+        final var nodeTemplatesEither = findToscaElement(mappedToscaTemplate, TypeUtils.ToscaTagNamesEnum.NODE_TEMPLATES, ToscaElementTypeEnum.MAP);
+        final Set<String> nodeTypesUsedInToscaTemplate = new HashSet<>();
         if (nodeTemplatesEither.isLeft()) {
-            final Map<String, Map<String, Object>> nodeTemplates =
-                (Map<String, Map<String, Object>>) nodeTemplatesEither.left().value();
-            nodeTypesUsedInNodeTemplates.addAll(findNodeTypesUsedInNodeTemplates(nodeTemplates));
+            final var nodeTemplates = (Map<String, Map<String, Object>>) nodeTemplatesEither.left().value();
+            nodeTypesUsedInToscaTemplate.addAll(findNodeTypesUsedInNodeTemplates(nodeTemplates));
         }
-        return nodeTypesUsedInNodeTemplates;
+        final var substitutionMappingsNodeType = findFirstToscaStringElement(mappedToscaTemplate, ToscaTagNamesEnum.NODE_TYPE);
+        if (substitutionMappingsNodeType.isLeft()){
+            nodeTypesUsedInToscaTemplate.add(substitutionMappingsNodeType.left().value());
+        }
+        return nodeTypesUsedInToscaTemplate;
     }
 
     private NodeTypeMetadata getMetaDataFromTemplate(Map<String, Object> mappedResourceTemplate, String nodeTemplateType) {
@@ -325,7 +323,6 @@ public class ServiceCsarInfo extends CsarInfo {
         category.setName((String) metadata.get("category"));
         category.setNormalizedName(((String) metadata.get("category")).toLowerCase());
         category.setIcons(List.of(DEFAULT_ICON));
-        category.setNormalizedName(((String) metadata.get("category")).toLowerCase());
         category.addSubCategory(subCategory);
         List<CategoryDefinition> categories = new ArrayList<>();
         categories.add(category);