1 package org.openecomp.sdc.translator.services.heattotosca;
3 import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
4 import org.openecomp.sdc.tosca.datatypes.model.NodeTemplate;
5 import org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate;
6 import org.openecomp.sdc.tosca.services.DataModelUtil;
7 import org.openecomp.sdc.tosca.services.ToscaAnalyzerService;
8 import org.openecomp.sdc.tosca.services.ToscaUtil;
9 import org.openecomp.sdc.tosca.services.impl.ToscaAnalyzerServiceImpl;
10 import org.openecomp.sdc.translator.datatypes.heattotosca.TranslationContext;
11 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.FileNestedConsolidationData;
14 import java.util.Objects;
15 import java.util.Optional;
17 public class UnifiedCompositionManager {
18 private ConsolidationService consolidationService;
19 private TranslationService translationService = new TranslationService();
20 private UnifiedCompositionService unifiedCompositionService = new UnifiedCompositionService();
22 public UnifiedCompositionManager(ConsolidationService consolidationService) {
23 this.consolidationService = consolidationService;
26 public UnifiedCompositionManager() {
31 * Create unified composition.
33 * @param toscaServiceModel the tosca service model
34 * @param translationContext the translation context
35 * @return the tosca service model
37 public ToscaServiceModel createUnifiedComposition(ToscaServiceModel toscaServiceModel,
38 TranslationContext translationContext) {
39 Map<String, ServiceTemplate> serviceTemplates = toscaServiceModel.getServiceTemplates();
40 ServiceTemplate mainServiceTemplate =
41 serviceTemplates.get(toscaServiceModel.getEntryDefinitionServiceTemplate());
42 createUnifiedComposition(toscaServiceModel, mainServiceTemplate, translationContext);
43 ToscaServiceModel unifiedToscaServiceModel =
44 HeatToToscaUtil.createToscaServiceModel(mainServiceTemplate, translationContext);
45 return unifiedToscaServiceModel;
48 private void createUnifiedComposition(ToscaServiceModel toscaServiceModel,
49 ServiceTemplate serviceTemplate,
50 TranslationContext translationContext) {
51 handleNestedServiceTemplates(toscaServiceModel, serviceTemplate, translationContext);
52 consolidationService.serviceTemplateConsolidation(serviceTemplate, translationContext);
53 unifiedCompositionService
54 .updateUnifiedAbstractNodesConnectivity(serviceTemplate, translationContext);
55 translationContext.addUnifiedHandledServiceTeamplte(serviceTemplate);
58 private void handleNestedServiceTemplates(ToscaServiceModel toscaServiceModel,
59 ServiceTemplate serviceTemplate,
60 TranslationContext translationContext) {
61 String serviceTemplateFileName = ToscaUtil.getServiceTemplateFileName(serviceTemplate);
62 FileNestedConsolidationData fileNestedConsolidationData =
63 translationContext.getConsolidationData().getNestedConsolidationData()
64 .getFileNestedConsolidationData(serviceTemplateFileName);
66 if (Objects.nonNull(fileNestedConsolidationData)) {
67 ToscaAnalyzerService toscaAnalyzerService = new ToscaAnalyzerServiceImpl();
68 for (String substitutedNodeTemplateId : fileNestedConsolidationData
69 .getAllNestedNodeTemplateIds()) {
70 NodeTemplate nestedNodeTemplate =
71 DataModelUtil.getNodeTemplate(serviceTemplate, substitutedNodeTemplateId);
72 if (Objects.isNull(nestedNodeTemplate) || translationContext
73 .isNestedNodeWasHandled(serviceTemplateFileName, substitutedNodeTemplateId)) {
76 Optional<String> substituteServiceTemplateName =
77 toscaAnalyzerService.getSubstituteServiceTemplateName(substitutedNodeTemplateId,
79 if (substituteServiceTemplateName.isPresent()) {
80 ServiceTemplate substitutionServiceTemplate =
81 toscaServiceModel.getServiceTemplates().get(substituteServiceTemplateName.get());
82 createUnifiedCompositionForNestedServiceTemplate(toscaServiceModel, serviceTemplate,
83 substitutionServiceTemplate, substitutedNodeTemplateId, translationContext);
85 translationContext.addNestedNodeAsHandled(serviceTemplateFileName,
86 substitutedNodeTemplateId);
91 private void createUnifiedCompositionForNestedServiceTemplate(
92 ToscaServiceModel toscaServiceModel,
93 ServiceTemplate serviceTemplate,
94 ServiceTemplate substitutionServiceTemplate,
95 String substitutedNodeTemplateId,
96 TranslationContext translationContext) {
97 handleNestedServiceTemplates(toscaServiceModel, substitutionServiceTemplate,
99 consolidationService.substitutionServiceTemplateConsolidation(substitutedNodeTemplateId,
100 serviceTemplate, substitutionServiceTemplate, translationContext);
101 unifiedCompositionService
102 .updateUnifiedAbstractNodesConnectivity(substitutionServiceTemplate, translationContext);
103 translationContext.addUnifiedHandledServiceTeamplte(substitutionServiceTemplate);