[SDC-29] Amdocs OnBoard 1707 initial commit.
[sdc.git] / openecomp-be / lib / openecomp-sdc-translator-lib / openecomp-sdc-translator-core / src / main / java / org / openecomp / sdc / translator / services / heattotosca / impl / resourcetranslation / ResourceTranslationNestedImpl.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
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
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
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=========================================================
19  */
20
21 package org.openecomp.sdc.translator.services.heattotosca.impl.resourcetranslation;
22
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;
39
40 public class ResourceTranslationNestedImpl extends ResourceTranslationBase {
41
42   protected static Logger logger =
43       (Logger) LoggerFactory.getLogger(ResourceTranslationNestedImpl.class);
44
45   @Override
46   public void translate(TranslateTo translateTo) {
47     mdcDataDebugMessage.debugEntryMessage(null, null);
48
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");
55       return;
56     }
57     String templateName = FileUtils.getFileWithoutExtention(translateTo.getResource().getType());
58     String substitutionNodeTypeKey = ToscaNodeType.ABSTRACT_NODE_TYPE_PREFIX + "heat."
59         + templateName;
60
61     if (!translateTo.getContext().getTranslatedServiceTemplates()
62         .containsKey(translateTo.getResource().getType())) {
63
64       //substitution service template
65       ServiceTemplate nestedSubstitutionServiceTemplate =
66           createSubstitutionServiceTemplate(translateTo, nestedFileData, templateName);
67
68       //global substitution service template
69       ServiceTemplate globalSubstitutionServiceTemplate = new HeatToToscaUtil()
70           .fetchGlobalSubstitutionServiceTemplate(translateTo.getServiceTemplate(),
71               translateTo.getContext());
72
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
80       HeatToToscaUtil
81           .handleSubstitutionMapping(translateTo.getContext(), substitutionNodeTypeKey,
82               nestedSubstitutionServiceTemplate, substitutionNodeType);
83
84       //add new nested service template
85       translateTo.getContext().getTranslatedServiceTemplates()
86           .put(translateTo.getResource().getType(), nestedSubstitutionServiceTemplate);
87     }
88
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);
96
97     //Add nested node template id to consolidation data
98     ConsolidationDataUtil.updateNestedNodeTemplateId(translateTo);
99
100     mdcDataDebugMessage.debugExitMessage(null, null);
101   }
102
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;
114   }
115
116
117   private void manageSubstitutionNodeTemplateConnectionPoint(TranslateTo translateTo,
118                                                              FileData nestedFileData,
119                                                              NodeTemplate substitutionNodeTemplate,
120                                                              String substitutionNodeTypeId) {
121
122
123     mdcDataDebugMessage.debugEntryMessage(null, null);
124
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,
131         nodeType);
132     handleNovaToVolConnection(translateTo, nestedFileData, substitutionNodeTemplate, nodeType);
133     handleContrailV2VmInterfaceToNetworkConnection(translateTo, nestedFileData,
134         substitutionNodeTemplate, nodeType);
135     handleContrailPortToNetConnections(translateTo, nestedFileData, substitutionNodeTemplate,
136         nodeType);
137     handleVlanSubInterfaceToInterfaceConnections(translateTo, nestedFileData,
138         substitutionNodeTemplate, nodeType);
139
140     mdcDataDebugMessage.debugExitMessage(null, null);
141   }
142
143   private void handleVlanSubInterfaceToInterfaceConnections(TranslateTo translateTo,
144                                                             FileData nestedFileData,
145                                                             NodeTemplate substitutionNodeTemplate,
146                                                             NodeType nodeType) {
147
148
149     mdcDataDebugMessage.debugEntryMessage(null, null);
150
151     ContrailV2VlanToInterfaceResourceConnection linker =
152         new ContrailV2VlanToInterfaceResourceConnection(this, translateTo, nestedFileData,
153             substitutionNodeTemplate, nodeType);
154     linker.connect();
155
156     mdcDataDebugMessage.debugExitMessage(null, null);
157   }
158
159
160   private void handleContrailV2VmInterfaceToNetworkConnection(TranslateTo translateTo,
161                                                               FileData nestedFileData,
162                                                               NodeTemplate substitutionNodeTemplate,
163                                                               NodeType nodeType) {
164
165
166     mdcDataDebugMessage.debugEntryMessage(null, null);
167
168     ContrailV2VmInterfaceToNetResourceConnection linker =
169         new ContrailV2VmInterfaceToNetResourceConnection(this, translateTo, nestedFileData,
170             substitutionNodeTemplate, nodeType);
171     linker.connect();
172
173     mdcDataDebugMessage.debugExitMessage(null, null);
174   }
175
176   private void handleNovaToVolConnection(TranslateTo translateTo, FileData nestedFileData,
177                                          NodeTemplate substitutionNodeTemplate, NodeType nodeType) {
178
179
180     mdcDataDebugMessage.debugEntryMessage(null, null);
181
182     NovaToVolResourceConnection linker =
183         new NovaToVolResourceConnection(this, translateTo, nestedFileData, substitutionNodeTemplate,
184             nodeType);
185     linker.connect();
186
187     mdcDataDebugMessage.debugExitMessage(null, null);
188   }
189
190   private void handleSecurityRulesToPortConnections(TranslateTo translateTo,
191                                                     FileData nestedFileData,
192                                                     NodeTemplate substitutionNodeTemplate,
193                                                     NodeType nodeType) {
194
195
196     mdcDataDebugMessage.debugEntryMessage(null, null);
197
198     SecurityRulesToPortResourceConnection linker =
199         new SecurityRulesToPortResourceConnection(this, translateTo, nestedFileData,
200             substitutionNodeTemplate, nodeType);
201     linker.connect();
202
203     mdcDataDebugMessage.debugExitMessage(null, null);
204   }
205
206   private void handlePortToNetConnections(TranslateTo translateTo, FileData nestedFileData,
207                                           NodeTemplate substitutionNodeTemplate,
208                                           NodeType nodeType) {
209
210
211     mdcDataDebugMessage.debugEntryMessage(null, null);
212
213     PortToNetResourceConnection linker =
214         new PortToNetResourceConnection(this, translateTo, nestedFileData, substitutionNodeTemplate,
215             nodeType);
216     linker.connect();
217
218     mdcDataDebugMessage.debugExitMessage(null, null);
219   }
220
221   private void handleContrailPortToNetConnections(TranslateTo translateTo, FileData nestedFileData,
222                                                   NodeTemplate substitutionNodeTemplate,
223                                                   NodeType nodeType) {
224
225
226     mdcDataDebugMessage.debugEntryMessage(null, null);
227
228     ContrailPortToNetResourceConnection linker =
229         new ContrailPortToNetResourceConnection(this, translateTo, nestedFileData,
230             substitutionNodeTemplate, nodeType);
231     linker.connect();
232
233     mdcDataDebugMessage.debugExitMessage(null, null);
234   }
235
236 }