forwarder
[sdc.git] / openecomp-be / lib / openecomp-sdc-translator-lib / openecomp-sdc-translator-core / src / main / java / org / openecomp / sdc / translator / services / heattotosca / HeatToToscaUtil.java
index c1f69cf..895b3f9 100644 (file)
@@ -27,6 +27,7 @@ import org.openecomp.core.translator.datatypes.TranslatorOutput;
 import org.openecomp.core.translator.factory.HeatToToscaTranslatorFactory;
 import org.openecomp.core.utilities.file.FileContentHandler;
 import org.openecomp.core.utilities.file.FileUtils;
+import org.openecomp.sdc.common.togglz.ToggleableFeature;
 import org.openecomp.sdc.tosca.services.YamlUtil;
 import org.openecomp.core.validation.util.MessageContainerUtil;
 import org.openecomp.sdc.common.errors.CoreException;
@@ -106,6 +107,7 @@ public class HeatToToscaUtil {
 
   protected static Logger logger = (Logger) LoggerFactory.getLogger(HeatToToscaUtil.class);
   protected static MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
+  private static final String forwarder = "forwarder";
 
 
   /**
@@ -119,9 +121,12 @@ public class HeatToToscaUtil {
     mdcDataDebugMessage.debugEntryMessage(null, null);
     HeatToToscaTranslator heatToToscaTranslator =
         HeatToToscaTranslatorFactory.getInstance().createInterface();
-    InputStream fileContent = fileNameContentMap.getFileContent(SdcCommon.MANIFEST_NAME);
 
-    heatToToscaTranslator.addManifest(SdcCommon.MANIFEST_NAME, FileUtils.toByteArray(fileContent));
+    try (InputStream fileContent = fileNameContentMap.getFileContent(SdcCommon.MANIFEST_NAME)) {
+      heatToToscaTranslator.addManifest(SdcCommon.MANIFEST_NAME, FileUtils.toByteArray(fileContent));
+    } catch (IOException e) {
+      throw new RuntimeException("Failed to read manifest", e);
+    }
 
     fileNameContentMap.getFileList().stream()
         .filter(fileName -> !(fileName.equals(SdcCommon.MANIFEST_NAME))).forEach(
@@ -143,7 +148,7 @@ public class HeatToToscaUtil {
       return heatToToscaTranslator.translate();
     } catch (IOException e) {
       // rethrow as a RuntimeException to keep the signature backward compatible
-      throw new RuntimeException(e);
+      throw new RuntimeException("Failed to read Heat template tree", e);
     }
   }
 
@@ -1161,46 +1166,7 @@ public class HeatToToscaUtil {
     ConsolidationEntityType sourceEntityType = dependencyEntity.getSourceEntityType();
     ConsolidationEntityType targetEntityType = dependencyEntity.getTargetEntityType();
 
-    //Ignore Compute->Port, Compute->volume, Compute->Compute and Compute->VFC Nested relationships
-    if (sourceEntityType == ConsolidationEntityType.COMPUTE) {
-      if (targetEntityType == ConsolidationEntityType.COMPUTE
-          || targetEntityType == ConsolidationEntityType.VOLUME
-          || targetEntityType == ConsolidationEntityType.PORT
-          || targetEntityType == ConsolidationEntityType.VFC_NESTED) {
-        return false;
-      }
-    }
-    //Ignore Port->Compute, Port->volume, Port->Port and Port->VFC Nested relationships
-    if (sourceEntityType == ConsolidationEntityType.PORT) {
-      if (targetEntityType == ConsolidationEntityType.COMPUTE
-          || targetEntityType == ConsolidationEntityType.VOLUME
-          || targetEntityType == ConsolidationEntityType.PORT
-          || targetEntityType == ConsolidationEntityType.VFC_NESTED) {
-        return false;
-      }
-    }
-
-    //Ignore Volume->Compute, Volume->Volume, Volume->Port and Volume->VFC Nested relationships
-    if (sourceEntityType == ConsolidationEntityType.VOLUME) {
-      if (targetEntityType == ConsolidationEntityType.COMPUTE
-          || targetEntityType == ConsolidationEntityType.VOLUME
-          || targetEntityType == ConsolidationEntityType.PORT
-          || targetEntityType == ConsolidationEntityType.VFC_NESTED) {
-        return false;
-      }
-    }
-
-    //Ignore VFC Nested->Compute, VFC Nested->Volume, VFC Nested->Port and
-    // VFC Nested->VFC Nested relationships
-    if (sourceEntityType == ConsolidationEntityType.VFC_NESTED) {
-      if (targetEntityType == ConsolidationEntityType.COMPUTE
-          || targetEntityType == ConsolidationEntityType.VOLUME
-          || targetEntityType == ConsolidationEntityType.PORT
-          || targetEntityType == ConsolidationEntityType.VFC_NESTED) {
-        return false;
-      }
-    }
-    return true;
+    return ConsolidationTypesConnectivity.isDependsOnRelationshipValid(sourceEntityType, targetEntityType);
   }
 
   private static Map<String, Object> managerSubstitutionNodeTemplateProperties(
@@ -1313,23 +1279,37 @@ public class HeatToToscaUtil {
 
     NodeType flatNodeType =
         getNodeTypeWithFlatHierarchy(type, serviceTemplate, context);
-    String capabilityKey;
-    List<String> capabilityMapping;
+
     if (flatNodeType.getCapabilities() != null) {
-      for (Map.Entry<String, CapabilityDefinition> capabilityNodeEntry : flatNodeType
-          .getCapabilities()
-          .entrySet()) {
-        capabilityKey = capabilityNodeEntry.getKey() + "_" + templateName;
-        nodeTypeCapabilitiesDefinition.put(capabilityKey, capabilityNodeEntry.getValue().clone());
-        capabilityMapping = new ArrayList<>();
-        capabilityMapping.add(templateName);
-        capabilityMapping.add(capabilityNodeEntry.getKey());
-        capabilitySubstitutionMapping.put(capabilityKey, capabilityMapping);
-      }
+      flatNodeType.getCapabilities()
+          .entrySet()
+          .stream()
+          .filter(capabilityNodeEntry -> shouldCapabilityNeedsToBeAdded(capabilityNodeEntry.getKey()))
+          .forEach(capabilityNodeEntry ->
+              addCapabilityToSubMapping(
+              templateName, capabilityNodeEntry, nodeTypeCapabilitiesDefinition, capabilitySubstitutionMapping));
     }
     mdcDataDebugMessage.debugExitMessage(null, null);
   }
 
+  private static boolean shouldCapabilityNeedsToBeAdded(String capabilityKey) {
+    return !capabilityKey.contains(forwarder) || ToggleableFeature.FORWARDER_CAPABILITY.isActive();
+  }
+
+  private static void addCapabilityToSubMapping(String templateName,
+                                                Map.Entry<String, CapabilityDefinition> capabilityNodeEntry,
+                                                Map<String, CapabilityDefinition> nodeTypeCapabilitiesDefinition,
+                                                Map<String, List<String>> capabilitySubstitutionMapping) {
+    String capabilityKey;
+    List<String> capabilityMapping;
+    capabilityKey = capabilityNodeEntry.getKey() + "_" + templateName;
+    nodeTypeCapabilitiesDefinition.put(capabilityKey, capabilityNodeEntry.getValue().clone());
+    capabilityMapping = new ArrayList<>();
+    capabilityMapping.add(templateName);
+    capabilityMapping.add(capabilityNodeEntry.getKey());
+    capabilitySubstitutionMapping.put(capabilityKey, capabilityMapping);
+  }
+
   private static List<Map<String, RequirementDefinition>> getNodeTypeReqs(
       String type,
       String templateName,