Merge "Added new schema"
[sdc.git] / openecomp-be / lib / openecomp-sdc-translator-lib / openecomp-sdc-translator-core / src / main / java / org / openecomp / sdc / translator / services / heattotosca / ConsolidationDataUtil.java
index a89d08b..5d1bb1c 100644 (file)
@@ -2,6 +2,8 @@ package org.openecomp.sdc.translator.services.heattotosca;
 
 import org.apache.commons.collections4.MapUtils;
 import org.apache.commons.lang3.math.NumberUtils;
+import org.openecomp.sdc.common.errors.CoreException;
+import org.openecomp.sdc.common.errors.ErrorCode;
 import org.openecomp.sdc.datatypes.configuration.ImplementationConfiguration;
 import org.openecomp.sdc.heat.datatypes.model.HeatOrchestrationTemplate;
 import org.openecomp.sdc.heat.datatypes.model.HeatResourcesTypes;
@@ -29,8 +31,10 @@ import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolida
 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.PortTemplateConsolidationData;
 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.RequirementAssignmentData;
 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.TypeComputeConsolidationData;
+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;
@@ -141,13 +145,18 @@ public class ConsolidationDataUtil {
    *
    * @param context              the context
    * @param serviceTemplate      the service template
-   * @param nestedNodeTemplateId the nested node template id
-   * @return the nested template consolidation data
+   * @param nestedHeatFileName
+   *@param nestedNodeTemplateId the nested node template id  @return the nested template consolidation data
    */
   public static NestedTemplateConsolidationData getNestedTemplateConsolidationData(
       TranslationContext context,
       ServiceTemplate serviceTemplate,
-      String nestedNodeTemplateId) {
+      String nestedHeatFileName, String nestedNodeTemplateId) {
+
+    if(isNestedResourceIdOccuresInDifferentNestedFiles(context, nestedHeatFileName,
+        nestedNodeTemplateId)){
+      throw new CoreException(new DuplicateResourceIdsInDifferentFilesErrorBuilder(nestedNodeTemplateId).build());
+    }
 
     ConsolidationData consolidationData = context.getConsolidationData();
     String serviceTemplateFileName = ToscaUtil.getServiceTemplateFileName(serviceTemplate);
@@ -176,6 +185,13 @@ public class ConsolidationDataUtil {
     return nestedTemplateConsolidationData;
   }
 
+  private static boolean isNestedResourceIdOccuresInDifferentNestedFiles(TranslationContext context,
+                                                                         String nestedHeatFileName,
+                                                                         String nestedNodeTemplateId) {
+    return Objects.nonNull(nestedHeatFileName)
+        && context.getAllTranslatedResourceIdsFromDiffNestedFiles(nestedHeatFileName).contains(nestedNodeTemplateId);
+  }
+
   /**
    * Update group id information in consolidation data.
    *
@@ -255,10 +271,7 @@ public class ConsolidationDataUtil {
         targetResource, translateTo.getContext());
     // Add resource dependency information in nodesConnectedIn if the target node
     // is a consolidation entity
-    if (isConsolidationEntity(consolidationEntityType.getTargetEntityType())
-        && HeatToToscaUtil
-        .isValidDependsOnCandidate(heatOrchestrationTemplate, sourceResource,
-            targetResource, consolidationEntityType, translationContext)) {
+    if (isConsolidationEntity(consolidationEntityType.getTargetEntityType())) {
       ConsolidationDataUtil.updateNodesConnectedIn(translateTo,
           nodeTemplateId, consolidationEntityType.getTargetEntityType(), targetResourceId,
           requirementId, requirementAssignment);
@@ -266,13 +279,11 @@ public class ConsolidationDataUtil {
 
     //Add resource dependency information in nodesConnectedOut if the source node
     //is a consolidation entity
-    if (isConsolidationEntity(consolidationEntityType.getSourceEntityType())
-        && HeatToToscaUtil
-        .isValidDependsOnCandidate(heatOrchestrationTemplate, sourceResource,
-            targetResource, consolidationEntityType, translationContext)) {
+    if (isConsolidationEntity(consolidationEntityType.getSourceEntityType())) {
       ConsolidationDataUtil.updateNodesConnectedOut(translateTo,
           requirementAssignment.getNode(), consolidationEntityType.getSourceEntityType(),
           requirementId, requirementAssignment);
+
     }
   }
 
@@ -301,6 +312,10 @@ public class ConsolidationDataUtil {
     EntityConsolidationData entityConsolidationData = null;
     TranslationContext translationContext = translateTo.getContext();
     ServiceTemplate serviceTemplate = translateTo.getServiceTemplate();
+
+    translationContext.updateRequirementAssignmentIdIndex(ToscaUtil.getServiceTemplateFileName
+        (translateTo.getServiceTemplate()), translateTo.getResourceId(), requirementId);
+
     RequirementAssignmentData requirementAssignmentData = new RequirementAssignmentData(
         requirementId, requirementAssignment);
 
@@ -314,17 +329,24 @@ public class ConsolidationDataUtil {
           serviceTemplate, translateTo.getTranslatedId());
     } else if (consolidationEntityType == ConsolidationEntityType.VFC_NESTED
         || consolidationEntityType == ConsolidationEntityType.NESTED) {
-      //ConnectedOut data for nested is not updated
-      return;
+      entityConsolidationData =
+          getNestedTemplateConsolidationData(translationContext, serviceTemplate,
+              null,
+              translateTo.getTranslatedId());
     }
 
-    if (entityConsolidationData.getNodesConnectedOut() == null) {
-      entityConsolidationData.setNodesConnectedOut(new HashMap<>());
+    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);
+      entityConsolidationData.getNodesConnectedOut()
+          .computeIfAbsent(nodeTemplateId, k -> new ArrayList<>())
+          .add(requirementAssignmentData);
+    }
   }
 
   /**
@@ -372,17 +394,19 @@ public class ConsolidationDataUtil {
     } else if (consolidationEntityType == ConsolidationEntityType.NESTED
         || consolidationEntityType == ConsolidationEntityType.VFC_NESTED) {
       entityConsolidationData = getNestedTemplateConsolidationData(translationContext,
-          serviceTemplate, dependentNodeTemplateId);
+          serviceTemplate, translateTo.getHeatFileName(), dependentNodeTemplateId);
     }
 
-    if (entityConsolidationData.getNodesConnectedIn() == null) {
-      entityConsolidationData.setNodesConnectedIn(new HashMap<>());
-    }
+    if (entityConsolidationData != null) {
+      if (entityConsolidationData.getNodesConnectedIn() == null) {
+        entityConsolidationData.setNodesConnectedIn(new HashMap<>());
+      }
 
-    entityConsolidationData.getNodesConnectedIn()
-        .computeIfAbsent(sourceNodeTemplateId, k -> new ArrayList<>())
-        .add(requirementAssignmentData);
+      entityConsolidationData.getNodesConnectedIn()
+          .computeIfAbsent(sourceNodeTemplateId, k -> new ArrayList<>())
+          .add(requirementAssignmentData);
 
+    }
   }
 
   /**
@@ -530,7 +554,8 @@ public class ConsolidationDataUtil {
   public static void updateNestedNodeTemplateId(TranslateTo translateTo) {
     TranslationContext context = translateTo.getContext();
     ServiceTemplate serviceTemplate = translateTo.getServiceTemplate();
-    getNestedTemplateConsolidationData(context, serviceTemplate, translateTo.getTranslatedId());
+    getNestedTemplateConsolidationData(
+        context, serviceTemplate, translateTo.getHeatFileName(), translateTo.getTranslatedId());
   }
 
   public static void removeSharedResource(ServiceTemplate serviceTemplate,