[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
1 package org.openecomp.sdc.translator.services.heattotosca;
2
3 import org.openecomp.sdc.logging.context.impl.MdcDataDebugMessage;
4 import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
5 import org.openecomp.sdc.tosca.datatypes.model.NodeTemplate;
6 import org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate;
7 import org.openecomp.sdc.tosca.services.DataModelUtil;
8 import org.openecomp.sdc.tosca.services.ToscaAnalyzerService;
9 import org.openecomp.sdc.tosca.services.ToscaUtil;
10 import org.openecomp.sdc.tosca.services.impl.ToscaAnalyzerServiceImpl;
11 import org.openecomp.sdc.translator.datatypes.heattotosca.TranslationContext;
12 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.FileNestedConsolidationData;
13
14 import java.util.Map;
15 import java.util.Objects;
16 import java.util.Optional;
17
18 public class UnifiedCompositionManager {
19
20   private MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
21   private ConsolidationService consolidationService;
22   private TranslationService translationService = new TranslationService();
23   private UnifiedCompositionService unifiedCompositionService = new UnifiedCompositionService();
24
25   public UnifiedCompositionManager(ConsolidationService consolidationService) {
26     this.consolidationService = consolidationService;
27   }
28
29   public UnifiedCompositionManager() {
30
31   }
32
33   /**
34    * Create unified composition.
35    *
36    * @param toscaServiceModel  the tosca service model
37    * @param translationContext the translation context
38    * @return the tosca service model
39    */
40   public ToscaServiceModel createUnifiedComposition(ToscaServiceModel toscaServiceModel,
41                                                     TranslationContext translationContext) {
42
43     mdcDataDebugMessage.debugEntryMessage(null, null);
44     Map<String, ServiceTemplate> serviceTemplates = toscaServiceModel.getServiceTemplates();
45     ServiceTemplate mainServiceTemplate =
46         serviceTemplates.get(toscaServiceModel.getEntryDefinitionServiceTemplate());
47     createUnifiedComposition(toscaServiceModel, mainServiceTemplate, translationContext);
48     ToscaServiceModel unifiedToscaServiceModel =
49         HeatToToscaUtil.createToscaServiceModel(mainServiceTemplate, translationContext);
50
51     mdcDataDebugMessage.debugExitMessage(null, null);
52     return unifiedToscaServiceModel;
53   }
54
55   private void createUnifiedComposition(ToscaServiceModel toscaServiceModel,
56                                         ServiceTemplate serviceTemplate,
57                                         TranslationContext translationContext) {
58     mdcDataDebugMessage.debugEntryMessage(null, null);
59
60     handleNestedServiceTemplates(toscaServiceModel, serviceTemplate, translationContext);
61     consolidationService.serviceTemplateConsolidation(serviceTemplate, translationContext);
62     unifiedCompositionService
63         .updateUnifiedAbstractNodesConnectivity(serviceTemplate, translationContext);
64     translationContext.addUnifiedHandledServiceTeamplte(serviceTemplate);
65
66     mdcDataDebugMessage.debugExitMessage(null, null);
67   }
68
69   private void handleNestedServiceTemplates(ToscaServiceModel toscaServiceModel,
70                                             ServiceTemplate serviceTemplate,
71                                             TranslationContext translationContext) {
72     mdcDataDebugMessage.debugEntryMessage(null, null);
73
74     String serviceTemplateFileName = ToscaUtil.getServiceTemplateFileName(serviceTemplate);
75     FileNestedConsolidationData fileNestedConsolidationData =
76         translationContext.getConsolidationData().getNestedConsolidationData()
77             .getFileNestedConsolidationData(serviceTemplateFileName);
78
79     if (Objects.nonNull(fileNestedConsolidationData)) {
80       ToscaAnalyzerService toscaAnalyzerService = new ToscaAnalyzerServiceImpl();
81       for (String substitutedNodeTemplateId : fileNestedConsolidationData
82           .getAllNestedNodeTemplateIds()) {
83         if (translationContext
84             .isNestedNodeWasHandled(serviceTemplateFileName, substitutedNodeTemplateId)) {
85           continue;
86         }
87         NodeTemplate nestedNodeTemplate =
88             DataModelUtil.getNodeTemplate(serviceTemplate, substitutedNodeTemplateId);
89         Optional<String> substituteServiceTemplateName =
90             toscaAnalyzerService.getSubstituteServiceTemplateName(substitutedNodeTemplateId,
91                 nestedNodeTemplate);
92         if (substituteServiceTemplateName.isPresent()) {
93           ServiceTemplate substitutionServiceTemplate =
94               toscaServiceModel.getServiceTemplates().get(substituteServiceTemplateName.get());
95           createUnifiedCompositionForNestedServiceTemplate(toscaServiceModel, serviceTemplate,
96               substitutionServiceTemplate, substitutedNodeTemplateId, translationContext);
97         }
98         translationContext.addNestedNodeAsHandled(serviceTemplateFileName,
99             substitutedNodeTemplateId);
100       }
101     }
102
103     mdcDataDebugMessage.debugExitMessage(null, null);
104   }
105
106   private void createUnifiedCompositionForNestedServiceTemplate(
107       ToscaServiceModel toscaServiceModel,
108       ServiceTemplate serviceTemplate,
109       ServiceTemplate substitutionServiceTemplate,
110       String substitutedNodeTemplateId,
111       TranslationContext translationContext) {
112     mdcDataDebugMessage.debugEntryMessage(null, null);
113     handleNestedServiceTemplates(toscaServiceModel, substitutionServiceTemplate,
114         translationContext);
115     consolidationService.substitutionServiceTemplateConsolidation(substitutedNodeTemplateId,
116         serviceTemplate, substitutionServiceTemplate, translationContext);
117     unifiedCompositionService
118         .updateUnifiedAbstractNodesConnectivity(substitutionServiceTemplate, translationContext);
119     translationContext.addUnifiedHandledServiceTeamplte(substitutionServiceTemplate);
120     mdcDataDebugMessage.debugExitMessage(null, null);
121   }
122 }
123