74deb0487a2e0af35dcf4cd96b99b353dcf0a835
[sdc.git] /
1 package org.openecomp.sdc.translator.services.heattotosca;
2
3 import org.apache.commons.collections4.MapUtils;
4 import org.apache.commons.lang3.math.NumberUtils;
5 import org.openecomp.sdc.common.errors.CoreException;
6 import org.openecomp.sdc.common.errors.ErrorCode;
7 import org.openecomp.sdc.datatypes.configuration.ImplementationConfiguration;
8 import org.openecomp.sdc.heat.datatypes.model.HeatOrchestrationTemplate;
9 import org.openecomp.sdc.heat.datatypes.model.HeatResourcesTypes;
10 import org.openecomp.sdc.heat.datatypes.model.Resource;
11 import org.openecomp.sdc.logging.api.Logger;
12 import org.openecomp.sdc.logging.api.LoggerFactory;
13 import org.openecomp.sdc.tosca.datatypes.model.NodeTemplate;
14 import org.openecomp.sdc.tosca.datatypes.model.RequirementAssignment;
15 import org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate;
16 import org.openecomp.sdc.tosca.services.DataModelUtil;
17 import org.openecomp.sdc.tosca.services.ToscaUtil;
18 import org.openecomp.sdc.translator.datatypes.heattotosca.TranslationContext;
19 import org.openecomp.sdc.translator.datatypes.heattotosca.to.TranslateTo;
20 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.ComputeConsolidationData;
21 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.ComputeTemplateConsolidationData;
22 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.ConsolidationData;
23 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.EntityConsolidationData;
24 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.FileComputeConsolidationData;
25 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.FileNestedConsolidationData;
26 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.FilePortConsolidationData;
27 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.GetAttrFuncData;
28 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.NestedConsolidationData;
29 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.NestedTemplateConsolidationData;
30 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.PortConsolidationData;
31 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.PortTemplateConsolidationData;
32 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.RequirementAssignmentData;
33 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.TypeComputeConsolidationData;
34
35 import java.util.ArrayList;
36 import java.util.Collection;
37 import java.util.HashMap;
38 import java.util.Iterator;
39 import java.util.List;
40 import java.util.Map;
41 import java.util.Objects;
42
43
44 /**
45  * Utility class for consolidation data collection helper methods.
46  */
47 public class ConsolidationDataUtil {
48
49   protected static Logger logger = (Logger) LoggerFactory.getLogger(ConsolidationDataUtil.class);
50
51   /**
52    * Gets compute template consolidation data.
53    *
54    * @param context               the translation context
55    * @param serviceTemplate       the service template
56    * @param computeNodeType       the compute node type
57    * @param computeNodeTemplateId the compute node template id
58    * @return the compute template consolidation data
59    */
60   public static ComputeTemplateConsolidationData getComputeTemplateConsolidationData(
61       TranslationContext context,
62       ServiceTemplate serviceTemplate,
63       String computeNodeType,
64       String computeNodeTemplateId) {
65
66     ConsolidationData consolidationData = context.getConsolidationData();
67     String serviceTemplateFileName = ToscaUtil.getServiceTemplateFileName(serviceTemplate);
68
69     ComputeConsolidationData computeConsolidationData = consolidationData
70         .getComputeConsolidationData();
71
72     FileComputeConsolidationData fileComputeConsolidationData = computeConsolidationData
73         .getFileComputeConsolidationData(serviceTemplateFileName);
74
75     if (fileComputeConsolidationData == null) {
76       fileComputeConsolidationData = new FileComputeConsolidationData();
77       computeConsolidationData.setFileComputeConsolidationData(serviceTemplateFileName,
78           fileComputeConsolidationData);
79     }
80
81     TypeComputeConsolidationData typeComputeConsolidationData = fileComputeConsolidationData
82         .getTypeComputeConsolidationData(computeNodeType);
83     if (typeComputeConsolidationData == null) {
84       typeComputeConsolidationData = new TypeComputeConsolidationData();
85       fileComputeConsolidationData.setTypeComputeConsolidationData(computeNodeType,
86           typeComputeConsolidationData);
87     }
88
89     ComputeTemplateConsolidationData computeTemplateConsolidationData =
90         typeComputeConsolidationData.getComputeTemplateConsolidationData(computeNodeTemplateId);
91     if (computeTemplateConsolidationData == null) {
92       computeTemplateConsolidationData = new ComputeTemplateConsolidationData();
93       computeTemplateConsolidationData.setNodeTemplateId(computeNodeTemplateId);
94       typeComputeConsolidationData.setComputeTemplateConsolidationData(computeNodeTemplateId,
95           computeTemplateConsolidationData);
96     }
97
98     return computeTemplateConsolidationData;
99   }
100
101
102   /**
103    * Gets port template consolidation data.
104    *
105    * @param context            the context
106    * @param serviceTemplate    the service template
107    * @param portNodeTemplateId the port node template id
108    * @return the port template consolidation data
109    */
110   public static PortTemplateConsolidationData getPortTemplateConsolidationData(
111       TranslationContext context,
112       ServiceTemplate serviceTemplate,
113       String portNodeTemplateId) {
114
115     ConsolidationData consolidationData = context.getConsolidationData();
116     String serviceTemplateFileName = ToscaUtil.getServiceTemplateFileName(serviceTemplate);
117
118     PortConsolidationData portConsolidationData = consolidationData.getPortConsolidationData();
119
120     FilePortConsolidationData filePortConsolidationData = portConsolidationData
121         .getFilePortConsolidationData(serviceTemplateFileName);
122
123     if (filePortConsolidationData == null) {
124       filePortConsolidationData = new FilePortConsolidationData();
125       portConsolidationData.setFilePortConsolidationData(serviceTemplateFileName,
126           filePortConsolidationData);
127     }
128
129     PortTemplateConsolidationData portTemplateConsolidationData =
130         filePortConsolidationData.getPortTemplateConsolidationData(portNodeTemplateId);
131     if (portTemplateConsolidationData == null) {
132       portTemplateConsolidationData = new PortTemplateConsolidationData();
133       portTemplateConsolidationData.setNodeTemplateId(portNodeTemplateId);
134       filePortConsolidationData.setPortTemplateConsolidationData(portNodeTemplateId,
135           portTemplateConsolidationData);
136     }
137
138     return portTemplateConsolidationData;
139   }
140
141
142   /**
143    * Gets nested template consolidation data.
144    *
145    * @param context              the context
146    * @param serviceTemplate      the service template
147    * @param nestedHeatFileName
148    *@param nestedNodeTemplateId the nested node template id  @return the nested template consolidation data
149    */
150   public static NestedTemplateConsolidationData getNestedTemplateConsolidationData(
151       TranslationContext context,
152       ServiceTemplate serviceTemplate,
153       String nestedHeatFileName, String nestedNodeTemplateId) {
154
155     if(isNestedResourceIdOccuresInDifferentNestedFiles(context, nestedHeatFileName,
156         nestedNodeTemplateId)){
157       throw new CoreException((new ErrorCode.ErrorCodeBuilder())
158           .withMessage("Resource with id "
159               + nestedNodeTemplateId + " occures more than once in different addOn "
160               + "files").build());
161     }
162
163     ConsolidationData consolidationData = context.getConsolidationData();
164     String serviceTemplateFileName = ToscaUtil.getServiceTemplateFileName(serviceTemplate);
165
166     NestedConsolidationData nestedConsolidationData = consolidationData
167         .getNestedConsolidationData();
168
169     FileNestedConsolidationData fileNestedConsolidationData = nestedConsolidationData
170         .getFileNestedConsolidationData(serviceTemplateFileName);
171
172     if (fileNestedConsolidationData == null) {
173       fileNestedConsolidationData = new FileNestedConsolidationData();
174       nestedConsolidationData.setFileNestedConsolidationData(serviceTemplateFileName,
175           fileNestedConsolidationData);
176     }
177
178     NestedTemplateConsolidationData nestedTemplateConsolidationData =
179         fileNestedConsolidationData.getNestedTemplateConsolidationData(nestedNodeTemplateId);
180     if (nestedTemplateConsolidationData == null) {
181       nestedTemplateConsolidationData = new NestedTemplateConsolidationData();
182       nestedTemplateConsolidationData.setNodeTemplateId(nestedNodeTemplateId);
183       fileNestedConsolidationData.setNestedTemplateConsolidationData(nestedNodeTemplateId,
184           nestedTemplateConsolidationData);
185     }
186
187     return nestedTemplateConsolidationData;
188   }
189
190   private static boolean isNestedResourceIdOccuresInDifferentNestedFiles(TranslationContext context,
191                                                                          String nestedHeatFileName,
192                                                                          String nestedNodeTemplateId) {
193     return Objects.nonNull(nestedHeatFileName)
194         && context.getAllTranslatedResourceIdsFromDiffNestedFiles(nestedHeatFileName).contains(nestedNodeTemplateId);
195   }
196
197   /**
198    * Update group id information in consolidation data.
199    *
200    * @param entityConsolidationData Entity consolidation data (Port/Compute)
201    * @param translatedGroupId       Group id of which compute node is a part
202    */
203   public static void updateGroupIdInConsolidationData(EntityConsolidationData
204                                                           entityConsolidationData,
205                                                       String translatedGroupId) {
206     if (entityConsolidationData.getGroupIds() == null) {
207       entityConsolidationData.setGroupIds(new ArrayList<>());
208     }
209     entityConsolidationData.getGroupIds().add(translatedGroupId);
210   }
211
212   /**
213    * Update volume information in consolidation data.
214    *
215    * @param translateTo           {@link TranslateTo} object
216    * @param computeType           Local type of the compute node
217    * @param computeNodeTemplateId Node template id of the compute node
218    * @param requirementAssignment RequirementAssignment object
219    */
220   public static void updateComputeConsolidationDataVolumes(TranslateTo translateTo,
221                                                            String computeType,
222                                                            String computeNodeTemplateId,
223                                                            String requirementId,
224                                                            RequirementAssignment
225                                                                requirementAssignment) {
226     TranslationContext translationContext = translateTo.getContext();
227     ServiceTemplate serviceTemplate = translateTo.getServiceTemplate();
228     ComputeTemplateConsolidationData computeTemplateConsolidationData =
229         getComputeTemplateConsolidationData(translationContext, serviceTemplate, computeType,
230             computeNodeTemplateId);
231     computeTemplateConsolidationData.addVolume(requirementId, requirementAssignment);
232   }
233
234
235   /**
236    * Update port in consolidation data.
237    *
238    * @param translateTo        the translate to
239    * @param computeNodeType    the compute node type
240    * @param portNodeTemplateId the port node template id
241    */
242   public static void updatePortInConsolidationData(TranslateTo translateTo,
243                                                    String computeNodeType,
244                                                    String portNodeTemplateId) {
245     TranslationContext translationContext = translateTo.getContext();
246     ServiceTemplate serviceTemplate = translateTo.getServiceTemplate();
247     ComputeTemplateConsolidationData computeTemplateConsolidationData =
248         getComputeTemplateConsolidationData(translationContext, serviceTemplate, computeNodeType,
249             translateTo.getTranslatedId());
250     computeTemplateConsolidationData.addPort(getPortType(portNodeTemplateId), portNodeTemplateId);
251     // create port in consolidation data
252     getPortTemplateConsolidationData(translationContext, serviceTemplate, portNodeTemplateId);
253   }
254
255   /**
256    * Update nodes connected in and out for Depends on and connectivity in consolidation data.
257    *
258    * @param translateTo           the translate to
259    * @param targetResourceId      the target resource id
260    * @param nodeTemplateId        the source node template id
261    * @param requirementAssignment the requirement assignment
262    */
263   public static void updateNodesConnectedData(TranslateTo translateTo, String targetResourceId,
264                                               Resource targetResource, Resource sourceResource,
265                                               String nodeTemplateId, String requirementId,
266                                               RequirementAssignment requirementAssignment) {
267     ConsolidationEntityType consolidationEntityType = ConsolidationEntityType.OTHER;
268     HeatOrchestrationTemplate heatOrchestrationTemplate = translateTo
269         .getHeatOrchestrationTemplate();
270     TranslationContext translationContext = translateTo.getContext();
271
272     consolidationEntityType.setEntityType(heatOrchestrationTemplate, sourceResource,
273         targetResource, translateTo.getContext());
274     // Add resource dependency information in nodesConnectedIn if the target node
275     // is a consolidation entity
276     if (isConsolidationEntity(consolidationEntityType.getTargetEntityType())) {
277       ConsolidationDataUtil.updateNodesConnectedIn(translateTo,
278           nodeTemplateId, consolidationEntityType.getTargetEntityType(), targetResourceId,
279           requirementId, requirementAssignment);
280     }
281
282     //Add resource dependency information in nodesConnectedOut if the source node
283     //is a consolidation entity
284     if (isConsolidationEntity(consolidationEntityType.getSourceEntityType())) {
285       ConsolidationDataUtil.updateNodesConnectedOut(translateTo,
286           requirementAssignment.getNode(), consolidationEntityType.getSourceEntityType(),
287           requirementId, requirementAssignment);
288
289     }
290   }
291
292
293   private static boolean isConsolidationEntity(ConsolidationEntityType consolidationEntityType) {
294     return (consolidationEntityType == ConsolidationEntityType.COMPUTE
295         || consolidationEntityType == ConsolidationEntityType.PORT
296         || consolidationEntityType == ConsolidationEntityType.NESTED
297         || consolidationEntityType == ConsolidationEntityType.VFC_NESTED);
298   }
299
300   /**
301    * Update nodes connected from this node in consolidation data.
302    *
303    * @param translateTo             the translate to
304    * @param nodeTemplateId          the node template id of the target node
305    * @param consolidationEntityType the entity type (compute or port)
306    * @param requirementId           the requirement id
307    * @param requirementAssignment   the requirement assignment
308    */
309   public static void updateNodesConnectedOut(TranslateTo translateTo,
310                                              String nodeTemplateId,
311                                              ConsolidationEntityType consolidationEntityType,
312                                              String requirementId,
313                                              RequirementAssignment requirementAssignment) {
314     EntityConsolidationData entityConsolidationData = null;
315     TranslationContext translationContext = translateTo.getContext();
316     ServiceTemplate serviceTemplate = translateTo.getServiceTemplate();
317
318     translationContext.updateRequirementAssignmentIdIndex(ToscaUtil.getServiceTemplateFileName
319         (translateTo.getServiceTemplate()), translateTo.getResourceId(), requirementId);
320
321     RequirementAssignmentData requirementAssignmentData = new RequirementAssignmentData(
322         requirementId, requirementAssignment);
323
324     if (consolidationEntityType == ConsolidationEntityType.COMPUTE) {
325       String nodeType = DataModelUtil.getNodeTemplate(serviceTemplate, translateTo
326           .getTranslatedId()).getType();
327       entityConsolidationData = getComputeTemplateConsolidationData(translationContext,
328           serviceTemplate, nodeType, translateTo.getTranslatedId());
329     } else if (consolidationEntityType == ConsolidationEntityType.PORT) {
330       entityConsolidationData = getPortTemplateConsolidationData(translationContext,
331           serviceTemplate, translateTo.getTranslatedId());
332     } else if (consolidationEntityType == ConsolidationEntityType.VFC_NESTED
333         || consolidationEntityType == ConsolidationEntityType.NESTED) {
334       entityConsolidationData =
335           getNestedTemplateConsolidationData(translationContext, serviceTemplate,
336               null,
337               translateTo.getTranslatedId());
338     }
339
340     if(Objects.isNull(entityConsolidationData)){
341       return;
342     }
343
344     if (entityConsolidationData.getNodesConnectedOut() == null) {
345       entityConsolidationData.setNodesConnectedOut(new HashMap<>());
346     }
347
348     entityConsolidationData.getNodesConnectedOut()
349         .computeIfAbsent(nodeTemplateId, k -> new ArrayList<>())
350         .add(requirementAssignmentData);
351   }
352
353   /**
354    * Update nodes connected from this node in consolidation data.
355    *
356    * @param translateTo             the translate to
357    * @param sourceNodeTemplateId    the node template id of the source node
358    * @param consolidationEntityType Entity type (compute or port)
359    * @param requirementId           Requirement Id
360    * @param requirementAssignment   the requirement assignment
361    */
362   public static void updateNodesConnectedIn(TranslateTo translateTo, String sourceNodeTemplateId,
363                                             ConsolidationEntityType consolidationEntityType,
364                                             String targetResourceId,
365                                             String requirementId,
366                                             RequirementAssignment requirementAssignment) {
367     EntityConsolidationData entityConsolidationData = null;
368     TranslationContext translationContext = translateTo.getContext();
369     ServiceTemplate serviceTemplate = translateTo.getServiceTemplate();
370     RequirementAssignmentData requirementAssignmentData = new RequirementAssignmentData(
371         requirementId, requirementAssignment);
372     String dependentNodeTemplateId = requirementAssignment.getNode();
373     if (consolidationEntityType == ConsolidationEntityType.COMPUTE) {
374       NodeTemplate computeNodeTemplate = DataModelUtil.getNodeTemplate(serviceTemplate,
375           dependentNodeTemplateId);
376       String nodeType = null;
377       if (Objects.isNull(computeNodeTemplate)) {
378         Resource targetResource =
379             translateTo.getHeatOrchestrationTemplate().getResources().get(targetResourceId);
380         NameExtractor nodeTypeNameExtractor =
381             translateTo.getContext().getNameExtractorImpl(targetResource.getType());
382         nodeType =
383             nodeTypeNameExtractor.extractNodeTypeName(translateTo.getHeatOrchestrationTemplate()
384                     .getResources().get(dependentNodeTemplateId),
385                 dependentNodeTemplateId, dependentNodeTemplateId);
386       } else {
387         nodeType = computeNodeTemplate.getType();
388       }
389
390       entityConsolidationData = getComputeTemplateConsolidationData(translationContext,
391           serviceTemplate, nodeType, dependentNodeTemplateId);
392     } else if (consolidationEntityType == ConsolidationEntityType.PORT) {
393       entityConsolidationData = getPortTemplateConsolidationData(translationContext,
394           serviceTemplate, dependentNodeTemplateId);
395     } else if (consolidationEntityType == ConsolidationEntityType.NESTED
396         || consolidationEntityType == ConsolidationEntityType.VFC_NESTED) {
397       entityConsolidationData = getNestedTemplateConsolidationData(translationContext,
398           serviceTemplate, translateTo.getHeatFileName(), dependentNodeTemplateId);
399     }
400
401     if (entityConsolidationData.getNodesConnectedIn() == null) {
402       entityConsolidationData.setNodesConnectedIn(new HashMap<>());
403     }
404
405     entityConsolidationData.getNodesConnectedIn()
406         .computeIfAbsent(sourceNodeTemplateId, k -> new ArrayList<>())
407         .add(requirementAssignmentData);
408
409   }
410
411   /**
412    * Checks if the current HEAT resource if of type compute.
413    *
414    * @param heatOrchestrationTemplate the heat orchestration template
415    * @param resourceId                the resource id
416    * @return true if the resource is of compute type and false otherwise
417    */
418   public static boolean isComputeResource(HeatOrchestrationTemplate heatOrchestrationTemplate,
419                                           String resourceId) {
420     String resourceType = heatOrchestrationTemplate.getResources().get(resourceId).getType();
421     Map<String, ImplementationConfiguration> supportedComputeResources = TranslationContext
422         .getSupportedConsolidationComputeResources();
423     if (supportedComputeResources.containsKey(resourceType)) {
424       if (supportedComputeResources.get(resourceType).isEnable()) {
425         return true;
426       }
427       return false;
428     }
429     return false;
430   }
431
432   /**
433    * Checks if the current HEAT resource if of type compute.
434    *
435    * @param resource                the resource
436    * @return true if the resource is of compute type and false otherwise
437    */
438   public static boolean isComputeResource(Resource resource) {
439     String resourceType = resource.getType();
440     Map<String, ImplementationConfiguration> supportedComputeResources = TranslationContext
441         .getSupportedConsolidationComputeResources();
442     if (supportedComputeResources.containsKey(resourceType)) {
443       if (supportedComputeResources.get(resourceType).isEnable()) {
444         return true;
445       }
446       return false;
447     }
448     return false;
449   }
450
451   /**
452    * Checks if the current HEAT resource if of type port.
453    *
454    * @param heatOrchestrationTemplate the heat orchestration template
455    * @param resourceId                the resource id
456    * @return true if the resource is of port type and false otherwise
457    */
458   public static boolean isPortResource(HeatOrchestrationTemplate heatOrchestrationTemplate,
459                                        String resourceId) {
460     String resourceType = heatOrchestrationTemplate.getResources().get(resourceId).getType();
461     Map<String, ImplementationConfiguration> supportedPortResources = TranslationContext
462         .getSupportedConsolidationPortResources();
463     if (supportedPortResources.containsKey(resourceType)) {
464       if (supportedPortResources.get(resourceType).isEnable()) {
465         return true;
466       }
467       return false;
468     }
469     return false;
470   }
471
472   /**
473    * Checks if the current HEAT resource if of type port.
474    *
475    * @param resource                the resource
476    * @return true if the resource is of port type and false otherwise
477    */
478   public static boolean isPortResource(Resource resource) {
479     String resourceType = resource.getType();
480     Map<String, ImplementationConfiguration> supportedPortResources = TranslationContext
481         .getSupportedConsolidationPortResources();
482     if (supportedPortResources.containsKey(resourceType)) {
483       if (supportedPortResources.get(resourceType).isEnable()) {
484         return true;
485       }
486       return false;
487     }
488     return false;
489   }
490
491   /**
492    * Checks if the current HEAT resource if of type volume.
493    *
494    * @param heatOrchestrationTemplate the heat orchestration template
495    * @param resourceId                the resource id
496    * @return true if the resource is of volume type and false otherwise
497    */
498   public static boolean isVolumeResource(HeatOrchestrationTemplate heatOrchestrationTemplate,
499                                          String resourceId) {
500     String resourceType = heatOrchestrationTemplate.getResources().get(resourceId).getType();
501     return (resourceType.equals(HeatResourcesTypes.CINDER_VOLUME_RESOURCE_TYPE.getHeatResource())
502         || resourceType.equals(HeatResourcesTypes.CINDER_VOLUME_ATTACHMENT_RESOURCE_TYPE
503         .getHeatResource()));
504   }
505
506   /**
507    * Checks if the current HEAT resource if of type volume.
508    *
509    * @param resource                the resource
510    * @return true if the resource is of volume type and false otherwise
511    */
512   public static boolean isVolumeResource(Resource resource) {
513     String resourceType = resource.getType();
514     return (resourceType.equals(HeatResourcesTypes.CINDER_VOLUME_RESOURCE_TYPE.getHeatResource())
515         || resourceType.equals(HeatResourcesTypes.CINDER_VOLUME_ATTACHMENT_RESOURCE_TYPE
516         .getHeatResource()));
517   }
518
519   /**
520    * Gets port type.
521    *
522    * @param portNodeTemplateId the port node template id
523    * @return the port type
524    */
525   public static String getPortType(String portNodeTemplateId) {
526     String[] portSplitArr = portNodeTemplateId.split("(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)");
527     String finalValue = "";
528     if (NumberUtils.isNumber(portSplitArr[portSplitArr.length - 1])) {
529       for (String id : portSplitArr) {
530         finalValue = finalValue + id;
531       }
532       while (finalValue.length() > 0) {
533         if (Character.isLetter(finalValue.charAt(finalValue.length() - 1))) {
534           break;
535         }
536         finalValue = finalValue.substring(0, finalValue.length() - 1);
537       }
538     } else {
539       for (String id : portSplitArr) {
540         if (!NumberUtils.isNumber(id)) {
541           finalValue = finalValue + id;
542         }
543       }
544     }
545     return finalValue;
546   }
547
548   /**
549    * Update node template id for the nested node templates in the consolidation data.
550    *
551    * @param translateTo the translate to
552    */
553   public static void updateNestedNodeTemplateId(TranslateTo translateTo) {
554     TranslationContext context = translateTo.getContext();
555     ServiceTemplate serviceTemplate = translateTo.getServiceTemplate();
556     getNestedTemplateConsolidationData(
557         context, serviceTemplate, translateTo.getHeatFileName(), translateTo.getTranslatedId());
558   }
559
560   public static void removeSharedResource(ServiceTemplate serviceTemplate,
561                                           HeatOrchestrationTemplate heatOrchestrationTemplate,
562                                           TranslationContext context,
563                                           String paramName,
564                                           String contrailSharedResourceId,
565                                           String sharedTranslatedResourceId) {
566     if (ConsolidationDataUtil.isComputeResource(heatOrchestrationTemplate,
567         contrailSharedResourceId)) {
568       NodeTemplate nodeTemplate = DataModelUtil.getNodeTemplate(serviceTemplate,
569           sharedTranslatedResourceId);
570       EntityConsolidationData entityConsolidationData = getComputeTemplateConsolidationData(
571           context, serviceTemplate, nodeTemplate.getType(), sharedTranslatedResourceId);
572       List<GetAttrFuncData> getAttrFuncDataList = entityConsolidationData
573           .getOutputParametersGetAttrIn();
574       removeParamNameFromAttrFuncList(paramName, getAttrFuncDataList);
575     }
576     if (ConsolidationDataUtil.isPortResource(heatOrchestrationTemplate,
577         contrailSharedResourceId)) {
578       NodeTemplate nodeTemplate = DataModelUtil.getNodeTemplate(serviceTemplate,
579           sharedTranslatedResourceId);
580       EntityConsolidationData entityConsolidationData = getPortTemplateConsolidationData(context,
581           serviceTemplate, sharedTranslatedResourceId);
582       List<GetAttrFuncData> getAttrFuncDataList = entityConsolidationData
583           .getOutputParametersGetAttrIn();
584       removeParamNameFromAttrFuncList(paramName, getAttrFuncDataList);
585     }
586   }
587
588   private static void removeParamNameFromAttrFuncList(String paramName,
589                                                       List<GetAttrFuncData> getAttrFuncDataList) {
590     Iterator<GetAttrFuncData> itr = getAttrFuncDataList.iterator();
591     while (itr.hasNext()) {
592       GetAttrFuncData getAttrFuncData = itr.next();
593       if (paramName.equals(getAttrFuncData.getFieldName())) {
594         itr.remove();
595       }
596     }
597   }
598
599   public static void updateNodeGetAttributeIn(EntityConsolidationData entityConsolidationData,
600                                               String nodeTemplateId, String propertyName,
601                                               String attributeName) {
602     GetAttrFuncData getAttrFuncData = new GetAttrFuncData();
603     getAttrFuncData.setFieldName(propertyName);
604     getAttrFuncData.setAttributeName(attributeName);
605     entityConsolidationData.addNodesGetAttrIn(nodeTemplateId, getAttrFuncData);
606
607   }
608
609   public static void updateNodeGetAttributeOut(EntityConsolidationData entityConsolidationData,
610                                                String nodeTemplateId, String propertyName,
611                                                String attributeName) {
612     GetAttrFuncData getAttrFuncData = new GetAttrFuncData();
613     getAttrFuncData.setFieldName(propertyName);
614     getAttrFuncData.setAttributeName(attributeName);
615     entityConsolidationData.addNodesGetAttrOut(nodeTemplateId, getAttrFuncData);
616
617   }
618
619   public static void updateOutputGetAttributeInConsolidationData(EntityConsolidationData
620                                                                      entityConsolidationData,
621                                                                  String outputParameterName,
622                                                                  String attributeName) {
623
624
625     GetAttrFuncData getAttrFuncData = new GetAttrFuncData();
626     getAttrFuncData.setFieldName(outputParameterName);
627     getAttrFuncData.setAttributeName(attributeName);
628     entityConsolidationData.addOutputParamGetAttrIn(getAttrFuncData);
629
630   }
631
632   public static boolean isComputeReferenceToPortId(ComputeTemplateConsolidationData compute,
633                                                    String portId) {
634     if (MapUtils.isEmpty(compute.getPorts())) {
635       return false;
636     }
637     for (List<String> portIdsPerType : compute.getPorts().values()) {
638       if (portIdsPerType.contains(portId)) {
639         return true;
640       }
641     }
642     return false;
643   }
644
645 }