1 package org.openecomp.sdc.translator.services.heattotosca;
 
   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 import org.openecomp.sdc.translator.services.heattotosca.errors.DuplicateResourceIdsInDifferentFilesErrorBuilder;
 
  36 import java.util.ArrayList;
 
  37 import java.util.Collection;
 
  38 import java.util.HashMap;
 
  39 import java.util.Iterator;
 
  40 import java.util.List;
 
  42 import java.util.Objects;
 
  46  * Utility class for consolidation data collection helper methods.
 
  48 public class ConsolidationDataUtil {
 
  50   protected static Logger logger = (Logger) LoggerFactory.getLogger(ConsolidationDataUtil.class);
 
  53    * Gets compute template consolidation data.
 
  55    * @param context               the translation context
 
  56    * @param serviceTemplate       the service template
 
  57    * @param computeNodeType       the compute node type
 
  58    * @param computeNodeTemplateId the compute node template id
 
  59    * @return the compute template consolidation data
 
  61   public static ComputeTemplateConsolidationData getComputeTemplateConsolidationData(
 
  62       TranslationContext context,
 
  63       ServiceTemplate serviceTemplate,
 
  64       String computeNodeType,
 
  65       String computeNodeTemplateId) {
 
  67     ConsolidationData consolidationData = context.getConsolidationData();
 
  68     String serviceTemplateFileName = ToscaUtil.getServiceTemplateFileName(serviceTemplate);
 
  70     ComputeConsolidationData computeConsolidationData = consolidationData
 
  71         .getComputeConsolidationData();
 
  73     FileComputeConsolidationData fileComputeConsolidationData = computeConsolidationData
 
  74         .getFileComputeConsolidationData(serviceTemplateFileName);
 
  76     if (fileComputeConsolidationData == null) {
 
  77       fileComputeConsolidationData = new FileComputeConsolidationData();
 
  78       computeConsolidationData.setFileComputeConsolidationData(serviceTemplateFileName,
 
  79           fileComputeConsolidationData);
 
  82     TypeComputeConsolidationData typeComputeConsolidationData = fileComputeConsolidationData
 
  83         .getTypeComputeConsolidationData(computeNodeType);
 
  84     if (typeComputeConsolidationData == null) {
 
  85       typeComputeConsolidationData = new TypeComputeConsolidationData();
 
  86       fileComputeConsolidationData.setTypeComputeConsolidationData(computeNodeType,
 
  87           typeComputeConsolidationData);
 
  90     ComputeTemplateConsolidationData computeTemplateConsolidationData =
 
  91         typeComputeConsolidationData.getComputeTemplateConsolidationData(computeNodeTemplateId);
 
  92     if (computeTemplateConsolidationData == null) {
 
  93       computeTemplateConsolidationData = new ComputeTemplateConsolidationData();
 
  94       computeTemplateConsolidationData.setNodeTemplateId(computeNodeTemplateId);
 
  95       typeComputeConsolidationData.setComputeTemplateConsolidationData(computeNodeTemplateId,
 
  96           computeTemplateConsolidationData);
 
  99     return computeTemplateConsolidationData;
 
 104    * Gets port template consolidation data.
 
 106    * @param context            the context
 
 107    * @param serviceTemplate    the service template
 
 108    * @param portNodeTemplateId the port node template id
 
 109    * @return the port template consolidation data
 
 111   public static PortTemplateConsolidationData getPortTemplateConsolidationData(
 
 112       TranslationContext context,
 
 113       ServiceTemplate serviceTemplate,
 
 114       String portNodeTemplateId) {
 
 116     ConsolidationData consolidationData = context.getConsolidationData();
 
 117     String serviceTemplateFileName = ToscaUtil.getServiceTemplateFileName(serviceTemplate);
 
 119     PortConsolidationData portConsolidationData = consolidationData.getPortConsolidationData();
 
 121     FilePortConsolidationData filePortConsolidationData = portConsolidationData
 
 122         .getFilePortConsolidationData(serviceTemplateFileName);
 
 124     if (filePortConsolidationData == null) {
 
 125       filePortConsolidationData = new FilePortConsolidationData();
 
 126       portConsolidationData.setFilePortConsolidationData(serviceTemplateFileName,
 
 127           filePortConsolidationData);
 
 130     PortTemplateConsolidationData portTemplateConsolidationData =
 
 131         filePortConsolidationData.getPortTemplateConsolidationData(portNodeTemplateId);
 
 132     if (portTemplateConsolidationData == null) {
 
 133       portTemplateConsolidationData = new PortTemplateConsolidationData();
 
 134       portTemplateConsolidationData.setNodeTemplateId(portNodeTemplateId);
 
 135       filePortConsolidationData.setPortTemplateConsolidationData(portNodeTemplateId,
 
 136           portTemplateConsolidationData);
 
 139     return portTemplateConsolidationData;
 
 144    * Gets nested template consolidation data.
 
 146    * @param context              the context
 
 147    * @param serviceTemplate      the service template
 
 148    * @param nestedHeatFileName
 
 149    *@param nestedNodeTemplateId the nested node template id  @return the nested template consolidation data
 
 151   public static NestedTemplateConsolidationData getNestedTemplateConsolidationData(
 
 152       TranslationContext context,
 
 153       ServiceTemplate serviceTemplate,
 
 154       String nestedHeatFileName, String nestedNodeTemplateId) {
 
 156     if(isNestedResourceIdOccuresInDifferentNestedFiles(context, nestedHeatFileName,
 
 157         nestedNodeTemplateId)){
 
 158       throw new CoreException(new DuplicateResourceIdsInDifferentFilesErrorBuilder(nestedNodeTemplateId).build());
 
 161     ConsolidationData consolidationData = context.getConsolidationData();
 
 162     String serviceTemplateFileName = ToscaUtil.getServiceTemplateFileName(serviceTemplate);
 
 164     NestedConsolidationData nestedConsolidationData = consolidationData
 
 165         .getNestedConsolidationData();
 
 167     FileNestedConsolidationData fileNestedConsolidationData = nestedConsolidationData
 
 168         .getFileNestedConsolidationData(serviceTemplateFileName);
 
 170     if (fileNestedConsolidationData == null) {
 
 171       fileNestedConsolidationData = new FileNestedConsolidationData();
 
 172       nestedConsolidationData.setFileNestedConsolidationData(serviceTemplateFileName,
 
 173           fileNestedConsolidationData);
 
 176     NestedTemplateConsolidationData nestedTemplateConsolidationData =
 
 177         fileNestedConsolidationData.getNestedTemplateConsolidationData(nestedNodeTemplateId);
 
 178     if (nestedTemplateConsolidationData == null) {
 
 179       nestedTemplateConsolidationData = new NestedTemplateConsolidationData();
 
 180       nestedTemplateConsolidationData.setNodeTemplateId(nestedNodeTemplateId);
 
 181       fileNestedConsolidationData.setNestedTemplateConsolidationData(nestedNodeTemplateId,
 
 182           nestedTemplateConsolidationData);
 
 185     return nestedTemplateConsolidationData;
 
 188   private static boolean isNestedResourceIdOccuresInDifferentNestedFiles(TranslationContext context,
 
 189                                                                          String nestedHeatFileName,
 
 190                                                                          String nestedNodeTemplateId) {
 
 191     return Objects.nonNull(nestedHeatFileName)
 
 192         && context.getAllTranslatedResourceIdsFromDiffNestedFiles(nestedHeatFileName).contains(nestedNodeTemplateId);
 
 196    * Update group id information in consolidation data.
 
 198    * @param entityConsolidationData Entity consolidation data (Port/Compute)
 
 199    * @param translatedGroupId       Group id of which compute node is a part
 
 201   public static void updateGroupIdInConsolidationData(EntityConsolidationData
 
 202                                                           entityConsolidationData,
 
 203                                                       String translatedGroupId) {
 
 204     if (entityConsolidationData.getGroupIds() == null) {
 
 205       entityConsolidationData.setGroupIds(new ArrayList<>());
 
 207     entityConsolidationData.getGroupIds().add(translatedGroupId);
 
 211    * Update volume information in consolidation data.
 
 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
 
 218   public static void updateComputeConsolidationDataVolumes(TranslateTo translateTo,
 
 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);
 
 234    * Update port in consolidation data.
 
 236    * @param translateTo        the translate to
 
 237    * @param computeNodeType    the compute node type
 
 238    * @param portNodeTemplateId the port node template id
 
 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);
 
 254    * Update nodes connected in and out for Depends on and connectivity in consolidation data.
 
 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
 
 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();
 
 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);
 
 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);
 
 291   private static boolean isConsolidationEntity(ConsolidationEntityType consolidationEntityType) {
 
 292     return (consolidationEntityType == ConsolidationEntityType.COMPUTE
 
 293         || consolidationEntityType == ConsolidationEntityType.PORT
 
 294         || consolidationEntityType == ConsolidationEntityType.NESTED
 
 295         || consolidationEntityType == ConsolidationEntityType.VFC_NESTED);
 
 299    * Update nodes connected from this node in consolidation data.
 
 301    * @param translateTo             the translate to
 
 302    * @param nodeTemplateId          the node template id of the target node
 
 303    * @param consolidationEntityType the entity type (compute or port)
 
 304    * @param requirementId           the requirement id
 
 305    * @param requirementAssignment   the requirement assignment
 
 307   public static void updateNodesConnectedOut(TranslateTo translateTo,
 
 308                                              String nodeTemplateId,
 
 309                                              ConsolidationEntityType consolidationEntityType,
 
 310                                              String requirementId,
 
 311                                              RequirementAssignment requirementAssignment) {
 
 312     EntityConsolidationData entityConsolidationData = null;
 
 313     TranslationContext translationContext = translateTo.getContext();
 
 314     ServiceTemplate serviceTemplate = translateTo.getServiceTemplate();
 
 316     translationContext.updateRequirementAssignmentIdIndex(ToscaUtil.getServiceTemplateFileName
 
 317         (translateTo.getServiceTemplate()), translateTo.getResourceId(), requirementId);
 
 319     RequirementAssignmentData requirementAssignmentData = new RequirementAssignmentData(
 
 320         requirementId, requirementAssignment);
 
 322     if (consolidationEntityType == ConsolidationEntityType.COMPUTE) {
 
 323       String nodeType = DataModelUtil.getNodeTemplate(serviceTemplate, translateTo
 
 324           .getTranslatedId()).getType();
 
 325       entityConsolidationData = getComputeTemplateConsolidationData(translationContext,
 
 326           serviceTemplate, nodeType, translateTo.getTranslatedId());
 
 327     } else if (consolidationEntityType == ConsolidationEntityType.PORT) {
 
 328       entityConsolidationData = getPortTemplateConsolidationData(translationContext,
 
 329           serviceTemplate, translateTo.getTranslatedId());
 
 330     } else if (consolidationEntityType == ConsolidationEntityType.VFC_NESTED
 
 331         || consolidationEntityType == ConsolidationEntityType.NESTED) {
 
 332       entityConsolidationData =
 
 333           getNestedTemplateConsolidationData(translationContext, serviceTemplate,
 
 335               translateTo.getTranslatedId());
 
 338     if(Objects.isNull(entityConsolidationData)){
 
 341     if (entityConsolidationData != null) {
 
 342       if (entityConsolidationData.getNodesConnectedOut() == null) {
 
 343         entityConsolidationData.setNodesConnectedOut(new HashMap<>());
 
 346       entityConsolidationData.getNodesConnectedOut()
 
 347           .computeIfAbsent(nodeTemplateId, k -> new ArrayList<>())
 
 348           .add(requirementAssignmentData);
 
 353    * Update nodes connected from this node in consolidation data.
 
 355    * @param translateTo             the translate to
 
 356    * @param sourceNodeTemplateId    the node template id of the source node
 
 357    * @param consolidationEntityType Entity type (compute or port)
 
 358    * @param requirementId           Requirement Id
 
 359    * @param requirementAssignment   the requirement assignment
 
 361   public static void updateNodesConnectedIn(TranslateTo translateTo, String sourceNodeTemplateId,
 
 362                                             ConsolidationEntityType consolidationEntityType,
 
 363                                             String targetResourceId,
 
 364                                             String requirementId,
 
 365                                             RequirementAssignment requirementAssignment) {
 
 366     EntityConsolidationData entityConsolidationData = null;
 
 367     TranslationContext translationContext = translateTo.getContext();
 
 368     ServiceTemplate serviceTemplate = translateTo.getServiceTemplate();
 
 369     RequirementAssignmentData requirementAssignmentData = new RequirementAssignmentData(
 
 370         requirementId, requirementAssignment);
 
 371     String dependentNodeTemplateId = requirementAssignment.getNode();
 
 372     if (consolidationEntityType == ConsolidationEntityType.COMPUTE) {
 
 373       NodeTemplate computeNodeTemplate = DataModelUtil.getNodeTemplate(serviceTemplate,
 
 374           dependentNodeTemplateId);
 
 375       String nodeType = null;
 
 376       if (Objects.isNull(computeNodeTemplate)) {
 
 377         Resource targetResource =
 
 378             translateTo.getHeatOrchestrationTemplate().getResources().get(targetResourceId);
 
 379         NameExtractor nodeTypeNameExtractor =
 
 380             translateTo.getContext().getNameExtractorImpl(targetResource.getType());
 
 382             nodeTypeNameExtractor.extractNodeTypeName(translateTo.getHeatOrchestrationTemplate()
 
 383                     .getResources().get(dependentNodeTemplateId),
 
 384                 dependentNodeTemplateId, dependentNodeTemplateId);
 
 386         nodeType = computeNodeTemplate.getType();
 
 389       entityConsolidationData = getComputeTemplateConsolidationData(translationContext,
 
 390           serviceTemplate, nodeType, dependentNodeTemplateId);
 
 391     } else if (consolidationEntityType == ConsolidationEntityType.PORT) {
 
 392       entityConsolidationData = getPortTemplateConsolidationData(translationContext,
 
 393           serviceTemplate, dependentNodeTemplateId);
 
 394     } else if (consolidationEntityType == ConsolidationEntityType.NESTED
 
 395         || consolidationEntityType == ConsolidationEntityType.VFC_NESTED) {
 
 396       entityConsolidationData = getNestedTemplateConsolidationData(translationContext,
 
 397           serviceTemplate, translateTo.getHeatFileName(), dependentNodeTemplateId);
 
 400     if (entityConsolidationData != null) {
 
 401       if (entityConsolidationData.getNodesConnectedIn() == null) {
 
 402         entityConsolidationData.setNodesConnectedIn(new HashMap<>());
 
 405       entityConsolidationData.getNodesConnectedIn()
 
 406           .computeIfAbsent(sourceNodeTemplateId, k -> new ArrayList<>())
 
 407           .add(requirementAssignmentData);
 
 413    * Checks if the current HEAT resource if of type compute.
 
 415    * @param heatOrchestrationTemplate the heat orchestration template
 
 416    * @param resourceId                the resource id
 
 417    * @return true if the resource is of compute type and false otherwise
 
 419   public static boolean isComputeResource(HeatOrchestrationTemplate heatOrchestrationTemplate,
 
 421     String resourceType = heatOrchestrationTemplate.getResources().get(resourceId).getType();
 
 422     Map<String, ImplementationConfiguration> supportedComputeResources = TranslationContext
 
 423         .getSupportedConsolidationComputeResources();
 
 424     if (supportedComputeResources.containsKey(resourceType)) {
 
 425       if (supportedComputeResources.get(resourceType).isEnable()) {
 
 434    * Checks if the current HEAT resource if of type compute.
 
 436    * @param resource                the resource
 
 437    * @return true if the resource is of compute type and false otherwise
 
 439   public static boolean isComputeResource(Resource resource) {
 
 440     String resourceType = resource.getType();
 
 441     Map<String, ImplementationConfiguration> supportedComputeResources = TranslationContext
 
 442         .getSupportedConsolidationComputeResources();
 
 443     if (supportedComputeResources.containsKey(resourceType)) {
 
 444       if (supportedComputeResources.get(resourceType).isEnable()) {
 
 453    * Checks if the current HEAT resource if of type port.
 
 455    * @param heatOrchestrationTemplate the heat orchestration template
 
 456    * @param resourceId                the resource id
 
 457    * @return true if the resource is of port type and false otherwise
 
 459   public static boolean isPortResource(HeatOrchestrationTemplate heatOrchestrationTemplate,
 
 461     String resourceType = heatOrchestrationTemplate.getResources().get(resourceId).getType();
 
 462     Map<String, ImplementationConfiguration> supportedPortResources = TranslationContext
 
 463         .getSupportedConsolidationPortResources();
 
 464     if (supportedPortResources.containsKey(resourceType)) {
 
 465       if (supportedPortResources.get(resourceType).isEnable()) {
 
 474    * Checks if the current HEAT resource if of type port.
 
 476    * @param resource                the resource
 
 477    * @return true if the resource is of port type and false otherwise
 
 479   public static boolean isPortResource(Resource resource) {
 
 480     String resourceType = resource.getType();
 
 481     Map<String, ImplementationConfiguration> supportedPortResources = TranslationContext
 
 482         .getSupportedConsolidationPortResources();
 
 483     if (supportedPortResources.containsKey(resourceType)) {
 
 484       if (supportedPortResources.get(resourceType).isEnable()) {
 
 493    * Checks if the current HEAT resource if of type volume.
 
 495    * @param heatOrchestrationTemplate the heat orchestration template
 
 496    * @param resourceId                the resource id
 
 497    * @return true if the resource is of volume type and false otherwise
 
 499   public static boolean isVolumeResource(HeatOrchestrationTemplate heatOrchestrationTemplate,
 
 501     String resourceType = heatOrchestrationTemplate.getResources().get(resourceId).getType();
 
 502     return (resourceType.equals(HeatResourcesTypes.CINDER_VOLUME_RESOURCE_TYPE.getHeatResource())
 
 503         || resourceType.equals(HeatResourcesTypes.CINDER_VOLUME_ATTACHMENT_RESOURCE_TYPE
 
 504         .getHeatResource()));
 
 508    * Checks if the current HEAT resource if of type volume.
 
 510    * @param resource                the resource
 
 511    * @return true if the resource is of volume type and false otherwise
 
 513   public static boolean isVolumeResource(Resource resource) {
 
 514     String resourceType = resource.getType();
 
 515     return (resourceType.equals(HeatResourcesTypes.CINDER_VOLUME_RESOURCE_TYPE.getHeatResource())
 
 516         || resourceType.equals(HeatResourcesTypes.CINDER_VOLUME_ATTACHMENT_RESOURCE_TYPE
 
 517         .getHeatResource()));
 
 523    * @param portNodeTemplateId the port node template id
 
 524    * @return the port type
 
 526   public static String getPortType(String portNodeTemplateId) {
 
 527     String[] portSplitArr = portNodeTemplateId.split("(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)");
 
 528     String finalValue = "";
 
 529     if (NumberUtils.isNumber(portSplitArr[portSplitArr.length - 1])) {
 
 530       for (String id : portSplitArr) {
 
 531         finalValue = finalValue + id;
 
 533       while (finalValue.length() > 0) {
 
 534         if (Character.isLetter(finalValue.charAt(finalValue.length() - 1))) {
 
 537         finalValue = finalValue.substring(0, finalValue.length() - 1);
 
 540       for (String id : portSplitArr) {
 
 541         if (!NumberUtils.isNumber(id)) {
 
 542           finalValue = finalValue + id;
 
 550    * Update node template id for the nested node templates in the consolidation data.
 
 552    * @param translateTo the translate to
 
 554   public static void updateNestedNodeTemplateId(TranslateTo translateTo) {
 
 555     TranslationContext context = translateTo.getContext();
 
 556     ServiceTemplate serviceTemplate = translateTo.getServiceTemplate();
 
 557     getNestedTemplateConsolidationData(
 
 558         context, serviceTemplate, translateTo.getHeatFileName(), translateTo.getTranslatedId());
 
 561   public static void removeSharedResource(ServiceTemplate serviceTemplate,
 
 562                                           HeatOrchestrationTemplate heatOrchestrationTemplate,
 
 563                                           TranslationContext context,
 
 565                                           String contrailSharedResourceId,
 
 566                                           String sharedTranslatedResourceId) {
 
 567     if (ConsolidationDataUtil.isComputeResource(heatOrchestrationTemplate,
 
 568         contrailSharedResourceId)) {
 
 569       NodeTemplate nodeTemplate = DataModelUtil.getNodeTemplate(serviceTemplate,
 
 570           sharedTranslatedResourceId);
 
 571       EntityConsolidationData entityConsolidationData = getComputeTemplateConsolidationData(
 
 572           context, serviceTemplate, nodeTemplate.getType(), sharedTranslatedResourceId);
 
 573       List<GetAttrFuncData> getAttrFuncDataList = entityConsolidationData
 
 574           .getOutputParametersGetAttrIn();
 
 575       removeParamNameFromAttrFuncList(paramName, getAttrFuncDataList);
 
 577     if (ConsolidationDataUtil.isPortResource(heatOrchestrationTemplate,
 
 578         contrailSharedResourceId)) {
 
 579       NodeTemplate nodeTemplate = DataModelUtil.getNodeTemplate(serviceTemplate,
 
 580           sharedTranslatedResourceId);
 
 581       EntityConsolidationData entityConsolidationData = getPortTemplateConsolidationData(context,
 
 582           serviceTemplate, sharedTranslatedResourceId);
 
 583       List<GetAttrFuncData> getAttrFuncDataList = entityConsolidationData
 
 584           .getOutputParametersGetAttrIn();
 
 585       removeParamNameFromAttrFuncList(paramName, getAttrFuncDataList);
 
 589   private static void removeParamNameFromAttrFuncList(String paramName,
 
 590                                                       List<GetAttrFuncData> getAttrFuncDataList) {
 
 591     Iterator<GetAttrFuncData> itr = getAttrFuncDataList.iterator();
 
 592     while (itr.hasNext()) {
 
 593       GetAttrFuncData getAttrFuncData = itr.next();
 
 594       if (paramName.equals(getAttrFuncData.getFieldName())) {
 
 600   public static void updateNodeGetAttributeIn(EntityConsolidationData entityConsolidationData,
 
 601                                               String nodeTemplateId, String propertyName,
 
 602                                               String attributeName) {
 
 603     GetAttrFuncData getAttrFuncData = new GetAttrFuncData();
 
 604     getAttrFuncData.setFieldName(propertyName);
 
 605     getAttrFuncData.setAttributeName(attributeName);
 
 606     entityConsolidationData.addNodesGetAttrIn(nodeTemplateId, getAttrFuncData);
 
 610   public static void updateNodeGetAttributeOut(EntityConsolidationData entityConsolidationData,
 
 611                                                String nodeTemplateId, String propertyName,
 
 612                                                String attributeName) {
 
 613     GetAttrFuncData getAttrFuncData = new GetAttrFuncData();
 
 614     getAttrFuncData.setFieldName(propertyName);
 
 615     getAttrFuncData.setAttributeName(attributeName);
 
 616     entityConsolidationData.addNodesGetAttrOut(nodeTemplateId, getAttrFuncData);
 
 620   public static void updateOutputGetAttributeInConsolidationData(EntityConsolidationData
 
 621                                                                      entityConsolidationData,
 
 622                                                                  String outputParameterName,
 
 623                                                                  String attributeName) {
 
 626     GetAttrFuncData getAttrFuncData = new GetAttrFuncData();
 
 627     getAttrFuncData.setFieldName(outputParameterName);
 
 628     getAttrFuncData.setAttributeName(attributeName);
 
 629     entityConsolidationData.addOutputParamGetAttrIn(getAttrFuncData);
 
 633   public static boolean isComputeReferenceToPortId(ComputeTemplateConsolidationData compute,
 
 635     if (MapUtils.isEmpty(compute.getPorts())) {
 
 638     for (List<String> portIdsPerType : compute.getPorts().values()) {
 
 639       if (portIdsPerType.contains(portId)) {