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