2e67983194fac69059aa29449e54bb9a79b106e3
[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.ToscaAnalyzerService;
8 import org.openecomp.sdc.tosca.services.impl.ToscaAnalyzerServiceImpl;
9 import org.openecomp.sdc.translator.datatypes.heattotosca.TranslationContext;
10 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.FileNestedConsolidationData;
11
12 import java.util.HashSet;
13 import java.util.Map;
14 import java.util.Optional;
15 import java.util.Set;
16
17 public class UnifiedCompositionManager {
18
19   private MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
20   private ConsolidationService consolidationService;
21   private TranslationService translationService = new TranslationService();
22   private UnifiedCompositionService unifiedCompositionService = new UnifiedCompositionService();
23
24   public UnifiedCompositionManager(ConsolidationService consolidationService) {
25     this.consolidationService = consolidationService;
26   }
27
28   public UnifiedCompositionManager() {
29
30   }
31
32   /**
33    * Create unified composition.
34    *
35    * @param toscaServiceModel  the tosca service model
36    * @param translationContext the translation context
37    * @return the tosca service model
38    */
39   public ToscaServiceModel createUnifiedComposition(ToscaServiceModel toscaServiceModel,
40                                                     TranslationContext translationContext) {
41
42     mdcDataDebugMessage.debugEntryMessage(null, null);
43     Map<String, ServiceTemplate> serviceTemplates = toscaServiceModel.getServiceTemplates();
44     ServiceTemplate mainServiceTemplate =
45         serviceTemplates.get(toscaServiceModel.getEntryDefinitionServiceTemplate());
46     consolidationService.mainServiceTemplateConsolidation(mainServiceTemplate, translationContext);
47     ToscaAnalyzerService toscaAnalyzerService = new ToscaAnalyzerServiceImpl();
48
49
50     FileNestedConsolidationData mainFileNestedConsolidationData =
51         translationContext.getConsolidationData().getNestedConsolidationData()
52             .getFileNestedConsolidationData(toscaServiceModel.getEntryDefinitionServiceTemplate());
53     Set<String> substituteNodeTemplatesId =
54         mainFileNestedConsolidationData == null
55             || mainFileNestedConsolidationData.getAllNestedNodeTemplateIds() == null
56             ? new HashSet<>() : mainFileNestedConsolidationData.getAllNestedNodeTemplateIds();
57
58     for (String substituteNodeTemplateId : substituteNodeTemplatesId) {
59       NodeTemplate subNodeTemplate = mainServiceTemplate.getTopology_template().getNode_templates()
60           .get(substituteNodeTemplateId);
61       Optional<String> substituteServiceTemplateName = toscaAnalyzerService
62           .getSubstituteServiceTemplateName(substituteNodeTemplateId, subNodeTemplate);
63       if (substituteServiceTemplateName.isPresent()) {
64         ServiceTemplate substituteServiceTemplate =
65             serviceTemplates.get(substituteServiceTemplateName.get());
66
67         consolidationService.substitutionServiceTemplateConsolidation(substituteNodeTemplateId,
68                 mainServiceTemplate, substituteServiceTemplate, translationContext);
69       }
70     }
71     unifiedCompositionService
72         .updateUnifiedAbstractNodesConnectivity(mainServiceTemplate, translationContext);
73     ToscaServiceModel unifiedToscaServiceModel =
74         HeatToToscaUtil.createToscaServiceModel(mainServiceTemplate, translationContext);
75
76     mdcDataDebugMessage.debugExitMessage(null, null);
77     return unifiedToscaServiceModel;
78   }
79 }
80