nested node templates 45/21645/2
authortalio <tali.orenbach@amdocs.com>
Wed, 1 Nov 2017 14:44:32 +0000 (16:44 +0200)
committertalio <tali.orenbach@amdocs.com>
Wed, 1 Nov 2017 16:31:18 +0000 (18:31 +0200)
ignore relations to / from node templates that point to substitution service templates without topology template

Issue - Id : SDC-574

Change-Id: I03d2b305d6ebfd3d355ec3ab9a6f7ae8cb1c5743
Signed-off-by: talio <tali.orenbach@amdocs.com>
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/datatypes/heattotosca/TranslationContext.java
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/ConsolidationDataUtil.java
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/impl/functiontranslation/FunctionTranslationGetAttrImpl.java
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/impl/resourcetranslation/ResourceTranslationBase.java
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/impl/resourcetranslation/ResourceTranslationNestedImpl.java

index ddbcaf7..7d3ebb9 100644 (file)
@@ -123,6 +123,8 @@ public class TranslationContext {
 
   private Set<String> serviceTemplatesWithoutNodeTemplateSection = new HashSet<>();
 
+  private Set<String> nodeTemplateIdsPointingToStWithoutNodeTemplates = new HashSet<>();
+
   public static Map<String, ImplementationConfiguration>
   getSupportedConsolidationComputeResources() {
     return supportedConsolidationComputeResources;
@@ -583,22 +585,22 @@ public class TranslationContext {
 
   }
 
-  public Set<String> getServiceTemplatesWithoutNodeTemplateSection() {
-    return serviceTemplatesWithoutNodeTemplateSection;
-  }
-
-  public void setServiceTemplatesWithoutNodeTemplateSection(
-      Set<String> serviceTemplatesWithoutNodeTemplateSection) {
-    this.serviceTemplatesWithoutNodeTemplateSection = serviceTemplatesWithoutNodeTemplateSection;
+  public boolean isServiceTemplateWithoutNodeTemplatesSection(String serviceTemplateName){
+    return Objects.nonNull(serviceTemplateName)
+          && serviceTemplatesWithoutNodeTemplateSection.contains(serviceTemplateName);
   }
 
   public void addServiceTemplateWithoutNodeTemplates(String serviceTemplateName){
     this.serviceTemplatesWithoutNodeTemplateSection.add(serviceTemplateName);
   }
 
-  public boolean isServiceTemplateWithoutNodeTemplates(String serviceTemplateName){
-    return !Objects.isNull(serviceTemplateName) &&
-        this.serviceTemplatesWithoutNodeTemplateSection.contains(serviceTemplateName);
+  public void addNestedNodeTemplateIdPointsToStWithoutNodeTemplates(String nodeTemplateId){
+    this.nodeTemplateIdsPointingToStWithoutNodeTemplates.add(nodeTemplateId);
+  }
+
+  public boolean isNodeTemplateIdPointsToStWithoutNodeTemplates(String nodeTemplateId){
+    return Objects.nonNull(nodeTemplateId)
+        && nodeTemplateIdsPointingToStWithoutNodeTemplates.contains(nodeTemplateId);
   }
 
   public void updateRequirementAssignmentIdIndex(String serviceTemplateName,
index 5d1bb1c..c5a6735 100644 (file)
@@ -2,6 +2,7 @@ package org.openecomp.sdc.translator.services.heattotosca;
 
 import org.apache.commons.collections4.MapUtils;
 import org.apache.commons.lang3.math.NumberUtils;
+import org.openecomp.core.utilities.file.FileUtils;
 import org.openecomp.sdc.common.errors.CoreException;
 import org.openecomp.sdc.common.errors.ErrorCode;
 import org.openecomp.sdc.datatypes.configuration.ImplementationConfiguration;
@@ -34,7 +35,6 @@ import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolida
 import org.openecomp.sdc.translator.services.heattotosca.errors.DuplicateResourceIdsInDifferentFilesErrorBuilder;
 
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -145,17 +145,23 @@ public class ConsolidationDataUtil {
    *
    * @param context              the context
    * @param serviceTemplate      the service template
-   * @param nestedHeatFileName
-   *@param nestedNodeTemplateId the nested node template id  @return the nested template consolidation data
+   * @param nestedNodeTemplateId the nested node template id  @return the nested template
+   *                             consolidation data
    */
   public static NestedTemplateConsolidationData getNestedTemplateConsolidationData(
       TranslationContext context,
       ServiceTemplate serviceTemplate,
       String nestedHeatFileName, String nestedNodeTemplateId) {
 
-    if(isNestedResourceIdOccuresInDifferentNestedFiles(context, nestedHeatFileName,
-        nestedNodeTemplateId)){
-      throw new CoreException(new DuplicateResourceIdsInDifferentFilesErrorBuilder(nestedNodeTemplateId).build());
+    if (isNestedResourceIdOccuresInDifferentNestedFiles(context, nestedHeatFileName,
+        nestedNodeTemplateId)) {
+      throw new CoreException(
+          new DuplicateResourceIdsInDifferentFilesErrorBuilder(nestedNodeTemplateId).build());
+    }
+
+    if (isNodeTemplatePointsToServiceTemplateWithoutNodeTemplates(
+        nestedNodeTemplateId, nestedHeatFileName, context)) {
+      return null;
     }
 
     ConsolidationData consolidationData = context.getConsolidationData();
@@ -185,11 +191,22 @@ public class ConsolidationDataUtil {
     return nestedTemplateConsolidationData;
   }
 
+  public static boolean isNodeTemplatePointsToServiceTemplateWithoutNodeTemplates(String
+                                                                                      nestedNodeTemplateId,
+                                                                                  String nestedHeatFileName,
+                                                                                  TranslationContext context) {
+
+    return context.isServiceTemplateWithoutNodeTemplatesSection(
+        FileUtils.getFileWithoutExtention(nestedHeatFileName))
+        || context.isNodeTemplateIdPointsToStWithoutNodeTemplates(nestedNodeTemplateId);
+  }
+
   private static boolean isNestedResourceIdOccuresInDifferentNestedFiles(TranslationContext context,
                                                                          String nestedHeatFileName,
                                                                          String nestedNodeTemplateId) {
     return Objects.nonNull(nestedHeatFileName)
-        && context.getAllTranslatedResourceIdsFromDiffNestedFiles(nestedHeatFileName).contains(nestedNodeTemplateId);
+        && context.getAllTranslatedResourceIdsFromDiffNestedFiles(nestedHeatFileName)
+        .contains(nestedNodeTemplateId);
   }
 
   /**
@@ -331,22 +348,21 @@ public class ConsolidationDataUtil {
         || consolidationEntityType == ConsolidationEntityType.NESTED) {
       entityConsolidationData =
           getNestedTemplateConsolidationData(translationContext, serviceTemplate,
-              null,
+              translateTo.getHeatFileName(),
               translateTo.getTranslatedId());
     }
 
-    if(Objects.isNull(entityConsolidationData)){
+    if (Objects.isNull(entityConsolidationData)) {
       return;
     }
-    if (entityConsolidationData != null) {
-      if (entityConsolidationData.getNodesConnectedOut() == null) {
-        entityConsolidationData.setNodesConnectedOut(new HashMap<>());
-      }
 
-      entityConsolidationData.getNodesConnectedOut()
-          .computeIfAbsent(nodeTemplateId, k -> new ArrayList<>())
-          .add(requirementAssignmentData);
+    if (Objects.isNull(entityConsolidationData.getNodesConnectedOut())) {
+      entityConsolidationData.setNodesConnectedOut(new HashMap<>());
     }
+
+    entityConsolidationData.getNodesConnectedOut()
+        .computeIfAbsent(nodeTemplateId, k -> new ArrayList<>())
+        .add(requirementAssignmentData);
   }
 
   /**
@@ -433,7 +449,7 @@ public class ConsolidationDataUtil {
   /**
    * Checks if the current HEAT resource if of type compute.
    *
-   * @param resource                the resource
+   * @param resource the resource
    * @return true if the resource is of compute type and false otherwise
    */
   public static boolean isComputeResource(Resource resource) {
@@ -473,7 +489,7 @@ public class ConsolidationDataUtil {
   /**
    * Checks if the current HEAT resource if of type port.
    *
-   * @param resource                the resource
+   * @param resource the resource
    * @return true if the resource is of port type and false otherwise
    */
   public static boolean isPortResource(Resource resource) {
@@ -507,7 +523,7 @@ public class ConsolidationDataUtil {
   /**
    * Checks if the current HEAT resource if of type volume.
    *
-   * @param resource                the resource
+   * @param resource the resource
    * @return true if the resource is of volume type and false otherwise
    */
   public static boolean isVolumeResource(Resource resource) {
index b2909d1..48d5642 100644 (file)
@@ -276,7 +276,7 @@ public class FunctionTranslationGetAttrImpl implements FunctionTranslation {
       return Optional.of(ConsolidationDataUtil
           .getPortTemplateConsolidationData(context, serviceTemplate, resourceId));
     } else if (HeatToToscaUtil.isNestedResource(resource)) {
-      return Optional.of(ConsolidationDataUtil
+      return Optional.ofNullable(ConsolidationDataUtil
           .getNestedTemplateConsolidationData(context, serviceTemplate, heatFileName, resourceId));
     }
     return Optional.empty();
index 385a0fb..cebabc0 100644 (file)
@@ -146,16 +146,34 @@ public abstract class ResourceTranslationBase {
       throw new CoreException(
           new ResourceNotFoundInHeatFileErrorBuilder(resourceId, heatFileName).build());
     }
+
+    mdcDataDebugMessage.debugExitMessage(null, null);
+    return getTranslatedResourceId(resourceId, heatFileName, resource, heatOrchestrationTemplate,
+        context
+    );
+  }
+
+  private static Optional<String> getTranslatedResourceId(String resourceId,
+                                                          String heatFileName,
+                                                          Resource resource,
+                                                          HeatOrchestrationTemplate heatOrchestrationTemplate,
+                                                          TranslationContext context) {
     TranslateTo translateTo =
         generateTranslationTo(heatFileName, null, heatOrchestrationTemplate, resource, resourceId,
             null, context);
-    translatedId =
+
+    String translatedId =
         ResourceTranslationFactory.getInstance(resource).generateTranslatedId(translateTo);
+
+    if (ConsolidationDataUtil.isNodeTemplatePointsToServiceTemplateWithoutNodeTemplates
+        (translatedId, heatFileName, context)) {
+      return Optional.empty();
+    }
+
     if (translatedId != null) {
       context.getTranslatedIds().get(heatFileName).put(resourceId, translatedId);
     }
 
-    mdcDataDebugMessage.debugExitMessage(null, null);
     return Optional.ofNullable(translatedId);
   }
 
index c29409f..7ba33c4 100644 (file)
@@ -20,7 +20,6 @@
 
 package org.openecomp.sdc.translator.services.heattotosca.impl.resourcetranslation;
 
-import org.apache.commons.collections4.MapUtils;
 import org.openecomp.core.utilities.file.FileUtils;
 import org.openecomp.sdc.heat.datatypes.manifest.FileData;
 import org.openecomp.sdc.logging.api.Logger;
@@ -39,8 +38,6 @@ import org.openecomp.sdc.translator.services.heattotosca.Constants;
 import org.openecomp.sdc.translator.services.heattotosca.HeatToToscaUtil;
 import org.openecomp.sdc.translator.services.heattotosca.TranslationService;
 
-import java.util.Objects;
-
 public class ResourceTranslationNestedImpl extends ResourceTranslationBase {
 
   protected static Logger logger =
@@ -95,7 +92,8 @@ public class ResourceTranslationNestedImpl extends ResourceTranslationBase {
         .get(translateTo.getResource().getType());
 
     if(DataModelUtil.isNodeTemplateSectionMissingFromServiceTemplate(substitutionServiceTemplate)){
-      handleSubstitutionServiceTemplateWithoutNodeTemplates(translateTo, context, templateName);
+      handleSubstitutionServiceTemplateWithoutNodeTemplates(
+          templateName, translateTo);
       mdcDataDebugMessage.debugExitMessage(null, null);
       return;
     }
@@ -113,11 +111,12 @@ public class ResourceTranslationNestedImpl extends ResourceTranslationBase {
     mdcDataDebugMessage.debugExitMessage(null, null);
   }
 
-  private void handleSubstitutionServiceTemplateWithoutNodeTemplates(TranslateTo translateTo,
-                                                                     TranslationContext context,
-                                                                     String templateName) {
-    context.addServiceTemplateWithoutNodeTemplates(templateName);
-    context.getTranslatedServiceTemplates().remove(translateTo.getResource().getType());
+  private void handleSubstitutionServiceTemplateWithoutNodeTemplates(String templateName,
+                                                                     TranslateTo translateTo) {
+    translateTo.getContext().addServiceTemplateWithoutNodeTemplates(templateName);
+    translateTo.getContext()
+        .addNestedNodeTemplateIdPointsToStWithoutNodeTemplates(translateTo.getTranslatedId());
+    translateTo.getContext().getTranslatedServiceTemplates().remove(translateTo.getResource().getType());
   }
 
   private ServiceTemplate createSubstitutionServiceTemplate(TranslateTo translateTo,