2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
20 package org.openecomp.sdc.translator.services.heattotosca;
22 import org.onap.sdc.tosca.datatypes.model.NodeTemplate;
23 import org.onap.sdc.tosca.datatypes.model.ServiceTemplate;
24 import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
25 import org.openecomp.sdc.tosca.services.DataModelUtil;
26 import org.openecomp.sdc.tosca.services.ToscaAnalyzerService;
27 import org.openecomp.sdc.tosca.services.ToscaUtil;
28 import org.openecomp.sdc.tosca.services.impl.ToscaAnalyzerServiceImpl;
29 import org.openecomp.sdc.translator.datatypes.heattotosca.TranslationContext;
30 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.FileNestedConsolidationData;
33 import java.util.Objects;
34 import java.util.Optional;
36 public class UnifiedCompositionManager {
37 private ConsolidationService consolidationService;
38 private TranslationService translationService = new TranslationService();
39 private UnifiedCompositionService unifiedCompositionService = new UnifiedCompositionService();
41 public UnifiedCompositionManager(ConsolidationService consolidationService) {
42 this.consolidationService = consolidationService;
45 public UnifiedCompositionManager() {
50 * Create unified composition.
52 * @param toscaServiceModel the tosca service model
53 * @param translationContext the translation context
54 * @return the tosca service model
56 public ToscaServiceModel createUnifiedComposition(ToscaServiceModel toscaServiceModel,
57 TranslationContext translationContext) {
58 Map<String, ServiceTemplate> serviceTemplates = toscaServiceModel.getServiceTemplates();
59 ServiceTemplate mainServiceTemplate =
60 serviceTemplates.get(toscaServiceModel.getEntryDefinitionServiceTemplate());
61 createUnifiedComposition(toscaServiceModel, mainServiceTemplate, translationContext);
62 ToscaServiceModel unifiedToscaServiceModel =
63 HeatToToscaUtil.createToscaServiceModel(mainServiceTemplate, translationContext);
64 return unifiedToscaServiceModel;
67 private void createUnifiedComposition(ToscaServiceModel toscaServiceModel,
68 ServiceTemplate serviceTemplate,
69 TranslationContext translationContext) {
70 handleNestedServiceTemplates(toscaServiceModel, serviceTemplate, translationContext);
71 consolidationService.serviceTemplateConsolidation(serviceTemplate, translationContext);
72 unifiedCompositionService
73 .updateUnifiedAbstractNodesConnectivity(serviceTemplate, translationContext);
74 translationContext.addUnifiedHandledServiceTeamplte(serviceTemplate);
77 private void handleNestedServiceTemplates(ToscaServiceModel toscaServiceModel,
78 ServiceTemplate serviceTemplate,
79 TranslationContext translationContext) {
80 String serviceTemplateFileName = ToscaUtil.getServiceTemplateFileName(serviceTemplate);
81 FileNestedConsolidationData fileNestedConsolidationData =
82 translationContext.getConsolidationData().getNestedConsolidationData()
83 .getFileNestedConsolidationData(serviceTemplateFileName);
85 if (Objects.nonNull(fileNestedConsolidationData)) {
86 ToscaAnalyzerService toscaAnalyzerService = new ToscaAnalyzerServiceImpl();
87 for (String substitutedNodeTemplateId : fileNestedConsolidationData
88 .getAllNestedNodeTemplateIds()) {
89 NodeTemplate nestedNodeTemplate =
90 DataModelUtil.getNodeTemplate(serviceTemplate, substitutedNodeTemplateId);
91 if (Objects.isNull(nestedNodeTemplate) || translationContext
92 .isNestedNodeWasHandled(serviceTemplateFileName, substitutedNodeTemplateId)) {
95 Optional<String> substituteServiceTemplateName =
96 toscaAnalyzerService.getSubstituteServiceTemplateName(substitutedNodeTemplateId,
98 if (substituteServiceTemplateName.isPresent()) {
99 ServiceTemplate substitutionServiceTemplate =
100 toscaServiceModel.getServiceTemplates().get(substituteServiceTemplateName.get());
101 createUnifiedCompositionForNestedServiceTemplate(toscaServiceModel, serviceTemplate,
102 substitutionServiceTemplate, substitutedNodeTemplateId, translationContext);
104 translationContext.addNestedNodeAsHandled(serviceTemplateFileName,
105 substitutedNodeTemplateId);
110 private void createUnifiedCompositionForNestedServiceTemplate(
111 ToscaServiceModel toscaServiceModel,
112 ServiceTemplate serviceTemplate,
113 ServiceTemplate substitutionServiceTemplate,
114 String substitutedNodeTemplateId,
115 TranslationContext translationContext) {
116 handleNestedServiceTemplates(toscaServiceModel, substitutionServiceTemplate,
118 consolidationService.substitutionServiceTemplateConsolidation(substitutedNodeTemplateId,
119 serviceTemplate, substitutionServiceTemplate, translationContext);
120 unifiedCompositionService
121 .updateUnifiedAbstractNodesConnectivity(substitutionServiceTemplate, translationContext);
122 translationContext.addUnifiedHandledServiceTeamplte(substitutionServiceTemplate);