1 package org.openecomp.sdc.translator.services.heattotosca;
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;
15 import java.util.Objects;
16 import java.util.Optional;
18 public class UnifiedCompositionManager {
20 private MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
21 private ConsolidationService consolidationService;
22 private TranslationService translationService = new TranslationService();
23 private UnifiedCompositionService unifiedCompositionService = new UnifiedCompositionService();
25 public UnifiedCompositionManager(ConsolidationService consolidationService) {
26 this.consolidationService = consolidationService;
29 public UnifiedCompositionManager() {
34 * Create unified composition.
36 * @param toscaServiceModel the tosca service model
37 * @param translationContext the translation context
38 * @return the tosca service model
40 public ToscaServiceModel createUnifiedComposition(ToscaServiceModel toscaServiceModel,
41 TranslationContext translationContext) {
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);
51 mdcDataDebugMessage.debugExitMessage(null, null);
52 return unifiedToscaServiceModel;
55 private void createUnifiedComposition(ToscaServiceModel toscaServiceModel,
56 ServiceTemplate serviceTemplate,
57 TranslationContext translationContext) {
58 mdcDataDebugMessage.debugEntryMessage(null, null);
60 handleNestedServiceTemplates(toscaServiceModel, serviceTemplate, translationContext);
61 consolidationService.serviceTemplateConsolidation(serviceTemplate, translationContext);
62 unifiedCompositionService
63 .updateUnifiedAbstractNodesConnectivity(serviceTemplate, translationContext);
64 translationContext.addUnifiedHandledServiceTeamplte(serviceTemplate);
66 mdcDataDebugMessage.debugExitMessage(null, null);
69 private void handleNestedServiceTemplates(ToscaServiceModel toscaServiceModel,
70 ServiceTemplate serviceTemplate,
71 TranslationContext translationContext) {
72 mdcDataDebugMessage.debugEntryMessage(null, null);
74 String serviceTemplateFileName = ToscaUtil.getServiceTemplateFileName(serviceTemplate);
75 FileNestedConsolidationData fileNestedConsolidationData =
76 translationContext.getConsolidationData().getNestedConsolidationData()
77 .getFileNestedConsolidationData(serviceTemplateFileName);
79 if (Objects.nonNull(fileNestedConsolidationData)) {
80 ToscaAnalyzerService toscaAnalyzerService = new ToscaAnalyzerServiceImpl();
81 for (String substitutedNodeTemplateId : fileNestedConsolidationData
82 .getAllNestedNodeTemplateIds()) {
83 if (translationContext
84 .isNestedNodeWasHandled(serviceTemplateFileName, substitutedNodeTemplateId)) {
87 NodeTemplate nestedNodeTemplate =
88 DataModelUtil.getNodeTemplate(serviceTemplate, substitutedNodeTemplateId);
89 Optional<String> substituteServiceTemplateName =
90 toscaAnalyzerService.getSubstituteServiceTemplateName(substitutedNodeTemplateId,
92 if (substituteServiceTemplateName.isPresent()) {
93 ServiceTemplate substitutionServiceTemplate =
94 toscaServiceModel.getServiceTemplates().get(substituteServiceTemplateName.get());
95 createUnifiedCompositionForNestedServiceTemplate(toscaServiceModel, serviceTemplate,
96 substitutionServiceTemplate, substitutedNodeTemplateId, translationContext);
98 translationContext.addNestedNodeAsHandled(serviceTemplateFileName,
99 substitutedNodeTemplateId);
103 mdcDataDebugMessage.debugExitMessage(null, null);
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,
115 consolidationService.substitutionServiceTemplateConsolidation(substitutedNodeTemplateId,
116 serviceTemplate, substitutionServiceTemplate, translationContext);
117 unifiedCompositionService
118 .updateUnifiedAbstractNodesConnectivity(substitutionServiceTemplate, translationContext);
119 translationContext.addUnifiedHandledServiceTeamplte(substitutionServiceTemplate);
120 mdcDataDebugMessage.debugExitMessage(null, null);