fix TOSCA structure tree 81/26981/2
authortalio <tali.orenbach@amdocs.com>
Wed, 27 Dec 2017 08:40:47 +0000 (10:40 +0200)
committerVitaly Emporopulo <Vitaliy.Emporopulo@amdocs.com>
Wed, 27 Dec 2017 09:45:48 +0000 (09:45 +0000)
when uploading a csar with two different directories that share the same name, the files structure that appears on the validation screen shows all of the files written under the same directory. this issue got fixed

Change-Id: I6da7399271fa1cde384f6feb51d60724584aa8f9
Issue-ID: SDC-535
Signed-off-by: talio <tali.orenbach@amdocs.com>
openecomp-be/lib/openecomp-heat-lib/src/main/java/org/openecomp/sdc/heat/services/tree/ToscaTreeManager.java

index 517c690..c711c72 100644 (file)
@@ -3,77 +3,65 @@ package org.openecomp.sdc.heat.services.tree;
 import org.openecomp.core.utilities.file.FileContentHandler;
 import org.openecomp.sdc.common.utils.SdcCommon;
 import org.openecomp.sdc.datatypes.error.ErrorMessage;
-import org.openecomp.sdc.heat.datatypes.structure.Artifact;
 import org.openecomp.sdc.heat.datatypes.structure.HeatStructureTree;
-import org.openecomp.sdc.logging.api.Logger;
-import org.openecomp.sdc.logging.api.LoggerFactory;
 
 import java.io.File;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.regex.Pattern;
 
 public class ToscaTreeManager {
-
-  private static Logger logger = (Logger) LoggerFactory.getLogger(ToscaTreeManager.class);
-
   private FileContentHandler csarContentMap = new FileContentHandler();
-  private byte[] manifest;
   private HeatStructureTree tree = new HeatStructureTree();
-  private Map<String, Artifact> artifactRef = new HashMap<>();
   private Map<String, HeatStructureTree> fileTreeRef = new HashMap<>();
 
 
   public void addFile(String fileName, byte[] content) {
-    if (fileName.equals(SdcCommon.CSAR_MANIFEST_NAME)) {
-      manifest = content;
-
-    } else {
+    if (!fileName.equals(SdcCommon.CSAR_MANIFEST_NAME)) {
       csarContentMap.addFile(fileName, content);
     }
   }
 
-  public void createTree(){
-    if (manifest == null) {
-      logger.error("Missing manifest file in the zip.");
-      return;
-    }
-
-    for(Map.Entry<String, byte[]> fileEntry : csarContentMap.getFiles().entrySet()){
+  public void createTree() {
+    for (Map.Entry<String, byte[]> fileEntry : csarContentMap.getFiles().entrySet()) {
       String[] splitFilename = getFullFileNameAsArray(fileEntry.getKey());
-      addFileToTree(splitFilename, 0, tree);
+      addFileToTree(splitFilename, 0, splitFilename[0], tree);
     }
-
-
   }
 
-  private void addFileToTree(String[] splitFilename, int startIndex, HeatStructureTree parent){
-    fileTreeRef.putIfAbsent(splitFilename[startIndex], new HeatStructureTree());
-    HeatStructureTree heatStructureTree = fileTreeRef.get(splitFilename[startIndex]);
+  private void addFileToTree(String[] splitFilename, int startIndex, String fullFileName,
+                             HeatStructureTree parent) {
+    fileTreeRef.putIfAbsent(fullFileName, new HeatStructureTree());
+    HeatStructureTree heatStructureTree = fileTreeRef.get(fullFileName);
     heatStructureTree.setFileName(splitFilename[startIndex]);
-    if(startIndex < splitFilename.length - 1){
-      addFileToTree(splitFilename, startIndex + 1, heatStructureTree);
+    if (startIndex < splitFilename.length - 1) {
+      addFileToTree(splitFilename, startIndex + 1,
+          getFullFileName(fullFileName, splitFilename[startIndex + 1]), heatStructureTree);
     }
     parent.addHeatStructureTreeToNestedHeatList(heatStructureTree);
   }
 
-  public void addErrors(Map<String, List<ErrorMessage>> validationErrors){
-    validationErrors.entrySet().stream().filter(entry -> {
-      return fileTreeRef.get(entry.getKey()) != null;
-    }).forEach(entry -> entry.getValue().stream().forEach(error ->
-        fileTreeRef.get(entry.getKey()).addErrorToErrorsList(error)));
+  public void addErrors(Map<String, List<ErrorMessage>> validationErrors) {
+    validationErrors.entrySet().stream().filter(entry ->
+        Objects.nonNull(fileTreeRef.get(entry.getKey()))).forEach(entry -> entry.getValue()
+        .forEach(error -> fileTreeRef.get(entry.getKey()).addErrorToErrorsList(error)));
+  }
+
+  private String getFullFileName(String parentFullName, String fileName) {
+    return parentFullName + File.separator + fileName;
   }
 
-  private String[] getFullFileNameAsArray(String filename){
-    if(filename.contains("/")){
+  private String[] getFullFileNameAsArray(String filename) {
+    if (filename.contains("/")) {
       return filename.split("/");
     }
 
     return filename.split(Pattern.quote(File.separator));
   }
 
-  public HeatStructureTree getTree(){
+  public HeatStructureTree getTree() {
     return tree;
   }
 }