Mercurial > dive4elements > river
diff artifacts/src/main/java/org/dive4elements/river/artifacts/services/DynamicMainValuesTimeRangeDeterminationService.java @ 9494:879c902c4a2d
Changed main value calculations from calendar year to Abflussjahr, modified time range determination accordingly
author | mschaefer |
---|---|
date | Mon, 24 Sep 2018 18:01:10 +0200 |
parents | 7369d6ae3f87 |
children | c57caff9b00b |
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/services/DynamicMainValuesTimeRangeDeterminationService.java Fri Sep 21 18:19:41 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/services/DynamicMainValuesTimeRangeDeterminationService.java Mon Sep 24 18:01:10 2018 +0200 @@ -60,6 +60,10 @@ private static class GaugeInfo { protected final String errorMsg; protected final Gauge gauge; + /** + * New year of the first year for which the gauge has complete discharge data, including november+december of the year + * before + */ protected final Date startdate; protected final Date enddate; @@ -83,12 +87,13 @@ // Query the gauge's daily Q values String globalErrorMsg = ""; final List<GaugeInfoResult.GaugeInfo> gaugeResults = new ArrayList<>(); - Date min = startTime; + final Date qStartTime = DateUtils.getAbflussYear(startTime)[0]; + Date min = qStartTime; Date max = endTime; for (final Gauge gauge : gauges) { - final Date[] gaugeDates = DailyDischargeValue.getTimePeriod(gauge, startTime, endTime); + final Date[] gaugeDates = DailyDischargeValue.getTimePeriod(gauge, qStartTime, endTime); if (gaugeDates[0] == null) { final String msg = Resources.getMsg(meta, "bundu.wst_no_data_at_all", "bundu.wst_no_data_at_all", gauge.getName()); final GaugeInfoResult.GaugeInfo gi = new GaugeInfoResult.GaugeInfo(msg, gauge, null, null); @@ -98,24 +103,26 @@ continue; } + final Date gaugeCalcStartDate = DateUtils.getNextAbflussYear(gaugeDates[0])[0]; if (gaugeDates[0].getTime() > min.getTime()) - min = gaugeDates[0]; + min = gaugeCalcStartDate; if (gaugeDates[1].getTime() < max.getTime()) max = gaugeDates[1]; String errormsg = null; - if ((gaugeDates[1].getTime() < endTime.getTime()) || (gaugeDates[0].getTime() > startTime.getTime())) - errormsg = makeDoesNotCoverErrorMsg(gaugeDates[0], gaugeDates[1], meta); + if ((gaugeDates[1].getTime() < endTime.getTime()) || (gaugeDates[0].getTime() > qStartTime.getTime())) + errormsg = makeDoesNotCoverErrorMsg(DateUtils.getAbflussYearFromDate(gaugeCalcStartDate), DateUtils.getYearFromDate(gaugeDates[1]), meta); - gaugeResults.add(new GaugeInfoResult.GaugeInfo(errormsg, gauge, gaugeDates[0], gaugeDates[1])); + gaugeResults.add(new GaugeInfoResult.GaugeInfo(errormsg, gauge, DateUtils.getNextNewYear(gaugeCalcStartDate), gaugeDates[1])); } // common Range and correct errorMsg + min = DateUtils.getNextNewYear(min); final List<GaugeInfoResult.GaugeInfo> gaugeResultsSecondTurn = new ArrayList<>(); for (final GaugeInfoResult.GaugeInfo gi : gaugeResults) { gaugeResultsSecondTurn - .add(new GaugeInfoResult.GaugeInfo(gi.errorMsg, gi.gauge, gi.startdate != null ? min : null, gi.enddate != null ? max : null)); + .add(new GaugeInfoResult.GaugeInfo(gi.errorMsg, gi.gauge, gi.startdate != null ? min : null, gi.enddate != null ? max : null)); } if (globalErrorMsg.isEmpty() && (min.getTime() > max.getTime())) globalErrorMsg = getMsg(meta, "bundu.wst.gauge_timeranges_disjoint"); @@ -130,9 +137,9 @@ return result; } - private String makeDoesNotCoverErrorMsg(final Date start, final Date end, final CallMeta meta) { + private String makeDoesNotCoverErrorMsg(final int startYear, final int endYear, final CallMeta meta) { final String msgkey = "bundu.wst.range_does_not_cover"; - return Resources.getMsg(meta, msgkey, msgkey, DateUtils.getYearFromDate(start), DateUtils.getYearFromDate(end)); + return Resources.getMsg(meta, msgkey, msgkey, startYear, endYear); } @Override