From c8a540b3c234449163f6fb1899807bba951113b4 Mon Sep 17 00:00:00 2001 From: shrek2000 Date: Mon, 11 Sep 2017 15:45:37 +0300 Subject: Create new VSP, onboard from TOSCA file - UI Change-Id: I018c6d07a4b9ec7e6b1507ab37e2550865423cfe Issue-ID: SDC-230 Signed-off-by: shrek2000 --- .../sdc/heat/services/tree/ToscaTreeManager.java | 79 ++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 openecomp-be/lib/openecomp-heat-lib/src/main/java/org/openecomp/sdc/heat/services/tree/ToscaTreeManager.java (limited to 'openecomp-be/lib/openecomp-heat-lib/src/main/java') 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 new file mode 100644 index 0000000000..517c690194 --- /dev/null +++ b/openecomp-be/lib/openecomp-heat-lib/src/main/java/org/openecomp/sdc/heat/services/tree/ToscaTreeManager.java @@ -0,0 +1,79 @@ +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.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 { + 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()){ + String[] splitFilename = getFullFileNameAsArray(fileEntry.getKey()); + addFileToTree(splitFilename, 0, tree); + } + + + } + + private void addFileToTree(String[] splitFilename, int startIndex, HeatStructureTree parent){ + fileTreeRef.putIfAbsent(splitFilename[startIndex], new HeatStructureTree()); + HeatStructureTree heatStructureTree = fileTreeRef.get(splitFilename[startIndex]); + heatStructureTree.setFileName(splitFilename[startIndex]); + if(startIndex < splitFilename.length - 1){ + addFileToTree(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))); + } + + private String[] getFullFileNameAsArray(String filename){ + if(filename.contains("/")){ + return filename.split("/"); + } + + return filename.split(Pattern.quote(File.separator)); + } + + public HeatStructureTree getTree(){ + return tree; + } +} -- cgit 1.2.3-korg