diff --git a/li.strolch.rest/src/main/java/li/strolch/rest/endpoint/ReportResource.java b/li.strolch.rest/src/main/java/li/strolch/rest/endpoint/ReportResource.java index 64cb0121b..1df09c285 100644 --- a/li.strolch.rest/src/main/java/li/strolch/rest/endpoint/ReportResource.java +++ b/li.strolch.rest/src/main/java/li/strolch/rest/endpoint/ReportResource.java @@ -38,6 +38,7 @@ import li.strolch.persistence.api.StrolchTransaction; import li.strolch.privilege.model.Certificate; import li.strolch.privilege.model.SimpleRestrictable; import li.strolch.report.Report; +import li.strolch.report.ReportElement; import li.strolch.report.ReportSearch; import li.strolch.rest.RestfulStrolchComponent; import li.strolch.rest.StrolchRestfulConstants; @@ -123,7 +124,7 @@ public class ReportResource { List types = new ArrayList<>(criteria.keySet()); JsonObject finalLocaleJ = localeJ; types.stream().sorted(comparing(type -> { - JsonElement translatedJ = finalLocaleJ.get(type); + JsonElement translatedJ = finalLocaleJ == null ? null : finalLocaleJ.get(type); return translatedJ == null ? type : translatedJ.getAsString(); })).forEach(type -> { Set elements = criteria.getSet(type); @@ -283,7 +284,10 @@ public class ReportResource { // add rows to response JsonObject finalResult = new JsonObject(); JsonArray rows = new JsonArray(); - json.forEach(rows::add); + if (report.isParallel()) + json.forEachOrdered(rows::add); + else + json.forEach(rows::add); finalResult.add(PARAM_ROWS, rows); @@ -432,18 +436,23 @@ public class ReportResource { try (CSVPrinter csvP = new CSVPrinter(new OutputStreamWriter(out), CSVFormat.DEFAULT.withHeader(headers).withDelimiter(';'))) { - report.doReport().forEach(row -> { - try { - csvP.printRecord(row.valueStream().collect(Collectors.toList())); // add to CSV - } catch (Exception e) { - logger.error("Could not write CSV row", e); - } - }); + if (report.isParallel()) + report.doReport().forEachOrdered(row -> writeCsv(csvP, row)); + else + report.doReport().forEach(row -> writeCsv(csvP, row)); } } }; } + private void writeCsv(CSVPrinter csvP, ReportElement row) { + try { + csvP.printRecord(row.valueStream().collect(Collectors.toList())); // add to CSV + } catch (Exception e) { + logger.error("Could not write CSV row", e); + } + } + private MapOfSets getFiltersFromJson(JsonArray filters) { MapOfSets result = new MapOfSets<>(); if (filters == null) { diff --git a/li.strolch.service/src/main/java/li/strolch/report/Report.java b/li.strolch.service/src/main/java/li/strolch/report/Report.java index 3f2b758a0..bd59d5a2b 100644 --- a/li.strolch.service/src/main/java/li/strolch/report/Report.java +++ b/li.strolch.service/src/main/java/li/strolch/report/Report.java @@ -35,6 +35,10 @@ public class Report implements AutoCloseable { return this.reportPolicy; } + public boolean isParallel() { + return this.reportPolicy.isParallel(); + } + public boolean hasDateRangeSelector() { return this.reportPolicy.hasDateRangeSelector(); } diff --git a/li.strolch.service/src/main/java/li/strolch/report/policy/GenericReport.java b/li.strolch.service/src/main/java/li/strolch/report/policy/GenericReport.java index 7869c938c..9c757d8c1 100644 --- a/li.strolch.service/src/main/java/li/strolch/report/policy/GenericReport.java +++ b/li.strolch.service/src/main/java/li/strolch/report/policy/GenericReport.java @@ -186,6 +186,11 @@ public class GenericReport extends ReportPolicy { return this.descending; } + @Override + public boolean isParallel() { + return this.parallel; + } + public void setI18nData(JsonObject i18nData) { this.i18nData = i18nData; } @@ -807,7 +812,7 @@ public class GenericReport extends ReportPolicy { * @return the stream of {@link StrolchRootElement StrolchRootElement} */ protected Stream queryRows() { - if (this.parallel) + if (isParallel()) return getStreamFor(getObjectTypeParam()).parallel(); return getStreamFor(getObjectTypeParam()); } diff --git a/li.strolch.service/src/main/java/li/strolch/report/policy/ReportPolicy.java b/li.strolch.service/src/main/java/li/strolch/report/policy/ReportPolicy.java index 242b71321..850f3ee37 100644 --- a/li.strolch.service/src/main/java/li/strolch/report/policy/ReportPolicy.java +++ b/li.strolch.service/src/main/java/li/strolch/report/policy/ReportPolicy.java @@ -19,6 +19,8 @@ public abstract class ReportPolicy extends StrolchPolicy { super(tx); } + public abstract boolean isParallel(); + public abstract void setI18nData(JsonObject i18nData); public abstract void initialize(String reportId);