[SDC] Onboarding 1710 rebase.
[sdc.git] / openecomp-be / lib / openecomp-sdc-translator-lib / openecomp-sdc-translator-core / src / main / java / org / openecomp / sdc / translator / services / heattotosca / UnifiedCompositionManager.java
index 2e67983..a7ba9b5 100644 (file)
@@ -4,15 +4,16 @@ import org.openecomp.sdc.logging.context.impl.MdcDataDebugMessage;
 import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
 import org.openecomp.sdc.tosca.datatypes.model.NodeTemplate;
 import org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate;
+import org.openecomp.sdc.tosca.services.DataModelUtil;
 import org.openecomp.sdc.tosca.services.ToscaAnalyzerService;
+import org.openecomp.sdc.tosca.services.ToscaUtil;
 import org.openecomp.sdc.tosca.services.impl.ToscaAnalyzerServiceImpl;
 import org.openecomp.sdc.translator.datatypes.heattotosca.TranslationContext;
 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.FileNestedConsolidationData;
 
-import java.util.HashSet;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Optional;
-import java.util.Set;
 
 public class UnifiedCompositionManager {
 
@@ -43,38 +44,80 @@ public class UnifiedCompositionManager {
     Map<String, ServiceTemplate> serviceTemplates = toscaServiceModel.getServiceTemplates();
     ServiceTemplate mainServiceTemplate =
         serviceTemplates.get(toscaServiceModel.getEntryDefinitionServiceTemplate());
-    consolidationService.mainServiceTemplateConsolidation(mainServiceTemplate, translationContext);
-    ToscaAnalyzerService toscaAnalyzerService = new ToscaAnalyzerServiceImpl();
+    createUnifiedComposition(toscaServiceModel, mainServiceTemplate, translationContext);
+    ToscaServiceModel unifiedToscaServiceModel =
+        HeatToToscaUtil.createToscaServiceModel(mainServiceTemplate, translationContext);
+
+    mdcDataDebugMessage.debugExitMessage(null, null);
+    return unifiedToscaServiceModel;
+  }
+
+  private void createUnifiedComposition(ToscaServiceModel toscaServiceModel,
+                                        ServiceTemplate serviceTemplate,
+                                        TranslationContext translationContext) {
+    mdcDataDebugMessage.debugEntryMessage(null, null);
+
+    handleNestedServiceTemplates(toscaServiceModel, serviceTemplate, translationContext);
+    consolidationService.serviceTemplateConsolidation(serviceTemplate, translationContext);
+    unifiedCompositionService
+        .updateUnifiedAbstractNodesConnectivity(serviceTemplate, translationContext);
+    translationContext.addUnifiedHandledServiceTeamplte(serviceTemplate);
+
+    mdcDataDebugMessage.debugExitMessage(null, null);
+  }
 
+  private void handleNestedServiceTemplates(ToscaServiceModel toscaServiceModel,
+                                            ServiceTemplate serviceTemplate,
+                                            TranslationContext translationContext) {
+    mdcDataDebugMessage.debugEntryMessage(null, null);
 
-    FileNestedConsolidationData mainFileNestedConsolidationData =
+    String serviceTemplateFileName = ToscaUtil.getServiceTemplateFileName(serviceTemplate);
+    FileNestedConsolidationData fileNestedConsolidationData =
         translationContext.getConsolidationData().getNestedConsolidationData()
-            .getFileNestedConsolidationData(toscaServiceModel.getEntryDefinitionServiceTemplate());
-    Set<String> substituteNodeTemplatesId =
-        mainFileNestedConsolidationData == null
-            || mainFileNestedConsolidationData.getAllNestedNodeTemplateIds() == null
-            ? new HashSet<>() : mainFileNestedConsolidationData.getAllNestedNodeTemplateIds();
-
-    for (String substituteNodeTemplateId : substituteNodeTemplatesId) {
-      NodeTemplate subNodeTemplate = mainServiceTemplate.getTopology_template().getNode_templates()
-          .get(substituteNodeTemplateId);
-      Optional<String> substituteServiceTemplateName = toscaAnalyzerService
-          .getSubstituteServiceTemplateName(substituteNodeTemplateId, subNodeTemplate);
-      if (substituteServiceTemplateName.isPresent()) {
-        ServiceTemplate substituteServiceTemplate =
-            serviceTemplates.get(substituteServiceTemplateName.get());
-
-        consolidationService.substitutionServiceTemplateConsolidation(substituteNodeTemplateId,
-                mainServiceTemplate, substituteServiceTemplate, translationContext);
+            .getFileNestedConsolidationData(serviceTemplateFileName);
+
+    if (Objects.nonNull(fileNestedConsolidationData)) {
+      ToscaAnalyzerService toscaAnalyzerService = new ToscaAnalyzerServiceImpl();
+      for (String substitutedNodeTemplateId : fileNestedConsolidationData
+          .getAllNestedNodeTemplateIds()) {
+        if (translationContext
+            .isNestedNodeWasHandled(serviceTemplateFileName, substitutedNodeTemplateId)) {
+          continue;
+        }
+        NodeTemplate nestedNodeTemplate =
+            DataModelUtil.getNodeTemplate(serviceTemplate, substitutedNodeTemplateId);
+        Optional<String> substituteServiceTemplateName =
+            toscaAnalyzerService.getSubstituteServiceTemplateName(substitutedNodeTemplateId,
+                nestedNodeTemplate);
+        if (substituteServiceTemplateName.isPresent()) {
+          ServiceTemplate substitutionServiceTemplate =
+              toscaServiceModel.getServiceTemplates().get(substituteServiceTemplateName.get());
+          createUnifiedCompositionForNestedServiceTemplate(toscaServiceModel, serviceTemplate,
+              substitutionServiceTemplate, substitutedNodeTemplateId, translationContext);
+        }
+        translationContext.addNestedNodeAsHandled(serviceTemplateFileName,
+            substitutedNodeTemplateId);
       }
     }
-    unifiedCompositionService
-        .updateUnifiedAbstractNodesConnectivity(mainServiceTemplate, translationContext);
-    ToscaServiceModel unifiedToscaServiceModel =
-        HeatToToscaUtil.createToscaServiceModel(mainServiceTemplate, translationContext);
 
     mdcDataDebugMessage.debugExitMessage(null, null);
-    return unifiedToscaServiceModel;
+  }
+
+  private void createUnifiedCompositionForNestedServiceTemplate(
+      ToscaServiceModel toscaServiceModel,
+      ServiceTemplate serviceTemplate,
+      ServiceTemplate substitutionServiceTemplate,
+      String substitutedNodeTemplateId,
+      TranslationContext translationContext) {
+    mdcDataDebugMessage.debugEntryMessage(null, null);
+    handleNestedServiceTemplates(toscaServiceModel, substitutionServiceTemplate,
+        translationContext);
+    consolidationService.substitutionServiceTemplateConsolidation(substitutedNodeTemplateId,
+        serviceTemplate, substitutionServiceTemplate, translationContext);
+    unifiedCompositionService
+        .updateUnifiedAbstractNodesConnectivity(substitutionServiceTemplate, translationContext);
+    translationContext.addUnifiedHandledServiceTeamplte(substitutionServiceTemplate);
+    mdcDataDebugMessage.debugExitMessage(null, null);
   }
 }