1 package org.openecomp.sdc.heat.services.tree;
3 import org.openecomp.core.utilities.file.FileContentHandler;
4 import org.openecomp.sdc.common.utils.SdcCommon;
5 import org.openecomp.sdc.datatypes.error.ErrorMessage;
6 import org.openecomp.sdc.heat.datatypes.structure.Artifact;
7 import org.openecomp.sdc.heat.datatypes.structure.HeatStructureTree;
8 import org.openecomp.sdc.logging.api.Logger;
9 import org.openecomp.sdc.logging.api.LoggerFactory;
12 import java.util.HashMap;
13 import java.util.List;
15 import java.util.regex.Pattern;
17 public class ToscaTreeManager {
19 private static Logger logger = (Logger) LoggerFactory.getLogger(ToscaTreeManager.class);
21 private FileContentHandler csarContentMap = new FileContentHandler();
22 private byte[] manifest;
23 private HeatStructureTree tree = new HeatStructureTree();
24 private Map<String, Artifact> artifactRef = new HashMap<>();
25 private Map<String, HeatStructureTree> fileTreeRef = new HashMap<>();
28 public void addFile(String fileName, byte[] content) {
29 if (fileName.equals(SdcCommon.CSAR_MANIFEST_NAME)) {
33 csarContentMap.addFile(fileName, content);
37 public void createTree(){
38 if (manifest == null) {
39 logger.error("Missing manifest file in the zip.");
43 for(Map.Entry<String, byte[]> fileEntry : csarContentMap.getFiles().entrySet()){
44 String[] splitFilename = getFullFileNameAsArray(fileEntry.getKey());
45 addFileToTree(splitFilename, 0, tree);
51 private void addFileToTree(String[] splitFilename, int startIndex, HeatStructureTree parent){
52 fileTreeRef.putIfAbsent(splitFilename[startIndex], new HeatStructureTree());
53 HeatStructureTree heatStructureTree = fileTreeRef.get(splitFilename[startIndex]);
54 heatStructureTree.setFileName(splitFilename[startIndex]);
55 if(startIndex < splitFilename.length - 1){
56 addFileToTree(splitFilename, startIndex + 1, heatStructureTree);
58 parent.addHeatStructureTreeToNestedHeatList(heatStructureTree);
61 public void addErrors(Map<String, List<ErrorMessage>> validationErrors){
62 validationErrors.entrySet().stream().filter(entry -> {
63 return fileTreeRef.get(entry.getKey()) != null;
64 }).forEach(entry -> entry.getValue().stream().forEach(error ->
65 fileTreeRef.get(entry.getKey()).addErrorToErrorsList(error)));
68 private String[] getFullFileNameAsArray(String filename){
69 if(filename.contains("/")){
70 return filename.split("/");
73 return filename.split(Pattern.quote(File.separator));
76 public HeatStructureTree getTree(){