2  * Copyright © 2016-2018 European Support Limited
 
   4  * Licensed under the Apache License, Version 2.0 (the "License");
 
   5  * you may not use this file except in compliance with the License.
 
   6  * You may obtain a copy of the License at
 
   8  *      http://www.apache.org/licenses/LICENSE-2.0
 
  10  * Unless required by applicable law or agreed to in writing, software
 
  11  * distributed under the License is distributed on an "AS IS" BASIS,
 
  12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
  13  * See the License for the specific language governing permissions and
 
  14  * limitations under the License.
 
  17 package org.openecomp.sdc.translator.services.heattotosca;
 
  19 import java.util.List;
 
  21 import java.util.Objects;
 
  22 import java.util.Optional;
 
  24 import org.apache.commons.collections4.MapUtils;
 
  25 import org.apache.commons.lang3.StringUtils;
 
  26 import org.onap.sdc.tosca.datatypes.model.RequirementAssignment;
 
  27 import org.onap.sdc.tosca.datatypes.model.ServiceTemplate;
 
  28 import org.openecomp.core.utilities.file.FileUtils;
 
  29 import org.openecomp.sdc.common.errors.CoreException;
 
  30 import org.openecomp.sdc.datatypes.configuration.ImplementationConfiguration;
 
  31 import org.openecomp.sdc.heat.datatypes.model.HeatOrchestrationTemplate;
 
  32 import org.openecomp.sdc.heat.datatypes.model.HeatResourcesTypes;
 
  33 import org.openecomp.sdc.heat.datatypes.model.Resource;
 
  34 import org.openecomp.sdc.tosca.services.ToscaUtil;
 
  35 import org.openecomp.sdc.translator.datatypes.heattotosca.TranslationContext;
 
  36 import org.openecomp.sdc.translator.datatypes.heattotosca.to.TranslateTo;
 
  37 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.ComputeConsolidationData;
 
  38 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.ComputeConsolidationDataHandler;
 
  39 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.ComputeTemplateConsolidationData;
 
  40 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.ConsolidationData;
 
  41 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.ConsolidationDataHandler;
 
  42 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.EntityConsolidationData;
 
  43 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.FileComputeConsolidationData;
 
  44 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.FileNestedConsolidationData;
 
  45 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.FilePortConsolidationData;
 
  46 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.GetAttrFuncData;
 
  47 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.NestedConsolidationData;
 
  48 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.NestedTemplateConsolidationData;
 
  49 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.PortConsolidationData;
 
  50 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.PortTemplateConsolidationData;
 
  51 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.SubInterfaceTemplateConsolidationData;
 
  52 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.TypeComputeConsolidationData;
 
  53 import org.openecomp.sdc.translator.services.heattotosca.errors.DuplicateResourceIdsInDifferentFilesErrorBuilder;
 
  57  * Utility class for consolidation data collection helper methods.
 
  59 public class ConsolidationDataUtil {
 
  61     private static final String UNDERSCORE = "_";
 
  62     private static final String DIGIT_REGEX = "\\d+";
 
  64     private ConsolidationDataUtil() {
 
  65         // prevent instantiation of utility class
 
  69      * Gets compute template consolidation data.
 
  71      * @param context               the translation context
 
  72      * @param serviceTemplate       the service template
 
  73      * @param computeNodeType       the compute node type
 
  74      * @param computeNodeTemplateId the compute node template id
 
  75      * @return the compute template consolidation data
 
  77     public static ComputeTemplateConsolidationData getComputeTemplateConsolidationData(TranslationContext context,
 
  78             ServiceTemplate serviceTemplate, String computeNodeType, String computeNodeTemplateId) {
 
  80         ConsolidationData consolidationData = context.getConsolidationData();
 
  81         String serviceTemplateFileName = ToscaUtil.getServiceTemplateFileName(serviceTemplate);
 
  83         ComputeConsolidationData computeConsolidationData = consolidationData.getComputeConsolidationData();
 
  85         FileComputeConsolidationData fileComputeConsolidationData =
 
  86                 computeConsolidationData.getFileComputeConsolidationData(serviceTemplateFileName);
 
  88         if (fileComputeConsolidationData == null) {
 
  89             fileComputeConsolidationData = new FileComputeConsolidationData();
 
  90             computeConsolidationData.setFileComputeConsolidationData(serviceTemplateFileName,
 
  91                     fileComputeConsolidationData);
 
  94         TypeComputeConsolidationData typeComputeConsolidationData =
 
  95                 fileComputeConsolidationData.getTypeComputeConsolidationData(computeNodeType);
 
  96         if (typeComputeConsolidationData == null) {
 
  97             typeComputeConsolidationData = new TypeComputeConsolidationData();
 
  98             fileComputeConsolidationData.setTypeComputeConsolidationData(computeNodeType,
 
  99                     typeComputeConsolidationData);
 
 102         ComputeTemplateConsolidationData computeTemplateConsolidationData =
 
 103                 typeComputeConsolidationData.getComputeTemplateConsolidationData(computeNodeTemplateId);
 
 104         if (computeTemplateConsolidationData == null) {
 
 105             computeTemplateConsolidationData = new ComputeTemplateConsolidationData();
 
 106             computeTemplateConsolidationData.setNodeTemplateId(computeNodeTemplateId);
 
 107             typeComputeConsolidationData.setComputeTemplateConsolidationData(computeNodeTemplateId,
 
 108                     computeTemplateConsolidationData);
 
 111         return computeTemplateConsolidationData;
 
 116      * Gets port template consolidation data.
 
 118      * @param context            the context
 
 119      * @param serviceTemplate    the service template
 
 120      * @param portNodeTemplateId the port node template id
 
 121      * @return the port template consolidation data
 
 123     public static PortTemplateConsolidationData getPortTemplateConsolidationData(TranslationContext context,
 
 124                                                                                         ServiceTemplate serviceTemplate,
 
 125                                                                                         String portResourceId,
 
 126                                                                                         String portResourceType,
 
 127                                                                                         String portNodeTemplateId) {
 
 129         ConsolidationData consolidationData = context.getConsolidationData();
 
 130         String serviceTemplateFileName = ToscaUtil.getServiceTemplateFileName(serviceTemplate);
 
 132         PortConsolidationData portConsolidationData = consolidationData.getPortConsolidationData();
 
 134         FilePortConsolidationData filePortConsolidationData =
 
 135                 portConsolidationData.getFilePortConsolidationData(serviceTemplateFileName);
 
 137         if (filePortConsolidationData == null) {
 
 138             filePortConsolidationData = new FilePortConsolidationData();
 
 139             portConsolidationData.setFilePortConsolidationData(serviceTemplateFileName,
 
 140                     filePortConsolidationData);
 
 143         PortTemplateConsolidationData portTemplateConsolidationData =
 
 144                 filePortConsolidationData.getPortTemplateConsolidationData(portNodeTemplateId);
 
 145         if (portTemplateConsolidationData == null) {
 
 146             portTemplateConsolidationData = filePortConsolidationData
 
 147                     .createPortTemplateConsolidationData(portNodeTemplateId, portResourceId, portResourceType);
 
 148             filePortConsolidationData.setPortTemplateConsolidationData(portNodeTemplateId,
 
 149                     portTemplateConsolidationData);
 
 152         return portTemplateConsolidationData;
 
 155     public static Optional<SubInterfaceTemplateConsolidationData> getSubInterfaceTemplateConsolidationData(
 
 156             TranslateTo subInterfaceTo, String subInterfaceNodeTemplateId) {
 
 158         Optional<String> parentPortNodeTemplateId =
 
 159                 HeatToToscaUtil.getSubInterfaceParentPortNodeTemplateId(subInterfaceTo);
 
 161         return parentPortNodeTemplateId.map(s -> getSubInterfaceTemplateConsolidationData(subInterfaceTo,
 
 162                 s, subInterfaceNodeTemplateId));
 
 166     private static SubInterfaceTemplateConsolidationData getSubInterfaceTemplateConsolidationData(
 
 167             TranslateTo subInterfaceTo, String parentPortNodeTemplateId, String subInterfaceNodeTemplateId) {
 
 169         ConsolidationData consolidationData = subInterfaceTo.getContext().getConsolidationData();
 
 170         String serviceTemplateFileName = ToscaUtil.getServiceTemplateFileName(subInterfaceTo.getServiceTemplate());
 
 172         PortConsolidationData portConsolidationData = consolidationData.getPortConsolidationData();
 
 174         FilePortConsolidationData filePortConsolidationData =
 
 175                 portConsolidationData.getFilePortConsolidationData(serviceTemplateFileName);
 
 177         if (filePortConsolidationData == null) {
 
 178             filePortConsolidationData = new FilePortConsolidationData();
 
 179             portConsolidationData.setFilePortConsolidationData(serviceTemplateFileName,
 
 180                     filePortConsolidationData);
 
 183         PortTemplateConsolidationData portTemplateConsolidationData =
 
 184                 filePortConsolidationData.getPortTemplateConsolidationData(parentPortNodeTemplateId);
 
 185         if (portTemplateConsolidationData == null) {
 
 186             Optional<String> portResourceId = getSubInterfaceParentPortResourceId(parentPortNodeTemplateId,
 
 188             if (portResourceId.isPresent()) {
 
 189                 portTemplateConsolidationData = filePortConsolidationData.createPortTemplateConsolidationData(
 
 190                         parentPortNodeTemplateId, portResourceId.get(),
 
 191                         HeatToToscaUtil.getResourceType(portResourceId.get(), subInterfaceTo
 
 192                                 .getHeatOrchestrationTemplate(), subInterfaceTo.getHeatFileName()));
 
 194                 portTemplateConsolidationData = new PortTemplateConsolidationData();
 
 195                 portTemplateConsolidationData.setNodeTemplateId(parentPortNodeTemplateId);
 
 197             filePortConsolidationData.setPortTemplateConsolidationData(parentPortNodeTemplateId,
 
 198                     portTemplateConsolidationData);
 
 200         return portTemplateConsolidationData.addSubInterfaceTemplateConsolidationData(
 
 201                 subInterfaceTo.getResource(), subInterfaceNodeTemplateId, parentPortNodeTemplateId);
 
 204     private static Optional<String> getSubInterfaceParentPortResourceId(String parentPortNodeTemplateId,
 
 205                                                                         TranslateTo subInterfaceTo) {
 
 206         Map<String, String> resourceIdTranslatedResourceIdMap =
 
 207                 subInterfaceTo.getContext().getTranslatedIds().get(subInterfaceTo.getHeatFileName());
 
 208         if (MapUtils.isEmpty(resourceIdTranslatedResourceIdMap)) {
 
 209             return Optional.empty();
 
 211         for (Map.Entry<String, String> entry : resourceIdTranslatedResourceIdMap.entrySet()) {
 
 212             if (entry.getValue().equals(parentPortNodeTemplateId)) {
 
 213                 return Optional.of(entry.getKey());
 
 216         return Optional.empty();
 
 220      * Gets nested template consolidation data.
 
 222      * @param context              the context
 
 223      * @param serviceTemplate      the service template
 
 224      * @param nestedNodeTemplateId the nested node template id  @return the nested template
 
 227     public static NestedTemplateConsolidationData getNestedTemplateConsolidationData(TranslationContext context,
 
 228             ServiceTemplate serviceTemplate, String nestedHeatFileName, String nestedNodeTemplateId) {
 
 230         if (isNestedResourceIdOccursInDifferentNestedFiles(context, nestedHeatFileName,
 
 231                 nestedNodeTemplateId)) {
 
 232             throw new CoreException(new DuplicateResourceIdsInDifferentFilesErrorBuilder(nestedNodeTemplateId).build());
 
 235         if (isNodeTemplatePointsToServiceTemplateWithoutNodeTemplates(
 
 236                 nestedNodeTemplateId, nestedHeatFileName, context)) {
 
 240         ConsolidationData consolidationData = context.getConsolidationData();
 
 241         String serviceTemplateFileName = ToscaUtil.getServiceTemplateFileName(serviceTemplate);
 
 243         NestedConsolidationData nestedConsolidationData = consolidationData
 
 244                                                                   .getNestedConsolidationData();
 
 246         FileNestedConsolidationData fileNestedConsolidationData =
 
 247                 nestedConsolidationData.getFileNestedConsolidationData(serviceTemplateFileName);
 
 249         if (fileNestedConsolidationData == null) {
 
 250             fileNestedConsolidationData = new FileNestedConsolidationData();
 
 251             nestedConsolidationData.setFileNestedConsolidationData(serviceTemplateFileName,
 
 252                     fileNestedConsolidationData);
 
 255         NestedTemplateConsolidationData nestedTemplateConsolidationData =
 
 256                 fileNestedConsolidationData.getNestedTemplateConsolidationData(nestedNodeTemplateId);
 
 257         if (nestedTemplateConsolidationData == null) {
 
 258             nestedTemplateConsolidationData = new NestedTemplateConsolidationData();
 
 259             nestedTemplateConsolidationData.setNodeTemplateId(nestedNodeTemplateId);
 
 260             fileNestedConsolidationData.setNestedTemplateConsolidationData(nestedNodeTemplateId,
 
 261                     nestedTemplateConsolidationData);
 
 264         return nestedTemplateConsolidationData;
 
 267     public static boolean isNodeTemplatePointsToServiceTemplateWithoutNodeTemplates(String
 
 268                                                                                             nestedNodeTemplateId,
 
 269                                                                                            String nestedHeatFileName,
 
 270                                                                                            TranslationContext context) {
 
 272         return context.isServiceTemplateWithoutNodeTemplatesSection(
 
 273                 FileUtils.getFileWithoutExtention(nestedHeatFileName))
 
 274                        || context.isNodeTemplateIdPointsToStWithoutNodeTemplates(nestedNodeTemplateId);
 
 277     private static boolean isNestedResourceIdOccursInDifferentNestedFiles(TranslationContext context,
 
 278                                                                                   String nestedHeatFileName,
 
 279                                                                                   String nestedNodeTemplateId) {
 
 280         return Objects.nonNull(nestedHeatFileName)
 
 281                        && context.getAllTranslatedResourceIdsFromDiffNestedFiles(nestedHeatFileName)
 
 282                                  .contains(nestedNodeTemplateId);
 
 286      * Update volume information in consolidation data.
 
 288      * @param translateTo           {@link TranslateTo} object
 
 289      * @param computeType           Local type of the compute node
 
 290      * @param computeNodeTemplateId Node template id of the compute node
 
 291      * @param requirementAssignment RequirementAssignment object
 
 293     public static void updateComputeConsolidationDataVolumes(TranslateTo translateTo,
 
 295                                                                     String computeNodeTemplateId,
 
 296                                                                     String requirementId,
 
 297                                                                     RequirementAssignment requirementAssignment) {
 
 298         ComputeConsolidationDataHandler handler =
 
 299                 translateTo.getContext().getComputeConsolidationDataHandler();
 
 300         handler.addVolumeToConsolidationData(
 
 301                 translateTo, computeType, computeNodeTemplateId, requirementId, requirementAssignment);
 
 305      * Update port in consolidation data.
 
 307      * @param translateTo        the translate to
 
 308      * @param computeNodeType    the compute node type
 
 309      * @param portResourceId     the port resource id
 
 310      * @param portNodeTemplateId the port node template id
 
 312     public static void updatePortInConsolidationData(TranslateTo translateTo,
 
 313                                                             String computeNodeType,
 
 314                                                             String portResourceId,
 
 315                                                             String portResourceType,
 
 316                                                             String portNodeTemplateId) {
 
 317         TranslationContext translationContext = translateTo.getContext();
 
 318         String computeNodeTemplateId = translateTo.getTranslatedId();
 
 319         String portType = getPortType(portNodeTemplateId);
 
 321         translationContext.getComputeConsolidationDataHandler().addPortToConsolidationData(
 
 322                 translateTo, computeNodeType, computeNodeTemplateId, portType, portNodeTemplateId);
 
 324         ServiceTemplate serviceTemplate = translateTo.getServiceTemplate();
 
 325         String serviceTemplateFileName = ToscaUtil.getServiceTemplateFileName(serviceTemplate);
 
 326         translationContext.getPortConsolidationDataHandler().addConsolidationData(
 
 327                 serviceTemplateFileName, portResourceId, portResourceType, portNodeTemplateId);
 
 331      * Update nodes connected in and out for Depends on and connectivity in consolidation data.
 
 333      * @param translateTo           the translate to
 
 334      * @param targetResourceId      the target resource id
 
 335      * @param nodeTemplateId        the source node template id
 
 336      * @param requirementAssignment the requirement assignment
 
 338     public static void updateNodesConnectedData(TranslateTo translateTo, String targetResourceId,
 
 339                                                        Resource targetResource, Resource sourceResource,
 
 340                                                        String nodeTemplateId, String requirementId,
 
 341                                                        RequirementAssignment requirementAssignment) {
 
 342         ConsolidationEntityType consolidationEntityType = ConsolidationEntityType.OTHER;
 
 343         consolidationEntityType.setEntityType(sourceResource, targetResource, translateTo.getContext());
 
 344         // Add resource dependency information in nodesConnectedIn if the target node
 
 345         // is a consolidation entity
 
 346         if (isConsolidationEntity(consolidationEntityType.getTargetEntityType())) {
 
 347             ConsolidationDataUtil.updateNodesConnectedIn(translateTo,
 
 348                     nodeTemplateId, consolidationEntityType.getTargetEntityType(), targetResourceId,
 
 349                     requirementId, requirementAssignment);
 
 352         //Add resource dependency information in nodesConnectedOut if the source node
 
 353         //is a consolidation entity
 
 354         if (isConsolidationEntity(consolidationEntityType.getSourceEntityType())) {
 
 355             ConsolidationDataUtil.updateNodesConnectedOut(translateTo,
 
 356                     requirementAssignment.getNode(), consolidationEntityType.getSourceEntityType(),
 
 357                     requirementId, requirementAssignment);
 
 363     private static boolean isConsolidationEntity(ConsolidationEntityType consolidationEntityType) {
 
 364         return ConsolidationEntityType.getSupportedConsolidationEntities().contains(consolidationEntityType);
 
 368      * Update nodes connected from this node in consolidation data.
 
 370      * @param translateTo             the translate to
 
 371      * @param nodeTemplateId          the node template id of the target node
 
 372      * @param consolidationEntityType the entity type (compute or port)
 
 373      * @param requirementId           the requirement id
 
 374      * @param requirementAssignment   the requirement assignment
 
 376     public static void updateNodesConnectedOut(TranslateTo translateTo,
 
 377                                                       String nodeTemplateId,
 
 378                                                       ConsolidationEntityType consolidationEntityType,
 
 379                                                       String requirementId,
 
 380                                                       RequirementAssignment requirementAssignment) {
 
 381         TranslationContext translationContext = translateTo.getContext();
 
 382         translationContext.updateRequirementAssignmentIdIndex(
 
 383                 ToscaUtil.getServiceTemplateFileName(translateTo.getServiceTemplate()), translateTo.getResourceId(),
 
 386         Optional<ConsolidationDataHandler> consolidationDataHandler =
 
 387                 translationContext.getConsolidationDataHandler(consolidationEntityType);
 
 388         consolidationDataHandler.ifPresent(handler -> handler.addNodesConnectedOut(
 
 389                 translateTo, nodeTemplateId, requirementId, requirementAssignment));
 
 394      * Update nodes connected from this node in consolidation data.
 
 396      * @param translateTo             the translate to
 
 397      * @param sourceNodeTemplateId    the node template id of the source node
 
 398      * @param consolidationEntityType Entity type (compute or port)
 
 399      * @param targetResourceId        Target Resource Id
 
 400      * @param requirementId           Requirement Id
 
 401      * @param requirementAssignment   the requirement assignment
 
 403     public static void updateNodesConnectedIn(TranslateTo translateTo, String sourceNodeTemplateId,
 
 404                                                      ConsolidationEntityType consolidationEntityType,
 
 405                                                      String targetResourceId,
 
 406                                                      String requirementId,
 
 407                                                      RequirementAssignment requirementAssignment) {
 
 410         TranslationContext translationContext = translateTo.getContext();
 
 411         Optional<ConsolidationDataHandler> consolidationDataHandler =
 
 412                 translationContext.getConsolidationDataHandler(consolidationEntityType);
 
 413         String dependentNodeTemplateId = requirementAssignment.getNode();
 
 414         consolidationDataHandler.ifPresent(
 
 415                 handler -> handler.addNodesConnectedIn(translateTo, sourceNodeTemplateId, dependentNodeTemplateId,
 
 416                         targetResourceId, requirementId, requirementAssignment));
 
 421      * Checks if the current HEAT resource if of type compute.
 
 423      * @param heatOrchestrationTemplate the heat orchestration template
 
 424      * @param resourceId                the resource id
 
 425      * @return true if the resource is of compute type and false otherwise
 
 427     public static boolean isComputeResource(HeatOrchestrationTemplate heatOrchestrationTemplate,
 
 429         String resourceType = heatOrchestrationTemplate.getResources().get(resourceId).getType();
 
 430         Map<String, ImplementationConfiguration> supportedComputeResources =
 
 431                 TranslationContext.getSupportedConsolidationComputeResources();
 
 432         if (supportedComputeResources.containsKey(resourceType)) {
 
 433             return supportedComputeResources.get(resourceType).isEnable();
 
 439      * Checks if the current HEAT resource if of type compute.
 
 441      * @param resource the resource
 
 442      * @return true if the resource is of compute type and false otherwise
 
 444     public static boolean isComputeResource(Resource resource) {
 
 445         String resourceType = resource.getType();
 
 446         Map<String, ImplementationConfiguration> supportedComputeResources =
 
 447                 TranslationContext.getSupportedConsolidationComputeResources();
 
 448         if (supportedComputeResources.containsKey(resourceType)) {
 
 449             return supportedComputeResources.get(resourceType).isEnable();
 
 455      * Checks if the current HEAT resource if of type port.
 
 457      * @param heatOrchestrationTemplate the heat orchestration template
 
 458      * @param resourceId                the resource id
 
 459      * @return true if the resource is of port type and false otherwise
 
 461     public static boolean isPortResource(HeatOrchestrationTemplate heatOrchestrationTemplate,
 
 463         String resourceType = heatOrchestrationTemplate.getResources().get(resourceId).getType();
 
 464         Map<String, ImplementationConfiguration> supportedPortResources =
 
 465                 TranslationContext.getSupportedConsolidationPortResources();
 
 466         if (supportedPortResources.containsKey(resourceType)) {
 
 467             return supportedPortResources.get(resourceType).isEnable();
 
 473      * Checks if the current HEAT resource if of type port.
 
 475      * @param resource the resource
 
 476      * @return true if the resource is of port type and false otherwise
 
 478     public static boolean isPortResource(Resource resource) {
 
 479         String resourceType = resource.getType();
 
 480         Map<String, ImplementationConfiguration> supportedPortResources =
 
 481                 TranslationContext.getSupportedConsolidationPortResources();
 
 482         if (supportedPortResources.containsKey(resourceType)) {
 
 483             return supportedPortResources.get(resourceType).isEnable();
 
 489      * Checks if the current HEAT resource if of type volume.
 
 491      * @param heatOrchestrationTemplate the heat orchestration template
 
 492      * @param resourceId                the resource id
 
 493      * @return true if the resource is of volume type and false otherwise
 
 495     public static boolean isVolumeResource(HeatOrchestrationTemplate heatOrchestrationTemplate,
 
 497         String resourceType = heatOrchestrationTemplate.getResources().get(resourceId).getType();
 
 498         return resourceType.equals(HeatResourcesTypes.CINDER_VOLUME_RESOURCE_TYPE.getHeatResource())
 
 499                        || resourceType.equals(HeatResourcesTypes.CINDER_VOLUME_ATTACHMENT_RESOURCE_TYPE
 
 504      * Checks if the current HEAT resource if of type volume.
 
 506      * @param resource the resource
 
 507      * @return true if the resource is of volume type and false otherwise
 
 509     public static boolean isVolumeResource(Resource resource) {
 
 510         String resourceType = resource.getType();
 
 511         return resourceType.equals(HeatResourcesTypes.CINDER_VOLUME_RESOURCE_TYPE.getHeatResource())
 
 512                        || resourceType.equals(HeatResourcesTypes.CINDER_VOLUME_ATTACHMENT_RESOURCE_TYPE
 
 519      * @param portNodeTemplateId the port node template id
 
 520      * @return the port type
 
 522     public static String getPortType(String portNodeTemplateId) {
 
 524         if (StringUtils.isBlank(portNodeTemplateId)) {
 
 525             return portNodeTemplateId;
 
 528         String formattedName = portNodeTemplateId.replaceAll(UNDERSCORE + DIGIT_REGEX + "$", "");
 
 530         StringBuilder sb = new StringBuilder();
 
 532         for (String token : formattedName.split(UNDERSCORE)) {
 
 534             if (StringUtils.isNotBlank(token)) {
 
 538             if (count != 2 || (!StringUtils.isBlank(token) && !token.matches(DIGIT_REGEX))) {
 
 539                 sb.append(token).append(UNDERSCORE);
 
 543         return portNodeTemplateId.endsWith(UNDERSCORE) ? sb.toString() : sb.substring(0, sb.length() - 1);
 
 547      * Update node template id for the nested node templates in the consolidation data.
 
 549      * @param translateTo the translate to
 
 551     public static void updateNestedNodeTemplateId(TranslateTo translateTo) {
 
 552         TranslationContext context = translateTo.getContext();
 
 553         ServiceTemplate serviceTemplate = translateTo.getServiceTemplate();
 
 554         String serviceTemplateFileName = ToscaUtil.getServiceTemplateFileName(serviceTemplate);
 
 555         // create nested in consolidation data
 
 556         context.getNestedConsolidationDataHandler()
 
 557                 .addConsolidationData(serviceTemplateFileName, context,
 
 558                   translateTo.getHeatFileName(), translateTo.getTranslatedId());
 
 562     public static void removeSharedResource(ServiceTemplate serviceTemplate,
 
 563                                                    HeatOrchestrationTemplate heatOrchestrationTemplate,
 
 564                                                    TranslationContext context,
 
 566                                                    String contrailSharedResourceId,
 
 567                                                    String sharedTranslatedResourceId) {
 
 568         Optional<ConsolidationDataHandler> consolidationDataHandler =
 
 569                 ConsolidationDataUtil.getConsolidationDataHandler(heatOrchestrationTemplate, context,
 
 570                         contrailSharedResourceId);
 
 572         consolidationDataHandler.ifPresent(
 
 573                 handler -> handler.removeParamNameFromAttrFuncList(serviceTemplate, heatOrchestrationTemplate,
 
 574                         paramName, contrailSharedResourceId, sharedTranslatedResourceId));
 
 578     private static Optional<ConsolidationDataHandler> getConsolidationDataHandler(
 
 579             HeatOrchestrationTemplate heatOrchestrationTemplate, TranslationContext context,
 
 580             String contrailSharedResourceId) {
 
 581         Resource resource = heatOrchestrationTemplate.getResources().get(contrailSharedResourceId);
 
 582         ConsolidationEntityType consolidationEntityType = ConsolidationEntityType.OTHER;
 
 583         consolidationEntityType.setEntityType(resource, resource, context);
 
 584         return context.getConsolidationDataHandler(consolidationEntityType.getSourceEntityType());
 
 587     public static void updateNodeGetAttributeIn(EntityConsolidationData entityConsolidationData,
 
 588                                                        String nodeTemplateId, String propertyName,
 
 589                                                        String attributeName) {
 
 590         GetAttrFuncData getAttrFuncData = new GetAttrFuncData();
 
 591         getAttrFuncData.setFieldName(propertyName);
 
 592         getAttrFuncData.setAttributeName(attributeName);
 
 593         entityConsolidationData.addNodesGetAttrIn(nodeTemplateId, getAttrFuncData);
 
 597     public static void updateNodeGetAttributeOut(EntityConsolidationData entityConsolidationData,
 
 598                                                         String nodeTemplateId, String propertyName,
 
 599                                                         String attributeName) {
 
 601         GetAttrFuncData getAttrFuncData = new GetAttrFuncData();
 
 602         getAttrFuncData.setFieldName(propertyName);
 
 603         getAttrFuncData.setAttributeName(attributeName);
 
 604         entityConsolidationData.addNodesGetAttrOut(nodeTemplateId, getAttrFuncData);
 
 608     public static void updateOutputGetAttributeInConsolidationData(EntityConsolidationData
 
 609                                                                            entityConsolidationData,
 
 610                                                                           String outputParameterName,
 
 611                                                                           String attributeName) {
 
 613         GetAttrFuncData getAttrFuncData = new GetAttrFuncData();
 
 614         getAttrFuncData.setFieldName(outputParameterName);
 
 615         getAttrFuncData.setAttributeName(attributeName);
 
 616         entityConsolidationData.addOutputParamGetAttrIn(getAttrFuncData);
 
 620     public static boolean isComputeReferenceToPortId(ComputeTemplateConsolidationData compute,
 
 622         if (MapUtils.isEmpty(compute.getPorts())) {
 
 625         for (List<String> portIdsPerType : compute.getPorts().values()) {
 
 626             if (portIdsPerType.contains(portId)) {