diff --git a/etc/result.csv b/etc/result.csv new file mode 100644 index 0000000..81b325f --- /dev/null +++ b/etc/result.csv @@ -0,0 +1,3 @@ +id,name,incorrect,manually,accurate +aktie,Aktie,3441,348,5199 +derivat,Derivat,593,9028,1008 \ No newline at end of file diff --git a/pom.xml b/pom.xml index 6119fc8..cfc5511 100644 --- a/pom.xml +++ b/pom.xml @@ -53,7 +53,7 @@ 5.2.0-3 1.28.0-2 1.14.1 - 2.13.3 + 2.13.4 @@ -109,6 +109,11 @@ everit-json-schema ${everit-json-schema.version} + + com.fasterxml.jackson.dataformat + jackson-dataformat-csv + ${jackson-dataformat.version} + diff --git a/src/main/java/io/jenkins/plugins/reporter/model/Result.java b/src/main/java/io/jenkins/plugins/reporter/model/Result.java index 97e5c29..eb6ed46 100644 --- a/src/main/java/io/jenkins/plugins/reporter/model/Result.java +++ b/src/main/java/io/jenkins/plugins/reporter/model/Result.java @@ -1,6 +1,7 @@ package io.jenkins.plugins.reporter.model; import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; @@ -22,10 +23,6 @@ public class Result implements Serializable { private static final long serialVersionUID = 7878818807240640969L; private static final String DEFAULT_COLOR = "#9E9E9E"; - public void setName(String name) { - this.name = name; - } - @JsonProperty(value = "id", required = true) private String id = String.valueOf(hashCode()); @@ -36,7 +33,7 @@ public void setName(String name) { @JsonInclude(JsonInclude.Include.NON_NULL) private List items; - @JsonProperty(value = "colors", required = true) + @JsonProperty(value = "colors") @JsonInclude(JsonInclude.Include.NON_NULL) private Map colors; @@ -51,7 +48,11 @@ public void setId(String id) { public String getName() { return name; } - + + public void setName(String name) { + this.name = name; + } + public List getItems() { return items; } diff --git a/src/main/java/io/jenkins/plugins/reporter/model/ResultParser.java b/src/main/java/io/jenkins/plugins/reporter/model/ResultParser.java index 33ea4d5..87cde18 100644 --- a/src/main/java/io/jenkins/plugins/reporter/model/ResultParser.java +++ b/src/main/java/io/jenkins/plugins/reporter/model/ResultParser.java @@ -1,6 +1,10 @@ package io.jenkins.plugins.reporter.model; +import com.fasterxml.jackson.databind.MappingIterator; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.dataformat.csv.CsvFactory; +import com.fasterxml.jackson.dataformat.csv.CsvMapper; +import com.fasterxml.jackson.dataformat.csv.CsvSchema; import com.fasterxml.jackson.dataformat.xml.XmlFactory; import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; import edu.hm.hafner.echarts.JacksonFacade; @@ -13,11 +17,8 @@ import org.json.JSONObject; import org.json.JSONTokener; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.util.Locale; -import java.util.Optional; +import java.io.*; +import java.util.*; public class ResultParser { @@ -42,6 +43,37 @@ public Optional parseResult(File file) throws IOException { case "json": json = FileUtils.readFileToString(file, "UTF-8"); break; + case "csv": + CsvMapper mapper = new CsvMapper(); + CsvSchema csvSchema = mapper.typedSchemaFor(Map.class).withHeader(); + + MappingIterator> it = mapper.readerFor(Map.class) + .with(csvSchema.withColumnSeparator(',')) + .readValues(file); + + Result result = new Result(); + result.setId(String.valueOf(file.getName().hashCode())); + result.setName(FilenameUtils.removeExtension(file.getName())); + List items = new ArrayList<>(); + + while (it.hasNextValue()) { + Map row = it.nextValue(); + Item item = new Item(); + item.setId(row.get("id")); + item.setName(row.get("name")); + LinkedHashMap res = row.keySet() + .stream().filter(key -> !key.equals("id") && !key.equals("name")) + .collect( + LinkedHashMap::new, + (map, key) -> map.put(key, Integer.parseInt(row.get(key))), + Map::putAll); + item.setResult(res); + items.add(item); + } + + result.setItems(items); + json = jsonWriter.writeValueAsString(result); + break; default: return Optional.empty(); }