2 * Copyright © 2016-2018 European Support Limited
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package org.openecomp.sdc.translator.services.heattotosca;
19 import org.apache.commons.collections4.CollectionUtils;
20 import org.apache.commons.collections4.MapUtils;
21 import org.apache.commons.lang3.StringUtils;
22 import org.openecomp.core.utilities.file.FileUtils;
23 import org.openecomp.sdc.common.errors.CoreException;
24 import org.openecomp.sdc.datatypes.configuration.ImplementationConfiguration;
25 import org.openecomp.sdc.heat.datatypes.model.HeatOrchestrationTemplate;
26 import org.openecomp.sdc.heat.datatypes.model.HeatResourcesTypes;
27 import org.openecomp.sdc.heat.datatypes.model.Resource;
28 import org.openecomp.sdc.tosca.datatypes.ToscaNodeType;
29 import org.openecomp.sdc.tosca.datatypes.model.NodeTemplate;
30 import org.openecomp.sdc.tosca.datatypes.model.RequirementAssignment;
31 import org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate;
32 import org.openecomp.sdc.tosca.services.DataModelUtil;
33 import org.openecomp.sdc.tosca.services.ToscaUtil;
34 import org.openecomp.sdc.translator.datatypes.heattotosca.TranslationContext;
35 import org.openecomp.sdc.translator.datatypes.heattotosca.to.TranslateTo;
36 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.ComputeConsolidationData;
37 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.ComputeTemplateConsolidationData;
38 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.ConsolidationData;
39 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.EntityConsolidationData;
40 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.FileComputeConsolidationData;
41 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.FileNestedConsolidationData;
42 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.FilePortConsolidationData;
43 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.GetAttrFuncData;
44 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.NestedConsolidationData;
45 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.NestedTemplateConsolidationData;
46 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.PortConsolidationData;
47 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.PortTemplateConsolidationData;
48 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.RequirementAssignmentData;
49 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.SubInterfaceTemplateConsolidationData;
50 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.TypeComputeConsolidationData;
51 import org.openecomp.sdc.translator.services.heattotosca.errors.DuplicateResourceIdsInDifferentFilesErrorBuilder;
53 import java.util.ArrayList;
54 import java.util.HashMap;
55 import java.util.Iterator;
56 import java.util.List;
58 import java.util.Objects;
59 import java.util.Optional;
63 * Utility class for consolidation data collection helper methods.
65 public class ConsolidationDataUtil {
67 private static final String UNDERSCORE = "_";
68 private static final String DIGIT_REGEX = "\\d+";
70 private ConsolidationDataUtil() {
74 * Gets compute template consolidation data.
76 * @param context the translation context
77 * @param serviceTemplate the service template
78 * @param computeNodeType the compute node type
79 * @param computeNodeTemplateId the compute node template id
80 * @return the compute template consolidation data
82 public static ComputeTemplateConsolidationData getComputeTemplateConsolidationData(
83 TranslationContext context,
84 ServiceTemplate serviceTemplate,
85 String computeNodeType,
86 String computeNodeTemplateId) {
88 ConsolidationData consolidationData = context.getConsolidationData();
89 String serviceTemplateFileName = ToscaUtil.getServiceTemplateFileName(serviceTemplate);
91 ComputeConsolidationData computeConsolidationData = consolidationData
92 .getComputeConsolidationData();
94 FileComputeConsolidationData fileComputeConsolidationData = computeConsolidationData
95 .getFileComputeConsolidationData(serviceTemplateFileName);
97 if (fileComputeConsolidationData == null) {
98 fileComputeConsolidationData = new FileComputeConsolidationData();
99 computeConsolidationData.setFileComputeConsolidationData(serviceTemplateFileName,
100 fileComputeConsolidationData);
103 TypeComputeConsolidationData typeComputeConsolidationData = fileComputeConsolidationData
104 .getTypeComputeConsolidationData(computeNodeType);
105 if (typeComputeConsolidationData == null) {
106 typeComputeConsolidationData = new TypeComputeConsolidationData();
107 fileComputeConsolidationData.setTypeComputeConsolidationData(computeNodeType,
108 typeComputeConsolidationData);
111 ComputeTemplateConsolidationData computeTemplateConsolidationData =
112 typeComputeConsolidationData.getComputeTemplateConsolidationData(computeNodeTemplateId);
113 if (computeTemplateConsolidationData == null) {
114 computeTemplateConsolidationData = new ComputeTemplateConsolidationData();
115 computeTemplateConsolidationData.setNodeTemplateId(computeNodeTemplateId);
116 typeComputeConsolidationData.setComputeTemplateConsolidationData(computeNodeTemplateId,
117 computeTemplateConsolidationData);
120 return computeTemplateConsolidationData;
125 * Gets port template consolidation data.
127 * @param context the context
128 * @param serviceTemplate the service template
129 * @param portNodeTemplateId the port node template id
130 * @return the port template consolidation data
132 public static PortTemplateConsolidationData getPortTemplateConsolidationData(TranslationContext context,
133 ServiceTemplate serviceTemplate,
134 String portResourceId,
135 String portResourceType,
136 String portNodeTemplateId) {
138 ConsolidationData consolidationData = context.getConsolidationData();
139 String serviceTemplateFileName = ToscaUtil.getServiceTemplateFileName(serviceTemplate);
141 PortConsolidationData portConsolidationData = consolidationData.getPortConsolidationData();
143 FilePortConsolidationData filePortConsolidationData = portConsolidationData
144 .getFilePortConsolidationData(serviceTemplateFileName);
146 if (filePortConsolidationData == null) {
147 filePortConsolidationData = new FilePortConsolidationData();
148 portConsolidationData.setFilePortConsolidationData(serviceTemplateFileName,
149 filePortConsolidationData);
152 PortTemplateConsolidationData portTemplateConsolidationData =
153 filePortConsolidationData.getPortTemplateConsolidationData(portNodeTemplateId);
154 if (portTemplateConsolidationData == null) {
155 portTemplateConsolidationData = getInitPortTemplateConsolidationData(portNodeTemplateId,
156 portResourceId, portResourceType);
157 filePortConsolidationData.setPortTemplateConsolidationData(portNodeTemplateId, portTemplateConsolidationData);
160 return portTemplateConsolidationData;
163 private static PortTemplateConsolidationData getInitPortTemplateConsolidationData(String portNodeTemplateId,
164 String portResourceId,
165 String portResourceType) {
166 PortTemplateConsolidationData portTemplateConsolidationData = new PortTemplateConsolidationData();
167 portTemplateConsolidationData.setNodeTemplateId(portNodeTemplateId);
168 Optional<String> portNetworkRole = HeatToToscaUtil.evaluateNetworkRoleFromResourceId(portResourceId,
170 portNetworkRole.ifPresent(portTemplateConsolidationData::setNetworkRole);
171 return portTemplateConsolidationData;
174 public static Optional<SubInterfaceTemplateConsolidationData> getSubInterfaceTemplateConsolidationData(
175 TranslateTo subInterfaceTo,
176 String subInterfaceNodeTemplateId) {
177 Optional<String> parentPortNodeTemplateId =
178 HeatToToscaUtil.getSubInterfaceParentPortNodeTemplateId(subInterfaceTo);
179 if (parentPortNodeTemplateId.isPresent()) {
180 return Optional.ofNullable(getSubInterfaceTemplateConsolidationData(subInterfaceTo,
181 parentPortNodeTemplateId.get(), subInterfaceNodeTemplateId));
183 return Optional.empty();
186 private static SubInterfaceTemplateConsolidationData getSubInterfaceTemplateConsolidationData(
187 TranslateTo subInterfaceTo,
188 String parentPortNodeTemplateId,
189 String subInterfaceNodeTemplateId) {
191 ConsolidationData consolidationData = subInterfaceTo.getContext().getConsolidationData();
192 String serviceTemplateFileName = ToscaUtil.getServiceTemplateFileName(subInterfaceTo.getServiceTemplate());
194 PortConsolidationData portConsolidationData = consolidationData.getPortConsolidationData();
196 FilePortConsolidationData filePortConsolidationData = portConsolidationData
197 .getFilePortConsolidationData(serviceTemplateFileName);
199 if (filePortConsolidationData == null) {
200 filePortConsolidationData = new FilePortConsolidationData();
201 portConsolidationData.setFilePortConsolidationData(serviceTemplateFileName,
202 filePortConsolidationData);
205 PortTemplateConsolidationData portTemplateConsolidationData =
206 filePortConsolidationData.getPortTemplateConsolidationData(parentPortNodeTemplateId);
207 if (portTemplateConsolidationData == null) {
208 portTemplateConsolidationData = new PortTemplateConsolidationData();
209 portTemplateConsolidationData.setNodeTemplateId(parentPortNodeTemplateId);
210 filePortConsolidationData.setPortTemplateConsolidationData(parentPortNodeTemplateId,
211 portTemplateConsolidationData);
214 return getSubInterfaceResourceTemplateConsolidationData(subInterfaceTo.getResource(), portTemplateConsolidationData,
215 subInterfaceNodeTemplateId, parentPortNodeTemplateId);
218 private static SubInterfaceTemplateConsolidationData getSubInterfaceResourceTemplateConsolidationData(
220 PortTemplateConsolidationData portTemplateConsolidationData,
221 String subInterfaceNodeTemplateId,
222 String parentPortNodeTemplateId) {
223 String subInterfaceType = ToscaNodeType.VLAN_SUB_INTERFACE_RESOURCE_TYPE_PREFIX
224 + FileUtils.getFileWithoutExtention(HeatToToscaUtil.getSubInterfaceResourceType(resource));
225 SubInterfaceTemplateConsolidationData data = new SubInterfaceTemplateConsolidationData();
226 data.setNodeTemplateId(subInterfaceNodeTemplateId);
227 data.setParentPortNodeTemplateId(parentPortNodeTemplateId);
228 if (CollectionUtils.isNotEmpty(portTemplateConsolidationData.getSubInterfaceConsolidationData(subInterfaceType))) {
229 boolean isNewSubInterface = true;
230 List<SubInterfaceTemplateConsolidationData> subInterfaceTemplateConsolidationDataList =
231 portTemplateConsolidationData.getSubInterfaceConsolidationData(subInterfaceType);
232 for (SubInterfaceTemplateConsolidationData subInterfaceTemplateConsolidationData :
233 subInterfaceTemplateConsolidationDataList) {
234 if (subInterfaceNodeTemplateId.equals(subInterfaceTemplateConsolidationData.getNodeTemplateId())) {
235 data = subInterfaceTemplateConsolidationData;
236 isNewSubInterface = false;
239 if (isNewSubInterface) {
240 portTemplateConsolidationData.addSubInterfaceConsolidationData(subInterfaceType, data);
243 portTemplateConsolidationData.addSubInterfaceConsolidationData(subInterfaceType, data);
249 * Gets nested template consolidation data.
251 * @param context the context
252 * @param serviceTemplate the service template
253 * @param nestedNodeTemplateId the nested node template id @return the nested template
256 public static NestedTemplateConsolidationData getNestedTemplateConsolidationData(
257 TranslationContext context,
258 ServiceTemplate serviceTemplate,
259 String nestedHeatFileName, String nestedNodeTemplateId) {
261 if (isNestedResourceIdOccuresInDifferentNestedFiles(context, nestedHeatFileName,
262 nestedNodeTemplateId)) {
263 throw new CoreException(
264 new DuplicateResourceIdsInDifferentFilesErrorBuilder(nestedNodeTemplateId).build());
267 if (isNodeTemplatePointsToServiceTemplateWithoutNodeTemplates(
268 nestedNodeTemplateId, nestedHeatFileName, context)) {
272 ConsolidationData consolidationData = context.getConsolidationData();
273 String serviceTemplateFileName = ToscaUtil.getServiceTemplateFileName(serviceTemplate);
275 NestedConsolidationData nestedConsolidationData = consolidationData
276 .getNestedConsolidationData();
278 FileNestedConsolidationData fileNestedConsolidationData = nestedConsolidationData
279 .getFileNestedConsolidationData(serviceTemplateFileName);
281 if (fileNestedConsolidationData == null) {
282 fileNestedConsolidationData = new FileNestedConsolidationData();
283 nestedConsolidationData.setFileNestedConsolidationData(serviceTemplateFileName,
284 fileNestedConsolidationData);
287 NestedTemplateConsolidationData nestedTemplateConsolidationData =
288 fileNestedConsolidationData.getNestedTemplateConsolidationData(nestedNodeTemplateId);
289 if (nestedTemplateConsolidationData == null) {
290 nestedTemplateConsolidationData = new NestedTemplateConsolidationData();
291 nestedTemplateConsolidationData.setNodeTemplateId(nestedNodeTemplateId);
292 fileNestedConsolidationData.setNestedTemplateConsolidationData(nestedNodeTemplateId,
293 nestedTemplateConsolidationData);
296 return nestedTemplateConsolidationData;
299 public static boolean isNodeTemplatePointsToServiceTemplateWithoutNodeTemplates(String
300 nestedNodeTemplateId,
301 String nestedHeatFileName,
302 TranslationContext context) {
304 return context.isServiceTemplateWithoutNodeTemplatesSection(
305 FileUtils.getFileWithoutExtention(nestedHeatFileName))
306 || context.isNodeTemplateIdPointsToStWithoutNodeTemplates(nestedNodeTemplateId);
309 private static boolean isNestedResourceIdOccuresInDifferentNestedFiles(TranslationContext context,
310 String nestedHeatFileName,
311 String nestedNodeTemplateId) {
312 return Objects.nonNull(nestedHeatFileName)
313 && context.getAllTranslatedResourceIdsFromDiffNestedFiles(nestedHeatFileName)
314 .contains(nestedNodeTemplateId);
318 * Update group id information in consolidation data.
320 * @param entityConsolidationData Entity consolidation data (Port/Compute)
321 * @param translatedGroupId Group id of which compute node is a part
323 public static void updateGroupIdInConsolidationData(EntityConsolidationData
324 entityConsolidationData,
325 String translatedGroupId) {
326 if (entityConsolidationData.getGroupIds() == null) {
327 entityConsolidationData.setGroupIds(new ArrayList<>());
329 entityConsolidationData.getGroupIds().add(translatedGroupId);
333 * Update volume information in consolidation data.
335 * @param translateTo {@link TranslateTo} object
336 * @param computeType Local type of the compute node
337 * @param computeNodeTemplateId Node template id of the compute node
338 * @param requirementAssignment RequirementAssignment object
340 public static void updateComputeConsolidationDataVolumes(TranslateTo translateTo,
342 String computeNodeTemplateId,
343 String requirementId,
344 RequirementAssignment
345 requirementAssignment) {
346 TranslationContext translationContext = translateTo.getContext();
347 ServiceTemplate serviceTemplate = translateTo.getServiceTemplate();
348 ComputeTemplateConsolidationData computeTemplateConsolidationData =
349 getComputeTemplateConsolidationData(translationContext, serviceTemplate, computeType,
350 computeNodeTemplateId);
351 computeTemplateConsolidationData.addVolume(requirementId, requirementAssignment);
356 * Update port in consolidation data.
358 * @param translateTo the translate to
359 * @param computeNodeType the compute node type
360 * @param portResourceId the port resource id
361 * @param portNodeTemplateId the port node template id
363 public static void updatePortInConsolidationData(TranslateTo translateTo,
364 String computeNodeType,
365 String portResourceId,
366 String portResourceType,
367 String portNodeTemplateId) {
368 TranslationContext translationContext = translateTo.getContext();
369 ServiceTemplate serviceTemplate = translateTo.getServiceTemplate();
370 ComputeTemplateConsolidationData computeTemplateConsolidationData =
371 getComputeTemplateConsolidationData(translationContext, serviceTemplate, computeNodeType,
372 translateTo.getTranslatedId());
373 computeTemplateConsolidationData.addPort(getPortType(portNodeTemplateId), portNodeTemplateId);
374 // create port in consolidation data
375 getPortTemplateConsolidationData(translationContext, serviceTemplate, portResourceId,
376 portResourceType, portNodeTemplateId);
380 * Update nodes connected in and out for Depends on and connectivity in consolidation data.
382 * @param translateTo the translate to
383 * @param targetResourceId the target resource id
384 * @param nodeTemplateId the source node template id
385 * @param requirementAssignment the requirement assignment
387 public static void updateNodesConnectedData(TranslateTo translateTo, String targetResourceId,
388 Resource targetResource, Resource sourceResource,
389 String nodeTemplateId, String requirementId,
390 RequirementAssignment requirementAssignment) {
391 ConsolidationEntityType consolidationEntityType = ConsolidationEntityType.OTHER;
392 consolidationEntityType.setEntityType(sourceResource, targetResource, translateTo.getContext());
393 // Add resource dependency information in nodesConnectedIn if the target node
394 // is a consolidation entity
395 if (isConsolidationEntity(consolidationEntityType.getTargetEntityType())) {
396 ConsolidationDataUtil.updateNodesConnectedIn(translateTo,
397 nodeTemplateId, consolidationEntityType.getTargetEntityType(), targetResourceId,
398 requirementId, requirementAssignment);
401 //Add resource dependency information in nodesConnectedOut if the source node
402 //is a consolidation entity
403 if (isConsolidationEntity(consolidationEntityType.getSourceEntityType())) {
404 ConsolidationDataUtil.updateNodesConnectedOut(translateTo,
405 requirementAssignment.getNode(), consolidationEntityType.getSourceEntityType(),
406 requirementId, requirementAssignment);
412 private static boolean isConsolidationEntity(ConsolidationEntityType consolidationEntityType) {
413 return ConsolidationEntityType.getSupportedConsolidationEntities().contains(consolidationEntityType);
417 * Update nodes connected from this node in consolidation data.
419 * @param translateTo the translate to
420 * @param nodeTemplateId the node template id of the target node
421 * @param consolidationEntityType the entity type (compute or port)
422 * @param requirementId the requirement id
423 * @param requirementAssignment the requirement assignment
425 public static void updateNodesConnectedOut(TranslateTo translateTo,
426 String nodeTemplateId,
427 ConsolidationEntityType consolidationEntityType,
428 String requirementId,
429 RequirementAssignment requirementAssignment) {
430 EntityConsolidationData entityConsolidationData = null;
431 TranslationContext translationContext = translateTo.getContext();
432 ServiceTemplate serviceTemplate = translateTo.getServiceTemplate();
434 translationContext.updateRequirementAssignmentIdIndex(ToscaUtil.getServiceTemplateFileName
435 (translateTo.getServiceTemplate()), translateTo.getResourceId(), requirementId);
437 RequirementAssignmentData requirementAssignmentData = new RequirementAssignmentData(
438 requirementId, requirementAssignment);
440 if (consolidationEntityType == ConsolidationEntityType.COMPUTE) {
441 String nodeType = DataModelUtil.getNodeTemplate(serviceTemplate, translateTo
442 .getTranslatedId()).getType();
443 entityConsolidationData = getComputeTemplateConsolidationData(translationContext,
444 serviceTemplate, nodeType, translateTo.getTranslatedId());
445 } else if (consolidationEntityType == ConsolidationEntityType.PORT) {
446 entityConsolidationData = getPortTemplateConsolidationData(translationContext, serviceTemplate,
447 translateTo.getResourceId(), translateTo.getResource().getType(), translateTo
449 } else if (consolidationEntityType == ConsolidationEntityType.SUB_INTERFACE
450 && Objects.nonNull(serviceTemplate.getTopology_template().getNode_templates()
451 .get(translateTo.getTranslatedId()))) {
452 Optional<SubInterfaceTemplateConsolidationData> subInterfaceTemplateConsolidationData =
453 getSubInterfaceTemplateConsolidationData(translateTo, translateTo.getTranslatedId());
454 if (subInterfaceTemplateConsolidationData.isPresent()) {
455 entityConsolidationData = subInterfaceTemplateConsolidationData.get();
457 } else if (consolidationEntityType == ConsolidationEntityType.VFC_NESTED
458 || consolidationEntityType == ConsolidationEntityType.NESTED) {
459 entityConsolidationData =
460 getNestedTemplateConsolidationData(translationContext, serviceTemplate,
461 translateTo.getHeatFileName(),
462 translateTo.getTranslatedId());
465 if (Objects.nonNull(entityConsolidationData)) {
466 if (Objects.isNull(entityConsolidationData.getNodesConnectedOut())) {
467 entityConsolidationData.setNodesConnectedOut(new HashMap<>());
470 entityConsolidationData.getNodesConnectedOut()
471 .computeIfAbsent(nodeTemplateId, k -> new ArrayList<>())
472 .add(requirementAssignmentData);
477 * Update nodes connected from this node in consolidation data.
479 * @param translateTo the translate to
480 * @param sourceNodeTemplateId the node template id of the source node
481 * @param consolidationEntityType Entity type (compute or port)
482 * @param requirementId Requirement Id
483 * @param requirementAssignment the requirement assignment
485 public static void updateNodesConnectedIn(TranslateTo translateTo, String sourceNodeTemplateId,
486 ConsolidationEntityType consolidationEntityType,
487 String targetResourceId,
488 String requirementId,
489 RequirementAssignment requirementAssignment) {
490 EntityConsolidationData entityConsolidationData = null;
491 TranslationContext translationContext = translateTo.getContext();
492 ServiceTemplate serviceTemplate = translateTo.getServiceTemplate();
493 RequirementAssignmentData requirementAssignmentData = new RequirementAssignmentData(
494 requirementId, requirementAssignment);
495 String dependentNodeTemplateId = requirementAssignment.getNode();
496 if (consolidationEntityType == ConsolidationEntityType.COMPUTE) {
497 NodeTemplate computeNodeTemplate = DataModelUtil.getNodeTemplate(serviceTemplate,
498 dependentNodeTemplateId);
500 if (Objects.isNull(computeNodeTemplate)) {
501 Resource targetResource =
502 translateTo.getHeatOrchestrationTemplate().getResources().get(targetResourceId);
503 NameExtractor nodeTypeNameExtractor =
504 TranslationContext.getNameExtractorImpl(targetResource.getType());
506 nodeTypeNameExtractor.extractNodeTypeName(translateTo.getHeatOrchestrationTemplate()
507 .getResources().get(dependentNodeTemplateId),
508 dependentNodeTemplateId, dependentNodeTemplateId);
510 nodeType = computeNodeTemplate.getType();
513 entityConsolidationData = getComputeTemplateConsolidationData(translationContext,
514 serviceTemplate, nodeType, dependentNodeTemplateId);
515 } else if (consolidationEntityType == ConsolidationEntityType.PORT) {
516 entityConsolidationData = getPortTemplateConsolidationData(translationContext, serviceTemplate,
517 translateTo.getResourceId(), translateTo.getResource().getType(), dependentNodeTemplateId);
518 } else if (consolidationEntityType == ConsolidationEntityType.SUB_INTERFACE) {
519 Resource targetResource =
520 translateTo.getHeatOrchestrationTemplate().getResources().get(targetResourceId);
521 TranslateTo subInterfaceTo = new TranslateTo(translateTo.getHeatFileName(), serviceTemplate, translateTo
522 .getHeatOrchestrationTemplate(), targetResource, targetResourceId, null, translationContext);
523 Optional<SubInterfaceTemplateConsolidationData> subInterfaceTemplateConsolidationData =
524 getSubInterfaceTemplateConsolidationData(subInterfaceTo, targetResourceId);
525 if (subInterfaceTemplateConsolidationData.isPresent()) {
526 entityConsolidationData = subInterfaceTemplateConsolidationData.get();
528 } else if (consolidationEntityType == ConsolidationEntityType.NESTED
529 || consolidationEntityType == ConsolidationEntityType.VFC_NESTED) {
530 entityConsolidationData = getNestedTemplateConsolidationData(translationContext,
531 serviceTemplate, translateTo.getHeatFileName(), dependentNodeTemplateId);
534 if (entityConsolidationData != null) {
535 if (entityConsolidationData.getNodesConnectedIn() == null) {
536 entityConsolidationData.setNodesConnectedIn(new HashMap<>());
539 entityConsolidationData.getNodesConnectedIn()
540 .computeIfAbsent(sourceNodeTemplateId, k -> new ArrayList<>())
541 .add(requirementAssignmentData);
547 * Checks if the current HEAT resource if of type compute.
549 * @param heatOrchestrationTemplate the heat orchestration template
550 * @param resourceId the resource id
551 * @return true if the resource is of compute type and false otherwise
553 public static boolean isComputeResource(HeatOrchestrationTemplate heatOrchestrationTemplate,
555 String resourceType = heatOrchestrationTemplate.getResources().get(resourceId).getType();
556 Map<String, ImplementationConfiguration> supportedComputeResources = TranslationContext
557 .getSupportedConsolidationComputeResources();
558 if (supportedComputeResources.containsKey(resourceType)) {
559 return supportedComputeResources.get(resourceType).isEnable();
565 * Checks if the current HEAT resource if of type compute.
567 * @param resource the resource
568 * @return true if the resource is of compute type and false otherwise
570 public static boolean isComputeResource(Resource resource) {
571 String resourceType = resource.getType();
572 Map<String, ImplementationConfiguration> supportedComputeResources = TranslationContext
573 .getSupportedConsolidationComputeResources();
574 if (supportedComputeResources.containsKey(resourceType)) {
575 return supportedComputeResources.get(resourceType).isEnable();
581 * Checks if the current HEAT resource if of type port.
583 * @param heatOrchestrationTemplate the heat orchestration template
584 * @param resourceId the resource id
585 * @return true if the resource is of port type and false otherwise
587 public static boolean isPortResource(HeatOrchestrationTemplate heatOrchestrationTemplate,
589 String resourceType = heatOrchestrationTemplate.getResources().get(resourceId).getType();
590 Map<String, ImplementationConfiguration> supportedPortResources = TranslationContext
591 .getSupportedConsolidationPortResources();
592 if (supportedPortResources.containsKey(resourceType)) {
593 return supportedPortResources.get(resourceType).isEnable();
599 * Checks if the current HEAT resource if of type port.
601 * @param resource the resource
602 * @return true if the resource is of port type and false otherwise
604 public static boolean isPortResource(Resource resource) {
605 String resourceType = resource.getType();
606 Map<String, ImplementationConfiguration> supportedPortResources = TranslationContext
607 .getSupportedConsolidationPortResources();
608 if (supportedPortResources.containsKey(resourceType)) {
609 return supportedPortResources.get(resourceType).isEnable();
615 * Checks if the current HEAT resource if of type volume.
617 * @param heatOrchestrationTemplate the heat orchestration template
618 * @param resourceId the resource id
619 * @return true if the resource is of volume type and false otherwise
621 public static boolean isVolumeResource(HeatOrchestrationTemplate heatOrchestrationTemplate,
623 String resourceType = heatOrchestrationTemplate.getResources().get(resourceId).getType();
624 return resourceType.equals(HeatResourcesTypes.CINDER_VOLUME_RESOURCE_TYPE.getHeatResource())
625 || resourceType.equals(HeatResourcesTypes.CINDER_VOLUME_ATTACHMENT_RESOURCE_TYPE
630 * Checks if the current HEAT resource if of type volume.
632 * @param resource the resource
633 * @return true if the resource is of volume type and false otherwise
635 public static boolean isVolumeResource(Resource resource) {
636 String resourceType = resource.getType();
637 return resourceType.equals(HeatResourcesTypes.CINDER_VOLUME_RESOURCE_TYPE.getHeatResource())
638 || resourceType.equals(HeatResourcesTypes.CINDER_VOLUME_ATTACHMENT_RESOURCE_TYPE
645 * @param portNodeTemplateId the port node template id
646 * @return the port type
648 public static String getPortType(String portNodeTemplateId) {
650 if (StringUtils.isBlank(portNodeTemplateId)) {
651 return portNodeTemplateId;
654 String formattedName = portNodeTemplateId.replaceAll(DIGIT_REGEX + "$", "");
656 StringBuilder sb = new StringBuilder();
658 for (String token : formattedName.split(UNDERSCORE)) {
660 if (StringUtils.isNotBlank(token)) {
664 if (count != 2 || !token.matches(DIGIT_REGEX)) {
665 sb.append(token).append(UNDERSCORE);
669 return portNodeTemplateId.endsWith(UNDERSCORE) ? sb.toString() : sb.substring(0, sb.length() - 1);
673 * Update node template id for the nested node templates in the consolidation data.
675 * @param translateTo the translate to
677 public static void updateNestedNodeTemplateId(TranslateTo translateTo) {
678 TranslationContext context = translateTo.getContext();
679 ServiceTemplate serviceTemplate = translateTo.getServiceTemplate();
680 getNestedTemplateConsolidationData(
681 context, serviceTemplate, translateTo.getHeatFileName(), translateTo.getTranslatedId());
684 public static void removeSharedResource(ServiceTemplate serviceTemplate,
685 HeatOrchestrationTemplate heatOrchestrationTemplate,
686 TranslationContext context,
688 String contrailSharedResourceId,
689 String sharedTranslatedResourceId) {
690 if (ConsolidationDataUtil.isComputeResource(heatOrchestrationTemplate,
691 contrailSharedResourceId)) {
692 NodeTemplate nodeTemplate = DataModelUtil.getNodeTemplate(serviceTemplate,
693 sharedTranslatedResourceId);
694 EntityConsolidationData entityConsolidationData = getComputeTemplateConsolidationData(
695 context, serviceTemplate, nodeTemplate.getType(), sharedTranslatedResourceId);
696 List<GetAttrFuncData> getAttrFuncDataList = entityConsolidationData
697 .getOutputParametersGetAttrIn();
698 removeParamNameFromAttrFuncList(paramName, getAttrFuncDataList);
700 if (ConsolidationDataUtil.isPortResource(heatOrchestrationTemplate,
701 contrailSharedResourceId)) {
702 Resource resource = heatOrchestrationTemplate.getResources().get(contrailSharedResourceId);
703 EntityConsolidationData entityConsolidationData = getPortTemplateConsolidationData(context, serviceTemplate,
704 contrailSharedResourceId, resource.getType(), sharedTranslatedResourceId);
705 List<GetAttrFuncData> getAttrFuncDataList = entityConsolidationData
706 .getOutputParametersGetAttrIn();
707 removeParamNameFromAttrFuncList(paramName, getAttrFuncDataList);
711 private static void removeParamNameFromAttrFuncList(String paramName,
712 List<GetAttrFuncData> getAttrFuncDataList) {
713 Iterator<GetAttrFuncData> itr = getAttrFuncDataList.iterator();
714 while (itr.hasNext()) {
715 GetAttrFuncData getAttrFuncData = itr.next();
716 if (paramName.equals(getAttrFuncData.getFieldName())) {
722 public static void updateNodeGetAttributeIn(EntityConsolidationData entityConsolidationData,
723 String nodeTemplateId, String propertyName,
724 String attributeName) {
725 GetAttrFuncData getAttrFuncData = new GetAttrFuncData();
726 getAttrFuncData.setFieldName(propertyName);
727 getAttrFuncData.setAttributeName(attributeName);
728 entityConsolidationData.addNodesGetAttrIn(nodeTemplateId, getAttrFuncData);
732 public static void updateNodeGetAttributeOut(EntityConsolidationData entityConsolidationData,
733 String nodeTemplateId, String propertyName,
734 String attributeName) {
735 GetAttrFuncData getAttrFuncData = new GetAttrFuncData();
736 getAttrFuncData.setFieldName(propertyName);
737 getAttrFuncData.setAttributeName(attributeName);
738 entityConsolidationData.addNodesGetAttrOut(nodeTemplateId, getAttrFuncData);
742 public static void updateOutputGetAttributeInConsolidationData(EntityConsolidationData
743 entityConsolidationData,
744 String outputParameterName,
745 String attributeName) {
748 GetAttrFuncData getAttrFuncData = new GetAttrFuncData();
749 getAttrFuncData.setFieldName(outputParameterName);
750 getAttrFuncData.setAttributeName(attributeName);
751 entityConsolidationData.addOutputParamGetAttrIn(getAttrFuncData);
755 public static boolean isComputeReferenceToPortId(ComputeTemplateConsolidationData compute,
757 if (MapUtils.isEmpty(compute.getPorts())) {
760 for (List<String> portIdsPerType : compute.getPorts().values()) {
761 if (portIdsPerType.contains(portId)) {