From 33b5d647d2edc8c8c68790a309ef3c757d4e6b8a Mon Sep 17 00:00:00 2001 From: talio Date: Wed, 27 Dec 2017 10:40:47 +0200 Subject: fix TOSCA structure tree 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 --- .../sdc/heat/services/tree/ToscaTreeManager.java | 58 +++++++++------------- 1 file changed, 23 insertions(+), 35 deletions(-) (limited to 'openecomp-be/lib/openecomp-heat-lib/src/main/java/org') diff --git a/openecomp-be/lib/openecomp-heat-lib/src/main/java/org/openecomp/sdc/heat/services/tree/ToscaTreeManager.java b/openecomp-be/lib/openecomp-heat-lib/src/main/java/org/openecomp/sdc/heat/services/tree/ToscaTreeManager.java index 517c690194..c711c72faf 100644 --- a/openecomp-be/lib/openecomp-heat-lib/src/main/java/org/openecomp/sdc/heat/services/tree/ToscaTreeManager.java +++ b/openecomp-be/lib/openecomp-heat-lib/src/main/java/org/openecomp/sdc/heat/services/tree/ToscaTreeManager.java @@ -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 artifactRef = new HashMap<>(); private Map 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 fileEntry : csarContentMap.getFiles().entrySet()){ + public void createTree() { + for (Map.Entry 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> 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> 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; } } -- cgit 1.2.3-korg