aboutsummaryrefslogtreecommitdiffstats
path: root/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/UnifiedCompositionManager.java
blob: 2e67983194fac69059aa29449e54bb9a79b106e3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package org.openecomp.sdc.translator.services.heattotosca;

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.ToscaAnalyzerService;
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.Optional;
import java.util.Set;

public class UnifiedCompositionManager {

  private MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
  private ConsolidationService consolidationService;
  private TranslationService translationService = new TranslationService();
  private UnifiedCompositionService unifiedCompositionService = new UnifiedCompositionService();

  public UnifiedCompositionManager(ConsolidationService consolidationService) {
    this.consolidationService = consolidationService;
  }

  public UnifiedCompositionManager() {

  }

  /**
   * Create unified composition.
   *
   * @param toscaServiceModel  the tosca service model
   * @param translationContext the translation context
   * @return the tosca service model
   */
  public ToscaServiceModel createUnifiedComposition(ToscaServiceModel toscaServiceModel,
                                                    TranslationContext translationContext) {

    mdcDataDebugMessage.debugEntryMessage(null, null);
    Map<String, ServiceTemplate> serviceTemplates = toscaServiceModel.getServiceTemplates();
    ServiceTemplate mainServiceTemplate =
        serviceTemplates.get(toscaServiceModel.getEntryDefinitionServiceTemplate());
    consolidationService.mainServiceTemplateConsolidation(mainServiceTemplate, translationContext);
    ToscaAnalyzerService toscaAnalyzerService = new ToscaAnalyzerServiceImpl();


    FileNestedConsolidationData mainFileNestedConsolidationData =
        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);
      }
    }
    unifiedCompositionService
        .updateUnifiedAbstractNodesConnectivity(mainServiceTemplate, translationContext);
    ToscaServiceModel unifiedToscaServiceModel =
        HeatToToscaUtil.createToscaServiceModel(mainServiceTemplate, translationContext);

    mdcDataDebugMessage.debugExitMessage(null, null);
    return unifiedToscaServiceModel;
  }
}