[Fix] ReportResource: from date is min time and to date max time

This commit is contained in:
Robert von Burg 2020-03-26 16:16:34 +01:00
parent c2ef5491d5
commit e2d8285f87
1 changed files with 24 additions and 13 deletions

View File

@ -16,7 +16,8 @@ import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStreamWriter; import java.io.OutputStreamWriter;
import java.nio.file.Files; import java.nio.file.Files;
import java.util.Date; import java.time.LocalTime;
import java.time.ZonedDateTime;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -43,7 +44,7 @@ import li.strolch.utils.collections.DateRange;
import li.strolch.utils.collections.MapOfSets; import li.strolch.utils.collections.MapOfSets;
import li.strolch.utils.dbc.DBC; import li.strolch.utils.dbc.DBC;
import li.strolch.utils.helper.StringHelper; import li.strolch.utils.helper.StringHelper;
import li.strolch.utils.iso8601.ISO8601FormatFactory; import li.strolch.utils.iso8601.ISO8601;
import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVPrinter; import org.apache.commons.csv.CSVPrinter;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -231,9 +232,9 @@ public class ReportResource {
String fromS = rangeJ != null && rangeJ.get(PARAM_FROM) != null && !rangeJ.get(PARAM_FROM).isJsonNull() ? String fromS = rangeJ != null && rangeJ.get(PARAM_FROM) != null && !rangeJ.get(PARAM_FROM).isJsonNull() ?
rangeJ.get(PARAM_FROM).getAsString() : rangeJ.get(PARAM_FROM).getAsString() :
null; null;
Date from; ZonedDateTime from;
try { try {
from = fromS != null ? ISO8601FormatFactory.getInstance().parseDate(fromS) : null; from = fromS != null ? ISO8601.parseToZdt(fromS).with(LocalTime.MIN) : null;
} catch (Exception e) { } catch (Exception e) {
logger.error("Could not parse 'from' date, setting it to null.", e); logger.error("Could not parse 'from' date, setting it to null.", e);
from = null; from = null;
@ -242,9 +243,9 @@ public class ReportResource {
String toS = rangeJ != null && rangeJ.get(PARAM_TO) != null && !rangeJ.get(PARAM_TO).isJsonNull() ? String toS = rangeJ != null && rangeJ.get(PARAM_TO) != null && !rangeJ.get(PARAM_TO).isJsonNull() ?
rangeJ.get(PARAM_TO).getAsString() : rangeJ.get(PARAM_TO).getAsString() :
null; null;
Date to; ZonedDateTime to;
try { try {
to = (toS != null) ? ISO8601FormatFactory.getInstance().parseDate(toS) : null; to = (toS != null) ? ISO8601.parseToZdt(toS).with(LocalTime.MAX) : null;
} catch (Exception e) { } catch (Exception e) {
logger.error("Could not parse 'to' date, setting it to null.", e); logger.error("Could not parse 'to' date, setting it to null.", e);
to = null; to = null;
@ -272,7 +273,12 @@ public class ReportResource {
// add filters from request // add filters from request
if (report.hasDateRangeSelector()) { if (report.hasDateRangeSelector()) {
DateRange dateRange = new DateRange().from(from, true).to(to, true); DateRange dateRange = new DateRange();
if (from != null)
dateRange = dateRange.from(from, true);
if (to != null)
dateRange = dateRange.to(to, true);
report.dateRange(dateRange); report.dateRange(dateRange);
} }
filters.keySet().forEach(f -> report.filter(f, filters.getSet(f))); filters.keySet().forEach(f -> report.filter(f, filters.getSet(f)));
@ -351,9 +357,9 @@ public class ReportResource {
String fromS = rangeJ != null && rangeJ.get(PARAM_FROM) != null && !rangeJ.get(PARAM_FROM).isJsonNull() ? String fromS = rangeJ != null && rangeJ.get(PARAM_FROM) != null && !rangeJ.get(PARAM_FROM).isJsonNull() ?
rangeJ.get(PARAM_FROM).getAsString() : rangeJ.get(PARAM_FROM).getAsString() :
null; null;
Date from; ZonedDateTime from;
try { try {
from = fromS != null ? ISO8601FormatFactory.getInstance().parseDate(fromS) : null; from = fromS != null ? ISO8601.parseToZdt(fromS).with(LocalTime.MIN) : null;
} catch (Exception e) { } catch (Exception e) {
logger.error("Could not parse 'from' date, setting it to null.", e); logger.error("Could not parse 'from' date, setting it to null.", e);
from = null; from = null;
@ -362,9 +368,9 @@ public class ReportResource {
String toS = rangeJ != null && rangeJ.get(PARAM_TO) != null && !rangeJ.get(PARAM_TO).isJsonNull() ? String toS = rangeJ != null && rangeJ.get(PARAM_TO) != null && !rangeJ.get(PARAM_TO).isJsonNull() ?
rangeJ.get(PARAM_TO).getAsString() : rangeJ.get(PARAM_TO).getAsString() :
null; null;
Date to; ZonedDateTime to;
try { try {
to = (toS != null) ? ISO8601FormatFactory.getInstance().parseDate(toS) : null; to = (toS != null) ? ISO8601.parseToZdt(toS).with(LocalTime.MAX) : null;
} catch (Exception e) { } catch (Exception e) {
logger.error("Could not parse 'to' date, setting it to null.", e); logger.error("Could not parse 'to' date, setting it to null.", e);
to = null; to = null;
@ -389,7 +395,7 @@ public class ReportResource {
} }
private StreamingOutput getOut(Certificate cert, String realm, String reportId, JsonObject localeJ, private StreamingOutput getOut(Certificate cert, String realm, String reportId, JsonObject localeJ,
MapOfSets<String, String> filters, Date from, Date to) { MapOfSets<String, String> filters, ZonedDateTime from, ZonedDateTime to) {
return out -> { return out -> {
@ -404,7 +410,12 @@ public class ReportResource {
// add filters from request // add filters from request
if (report.hasDateRangeSelector()) { if (report.hasDateRangeSelector()) {
DateRange dateRange = new DateRange().from(from, true).to(to, true); DateRange dateRange = new DateRange();
if (from != null)
dateRange = dateRange.from(from, true);
if (to != null)
dateRange = dateRange.to(to, true);
report.dateRange(dateRange); report.dateRange(dateRange);
} }