2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 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=========================================================
21 package org.openecomp.sdc.translator.services.heattotosca.impl.resourcetranslation;
23 import org.openecomp.core.utilities.file.FileUtils;
24 import org.openecomp.sdc.heat.datatypes.manifest.FileData;
25 import org.openecomp.sdc.logging.api.Logger;
26 import org.openecomp.sdc.logging.api.LoggerFactory;
27 import org.openecomp.sdc.tosca.datatypes.ToscaNodeType;
28 import org.openecomp.sdc.tosca.datatypes.model.NodeTemplate;
29 import org.openecomp.sdc.tosca.datatypes.model.NodeType;
30 import org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate;
31 import org.openecomp.sdc.tosca.services.DataModelUtil;
32 import org.openecomp.sdc.tosca.services.ToscaUtil;
33 import org.openecomp.sdc.tosca.services.impl.ToscaAnalyzerServiceImpl;
34 import org.openecomp.sdc.translator.datatypes.heattotosca.to.TranslateTo;
35 import org.openecomp.sdc.translator.services.heattotosca.ConsolidationDataUtil;
36 import org.openecomp.sdc.translator.services.heattotosca.Constants;
37 import org.openecomp.sdc.translator.services.heattotosca.HeatToToscaUtil;
38 import org.openecomp.sdc.translator.services.heattotosca.TranslationService;
40 public class ResourceTranslationNestedImpl extends ResourceTranslationBase {
42 protected static Logger logger =
43 (Logger) LoggerFactory.getLogger(ResourceTranslationNestedImpl.class);
46 public void translate(TranslateTo translateTo) {
47 mdcDataDebugMessage.debugEntryMessage(null, null);
49 FileData nestedFileData =
50 HeatToToscaUtil.getFileData(translateTo.getResource().getType(), translateTo.getContext());
51 if (nestedFileData == null) {
52 logger.warn("Nested File '" + translateTo.getResource().getType()
53 + "' is not exist, therefore, the nested resource with the ID '"
54 + translateTo.getResourceId() + "' will be ignored in TOSCA translation");
57 String templateName = FileUtils.getFileWithoutExtention(translateTo.getResource().getType());
58 String substitutionNodeTypeKey = ToscaNodeType.ABSTRACT_NODE_TYPE_PREFIX + "heat."
61 if (!translateTo.getContext().getTranslatedServiceTemplates()
62 .containsKey(translateTo.getResource().getType())) {
64 //substitution service template
65 ServiceTemplate nestedSubstitutionServiceTemplate =
66 createSubstitutionServiceTemplate(translateTo, nestedFileData, templateName);
68 //global substitution service template
69 ServiceTemplate globalSubstitutionServiceTemplate = new HeatToToscaUtil()
70 .fetchGlobalSubstitutionServiceTemplate(translateTo.getServiceTemplate(),
71 translateTo.getContext());
73 //substitution node type
74 NodeType substitutionNodeType = new ToscaAnalyzerServiceImpl()
75 .createInitSubstitutionNodeType(nestedSubstitutionServiceTemplate,
76 ToscaNodeType.ABSTRACT_SUBSTITUTE);
77 DataModelUtil.addNodeType(globalSubstitutionServiceTemplate, substitutionNodeTypeKey,
78 substitutionNodeType);
79 //substitution mapping
81 .handleSubstitutionMapping(translateTo.getContext(), substitutionNodeTypeKey,
82 nestedSubstitutionServiceTemplate, substitutionNodeType);
84 //add new nested service template
85 translateTo.getContext().getTranslatedServiceTemplates()
86 .put(translateTo.getResource().getType(), nestedSubstitutionServiceTemplate);
89 NodeTemplate substitutionNodeTemplate =
90 HeatToToscaUtil.createAbstractSubstitutionNodeTemplate(translateTo, templateName,
91 substitutionNodeTypeKey);
92 manageSubstitutionNodeTemplateConnectionPoint(translateTo, nestedFileData,
93 substitutionNodeTemplate, substitutionNodeTypeKey);
94 DataModelUtil.addNodeTemplate(translateTo.getServiceTemplate(), translateTo.getTranslatedId(),
95 substitutionNodeTemplate);
97 //Add nested node template id to consolidation data
98 ConsolidationDataUtil.updateNestedNodeTemplateId(translateTo);
100 mdcDataDebugMessage.debugExitMessage(null, null);
103 private ServiceTemplate createSubstitutionServiceTemplate(TranslateTo translateTo,
104 FileData nestedFileData,
105 String templateName) {
106 ServiceTemplate nestedSubstitutionServiceTemplate =
107 HeatToToscaUtil.createInitSubstitutionServiceTemplate(templateName);
108 translateTo.getContext()
109 .addNestedHeatFileName(ToscaUtil.getServiceTemplateFileName(templateName),
110 translateTo.getResource().getType());
111 new TranslationService().translateHeatFile(nestedSubstitutionServiceTemplate, nestedFileData,
112 translateTo.getContext());
113 return nestedSubstitutionServiceTemplate;
117 private void manageSubstitutionNodeTemplateConnectionPoint(TranslateTo translateTo,
118 FileData nestedFileData,
119 NodeTemplate substitutionNodeTemplate,
120 String substitutionNodeTypeId) {
123 mdcDataDebugMessage.debugEntryMessage(null, null);
125 ServiceTemplate globalSubstitutionTemplate =
126 translateTo.getContext().getTranslatedServiceTemplates()
127 .get(Constants.GLOBAL_SUBSTITUTION_TYPES_TEMPLATE_NAME);
128 NodeType nodeType = globalSubstitutionTemplate.getNode_types().get(substitutionNodeTypeId);
129 handlePortToNetConnections(translateTo, nestedFileData, substitutionNodeTemplate, nodeType);
130 handleSecurityRulesToPortConnections(translateTo, nestedFileData, substitutionNodeTemplate,
132 handleNovaToVolConnection(translateTo, nestedFileData, substitutionNodeTemplate, nodeType);
133 handleContrailV2VmInterfaceToNetworkConnection(translateTo, nestedFileData,
134 substitutionNodeTemplate, nodeType);
135 handleContrailPortToNetConnections(translateTo, nestedFileData, substitutionNodeTemplate,
137 handleVlanSubInterfaceToInterfaceConnections(translateTo, nestedFileData,
138 substitutionNodeTemplate, nodeType);
140 mdcDataDebugMessage.debugExitMessage(null, null);
143 private void handleVlanSubInterfaceToInterfaceConnections(TranslateTo translateTo,
144 FileData nestedFileData,
145 NodeTemplate substitutionNodeTemplate,
149 mdcDataDebugMessage.debugEntryMessage(null, null);
151 ContrailV2VlanToInterfaceResourceConnection linker =
152 new ContrailV2VlanToInterfaceResourceConnection(this, translateTo, nestedFileData,
153 substitutionNodeTemplate, nodeType);
156 mdcDataDebugMessage.debugExitMessage(null, null);
160 private void handleContrailV2VmInterfaceToNetworkConnection(TranslateTo translateTo,
161 FileData nestedFileData,
162 NodeTemplate substitutionNodeTemplate,
166 mdcDataDebugMessage.debugEntryMessage(null, null);
168 ContrailV2VmInterfaceToNetResourceConnection linker =
169 new ContrailV2VmInterfaceToNetResourceConnection(this, translateTo, nestedFileData,
170 substitutionNodeTemplate, nodeType);
173 mdcDataDebugMessage.debugExitMessage(null, null);
176 private void handleNovaToVolConnection(TranslateTo translateTo, FileData nestedFileData,
177 NodeTemplate substitutionNodeTemplate, NodeType nodeType) {
180 mdcDataDebugMessage.debugEntryMessage(null, null);
182 NovaToVolResourceConnection linker =
183 new NovaToVolResourceConnection(this, translateTo, nestedFileData, substitutionNodeTemplate,
187 mdcDataDebugMessage.debugExitMessage(null, null);
190 private void handleSecurityRulesToPortConnections(TranslateTo translateTo,
191 FileData nestedFileData,
192 NodeTemplate substitutionNodeTemplate,
196 mdcDataDebugMessage.debugEntryMessage(null, null);
198 SecurityRulesToPortResourceConnection linker =
199 new SecurityRulesToPortResourceConnection(this, translateTo, nestedFileData,
200 substitutionNodeTemplate, nodeType);
203 mdcDataDebugMessage.debugExitMessage(null, null);
206 private void handlePortToNetConnections(TranslateTo translateTo, FileData nestedFileData,
207 NodeTemplate substitutionNodeTemplate,
211 mdcDataDebugMessage.debugEntryMessage(null, null);
213 PortToNetResourceConnection linker =
214 new PortToNetResourceConnection(this, translateTo, nestedFileData, substitutionNodeTemplate,
218 mdcDataDebugMessage.debugExitMessage(null, null);
221 private void handleContrailPortToNetConnections(TranslateTo translateTo, FileData nestedFileData,
222 NodeTemplate substitutionNodeTemplate,
226 mdcDataDebugMessage.debugEntryMessage(null, null);
228 ContrailPortToNetResourceConnection linker =
229 new ContrailPortToNetResourceConnection(this, translateTo, nestedFileData,
230 substitutionNodeTemplate, nodeType);
233 mdcDataDebugMessage.debugExitMessage(null, null);