annotate gnv-artifacts/src/main/java/de/intevation/gnv/chart/TimeSeriesChart.java @ 330:477c0c46605e

Cleaned up ChangeLog a bit. gnv-artifacts/trunk@396 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Fri, 04 Dec 2009 09:04:10 +0000
parents 42a5269636eb
children 19571fd1d0e8
rev   line source
298
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
1 package de.intevation.gnv.chart;
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
2
315
63f8b3fb7d9a Localization of chart axis with locale which fits best to server and browser settings.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 312
diff changeset
3 import java.text.DateFormat;
63f8b3fb7d9a Localization of chart axis with locale which fits best to server and browser settings.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 312
diff changeset
4 import java.text.SimpleDateFormat;
298
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
5 import java.util.Collection;
329
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
6 import java.util.Date;
298
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
7 import java.util.Iterator;
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
8 import java.util.Locale;
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
9
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
10 import org.apache.log4j.Logger;
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
11
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
12 import org.jfree.chart.ChartTheme;
312
19fbd03544ea Generate timeseries chart in TimeSeriesChart class instead of AbstractXYChart to instantiate special timeseries charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 310
diff changeset
13 import org.jfree.chart.ChartFactory;
19fbd03544ea Generate timeseries chart in TimeSeriesChart class instead of AbstractXYChart to instantiate special timeseries charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 310
diff changeset
14 import org.jfree.chart.JFreeChart;
315
63f8b3fb7d9a Localization of chart axis with locale which fits best to server and browser settings.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 312
diff changeset
15 import org.jfree.chart.axis.Axis;
63f8b3fb7d9a Localization of chart axis with locale which fits best to server and browser settings.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 312
diff changeset
16 import org.jfree.chart.axis.DateAxis;
298
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
17 import org.jfree.chart.plot.XYPlot;
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
18 import org.jfree.chart.plot.PlotOrientation;
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
19 import org.jfree.data.general.Series;
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
20 import org.jfree.data.time.TimeSeries;
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
21 import org.jfree.data.time.Minute;
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
22 import org.jfree.data.time.TimeSeriesCollection;
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
23
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
24 import de.intevation.gnv.geobackend.base.Result;
329
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
25 import de.intevation.gnv.timeseries.gap.TimeGap;
298
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
26
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
27
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
28 /**
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
29 * @author Ingo Weinzierl <ingo.weinzierl@intevation.de>
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
30 */
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
31 public class TimeSeriesChart
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
32 extends AbstractXYLineChart
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
33 {
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
34
315
63f8b3fb7d9a Localization of chart axis with locale which fits best to server and browser settings.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 312
diff changeset
35 private static final String DATE_FORMAT = "dd-MMM";
63f8b3fb7d9a Localization of chart axis with locale which fits best to server and browser settings.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 312
diff changeset
36
329
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
37 private static final long NO_TIME_GAP = Long.MAX_VALUE - 1000;
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
38
298
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
39 private static Logger log = Logger.getLogger(TimeSeriesChart.class);
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
40
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
41
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
42 public TimeSeriesChart(
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
43 ChartLabels labels,
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
44 ChartTheme theme,
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
45 Collection parameters,
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
46 Collection measurements,
310
45625b5cd6d4 Added timegap definitions to charts. Adapted constructors and constructor calls.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 298
diff changeset
47 Collection dates,
298
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
48 Collection result,
310
45625b5cd6d4 Added timegap definitions to charts. Adapted constructors and constructor calls.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 298
diff changeset
49 Collection timeGaps,
327
22a6493e8460 New options in chart template: visibility of lines and points in charts and point's size.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 315
diff changeset
50 Locale locale,
22a6493e8460 New options in chart template: visibility of lines and points in charts and point's size.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 315
diff changeset
51 boolean linesVisible,
22a6493e8460 New options in chart template: visibility of lines and points in charts and point's size.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 315
diff changeset
52 boolean shapesVisible
298
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
53 ) {
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
54 this.labels = labels;
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
55 this.theme = theme;
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
56 this.parameters = parameters;
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
57 this.measurements = measurements;
310
45625b5cd6d4 Added timegap definitions to charts. Adapted constructors and constructor calls.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 298
diff changeset
58 this.dates = dates;
298
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
59 this.resultSet = result;
310
45625b5cd6d4 Added timegap definitions to charts. Adapted constructors and constructor calls.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 298
diff changeset
60 this.timeGaps = timeGaps;
298
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
61 this.locale = locale;
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
62 this.PLOT_ORIENTATION = PlotOrientation.VERTICAL;
327
22a6493e8460 New options in chart template: visibility of lines and points in charts and point's size.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 315
diff changeset
63 this.linesVisible = linesVisible;
22a6493e8460 New options in chart template: visibility of lines and points in charts and point's size.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 315
diff changeset
64 this.shapesVisible = shapesVisible;
298
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
65 }
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
66
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
67
312
19fbd03544ea Generate timeseries chart in TimeSeriesChart class instead of AbstractXYChart to instantiate special timeseries charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 310
diff changeset
68 public JFreeChart generateChart() {
19fbd03544ea Generate timeseries chart in TimeSeriesChart class instead of AbstractXYChart to instantiate special timeseries charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 310
diff changeset
69 log.debug("generate timeseries chart");
19fbd03544ea Generate timeseries chart in TimeSeriesChart class instead of AbstractXYChart to instantiate special timeseries charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 310
diff changeset
70
19fbd03544ea Generate timeseries chart in TimeSeriesChart class instead of AbstractXYChart to instantiate special timeseries charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 310
diff changeset
71 if (chart != null)
19fbd03544ea Generate timeseries chart in TimeSeriesChart class instead of AbstractXYChart to instantiate special timeseries charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 310
diff changeset
72 return chart;
19fbd03544ea Generate timeseries chart in TimeSeriesChart class instead of AbstractXYChart to instantiate special timeseries charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 310
diff changeset
73
19fbd03544ea Generate timeseries chart in TimeSeriesChart class instead of AbstractXYChart to instantiate special timeseries charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 310
diff changeset
74 chart = ChartFactory.createTimeSeriesChart(
19fbd03544ea Generate timeseries chart in TimeSeriesChart class instead of AbstractXYChart to instantiate special timeseries charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 310
diff changeset
75 labels.getTitle(),
19fbd03544ea Generate timeseries chart in TimeSeriesChart class instead of AbstractXYChart to instantiate special timeseries charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 310
diff changeset
76 labels.getDomainAxisLabel(),
19fbd03544ea Generate timeseries chart in TimeSeriesChart class instead of AbstractXYChart to instantiate special timeseries charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 310
diff changeset
77 null,
19fbd03544ea Generate timeseries chart in TimeSeriesChart class instead of AbstractXYChart to instantiate special timeseries charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 310
diff changeset
78 null,
19fbd03544ea Generate timeseries chart in TimeSeriesChart class instead of AbstractXYChart to instantiate special timeseries charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 310
diff changeset
79 true,
19fbd03544ea Generate timeseries chart in TimeSeriesChart class instead of AbstractXYChart to instantiate special timeseries charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 310
diff changeset
80 false,
19fbd03544ea Generate timeseries chart in TimeSeriesChart class instead of AbstractXYChart to instantiate special timeseries charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 310
diff changeset
81 false
19fbd03544ea Generate timeseries chart in TimeSeriesChart class instead of AbstractXYChart to instantiate special timeseries charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 310
diff changeset
82 );
19fbd03544ea Generate timeseries chart in TimeSeriesChart class instead of AbstractXYChart to instantiate special timeseries charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 310
diff changeset
83
19fbd03544ea Generate timeseries chart in TimeSeriesChart class instead of AbstractXYChart to instantiate special timeseries charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 310
diff changeset
84 theme.apply(chart);
19fbd03544ea Generate timeseries chart in TimeSeriesChart class instead of AbstractXYChart to instantiate special timeseries charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 310
diff changeset
85 initData();
19fbd03544ea Generate timeseries chart in TimeSeriesChart class instead of AbstractXYChart to instantiate special timeseries charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 310
diff changeset
86
19fbd03544ea Generate timeseries chart in TimeSeriesChart class instead of AbstractXYChart to instantiate special timeseries charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 310
diff changeset
87 return chart;
19fbd03544ea Generate timeseries chart in TimeSeriesChart class instead of AbstractXYChart to instantiate special timeseries charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 310
diff changeset
88 }
19fbd03544ea Generate timeseries chart in TimeSeriesChart class instead of AbstractXYChart to instantiate special timeseries charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 310
diff changeset
89
19fbd03544ea Generate timeseries chart in TimeSeriesChart class instead of AbstractXYChart to instantiate special timeseries charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 310
diff changeset
90
298
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
91 protected void initData() {
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
92 log.debug("init data for timeseries chart");
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
93
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
94 String breakPoint1 = null;
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
95 String breakPoint2 = null;
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
96 String breakPoint3 = null;
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
97
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
98 Iterator iter = resultSet.iterator();
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
99 Result row = null;
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
100 String seriesName = null;
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
101 TimeSeries series = null;
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
102
329
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
103 int idx = 0;
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
104 int startPos = 0;
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
105 int endPos = 0;
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
106 Date startDate = null;
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
107 Date endDate = null;
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
108
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
109 Result[] results =
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
110 (Result[]) resultSet.toArray(new Result[resultSet.size()]);
298
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
111
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
112 while (iter.hasNext()) {
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
113 row = (Result) iter.next();
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
114
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
115 // add current data to plot and prepare for next one
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
116 if (!row.getString("GROUP1").equals(breakPoint1) ||
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
117 !row.getString("GROUP2").equals(breakPoint2) ||
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
118 !row.getString("GROUP3").equals(breakPoint3)
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
119 ) {
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
120 log.debug("prepare data/plot for next dataset");
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
121
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
122 if(series != null) {
329
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
123 // add gaps before adding series to chart
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
124 startDate = results[startPos].getDate("XORDINATE");
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
125 endDate = results[endPos-1].getDate("XORDINATE");
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
126 addGaps(results,series,startDate,endDate,startPos,endPos);
298
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
127 addSeries(series, idx);
329
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
128
327
22a6493e8460 New options in chart template: visibility of lines and points in charts and point's size.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 315
diff changeset
129 prepareAxis(((String)series.getKey()), idx);
22a6493e8460 New options in chart template: visibility of lines and points in charts and point's size.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 315
diff changeset
130 adjustRenderer(idx++, linesVisible, shapesVisible);
329
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
131 startPos = endPos + 1;
298
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
132 }
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
133
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
134 // prepare variables for next plot
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
135 breakPoint1 = row.getString("GROUP1");
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
136 breakPoint2 = row.getString("GROUP2");
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
137 breakPoint3 = row.getString("GROUP3");
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
138
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
139 seriesName = createSeriesName(
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
140 breakPoint1,
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
141 breakPoint2,
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
142 breakPoint3
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
143 );
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
144
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
145 log.debug("next dataset is '" + seriesName + "'");
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
146 series = new TimeSeries(seriesName, Minute.class);
329
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
147
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
148 // set values of start date and start position in collection for
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
149 // next parameter
298
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
150 }
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
151
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
152 addValue(row, series);
329
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
153 endPos++;
298
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
154 }
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
155
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
156 // add the last dataset if existing to plot and prepare its axis
329
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
157 startDate = results[startPos].getDate("XORDINATE");
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
158 endDate = results[endPos-1].getDate("XORDINATE");
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
159 addGaps(results, series, startDate, endDate, startPos, endPos);
298
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
160 addSeries(series, idx);
310
45625b5cd6d4 Added timegap definitions to charts. Adapted constructors and constructor calls.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 298
diff changeset
161
327
22a6493e8460 New options in chart template: visibility of lines and points in charts and point's size.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 315
diff changeset
162 if (series != null) {
22a6493e8460 New options in chart template: visibility of lines and points in charts and point's size.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 315
diff changeset
163 prepareAxis(((String)series.getKey()), idx);
22a6493e8460 New options in chart template: visibility of lines and points in charts and point's size.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 315
diff changeset
164 adjustRenderer(idx++, linesVisible, shapesVisible);
22a6493e8460 New options in chart template: visibility of lines and points in charts and point's size.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 315
diff changeset
165 }
298
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
166 }
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
167
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
168
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
169 protected void addValue(Result row, Series series) {
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
170 ((TimeSeries) series).addOrUpdate(
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
171 new Minute(row.getDate("XORDINATE")),
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
172 row.getDouble("YORDINATE")
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
173 );
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
174 }
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
175
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
176
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
177 protected void addSeries(Series series, int idx) {
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
178 log.debug("add series to timeseries chart");
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
179 XYPlot plot = chart.getXYPlot();
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
180
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
181 if (series == null) {
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
182 log.warn("no data to add");
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
183 return;
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
184 }
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
185
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
186 TimeSeriesCollection tsc = new TimeSeriesCollection((TimeSeries)series);
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
187 plot.setDataset(idx, tsc);
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
188 }
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
189
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
190
315
63f8b3fb7d9a Localization of chart axis with locale which fits best to server and browser settings.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 312
diff changeset
191 protected void localizeDomainAxis(Axis axis, Locale locale) {
63f8b3fb7d9a Localization of chart axis with locale which fits best to server and browser settings.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 312
diff changeset
192 if (locale == null)
63f8b3fb7d9a Localization of chart axis with locale which fits best to server and browser settings.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 312
diff changeset
193 return;
63f8b3fb7d9a Localization of chart axis with locale which fits best to server and browser settings.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 312
diff changeset
194
63f8b3fb7d9a Localization of chart axis with locale which fits best to server and browser settings.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 312
diff changeset
195 log.debug(
63f8b3fb7d9a Localization of chart axis with locale which fits best to server and browser settings.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 312
diff changeset
196 "Set language of axis [" + axis.getLabel() + "] " +
63f8b3fb7d9a Localization of chart axis with locale which fits best to server and browser settings.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 312
diff changeset
197 "to " + locale.toString()
63f8b3fb7d9a Localization of chart axis with locale which fits best to server and browser settings.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 312
diff changeset
198 );
63f8b3fb7d9a Localization of chart axis with locale which fits best to server and browser settings.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 312
diff changeset
199
63f8b3fb7d9a Localization of chart axis with locale which fits best to server and browser settings.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 312
diff changeset
200 DateFormat format = new SimpleDateFormat(DATE_FORMAT, locale);
63f8b3fb7d9a Localization of chart axis with locale which fits best to server and browser settings.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 312
diff changeset
201 ((DateAxis) axis).setDateFormatOverride(format);
63f8b3fb7d9a Localization of chart axis with locale which fits best to server and browser settings.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 312
diff changeset
202 }
63f8b3fb7d9a Localization of chart axis with locale which fits best to server and browser settings.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 312
diff changeset
203
63f8b3fb7d9a Localization of chart axis with locale which fits best to server and browser settings.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 312
diff changeset
204
298
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
205 protected String createSeriesName(
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
206 String breakPoint1,
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
207 String breakPoint2,
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
208 String breakPoint3
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
209 ) {
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
210 log.debug("create seriesname of timeseries chart");
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
211 return findValueTitle(parameters, breakPoint1) +
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
212 " " +
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
213 findValueTitle(measurements, breakPoint2) +
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
214 "m";
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
215 }
329
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
216
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
217
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
218 protected void addGaps(
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
219 Result[] results,
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
220 Series series,
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
221 Date startDate,
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
222 Date endDate,
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
223 int startPos,
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
224 int endPos
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
225 ) {
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
226 int gapID = results[startPos].getInteger("GAPID");
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
227 long maxDiff = calculateGapSize(
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
228 startDate, endDate, startPos, endPos, gapID
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
229 );
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
230
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
231 Date last = startDate;
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
232 for (int i = startPos+1; i < endPos; i++) {
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
233 Result res = results[i];
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
234 Date now = res.getDate("XORDINATE");
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
235
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
236 if ((now.getTime() - last.getTime()) > maxDiff) {
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
237 // add gap, add 1 minute to last date and add null value
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
238 log.info(
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
239 "Gap between " +
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
240 last.toString() + " and " + now.toString()
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
241 );
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
242 last.setTime(last.getTime() + 60000);
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
243 ((TimeSeries) series).addOrUpdate(new Minute(last), null);
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
244 }
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
245
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
246 last = now;
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
247 }
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
248 }
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
249
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
250
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
251 protected long calculateGapSize(
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
252 Date start,
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
253 Date end,
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
254 int startPos,
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
255 int endPos,
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
256 int gapID
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
257 ){
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
258 long maxGap = (end.getTime() - start.getTime()) / 20;
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
259 long interval = getTimeGapValue(start, end, startPos, endPos, gapID);
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
260
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
261 if (maxGap < interval)
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
262 maxGap = interval + 10;
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
263
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
264 return maxGap;
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
265 }
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
266
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
267
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
268 protected long getTimeGapValue(
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
269 Date dStart,
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
270 Date dEnd,
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
271 int pStart,
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
272 int pEnd,
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
273 int gapID
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
274 ){
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
275 long gap = 0;
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
276
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
277 if (gapID < 0 || gapID >= 99) {
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
278
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
279 if (gapID == -1) {
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
280 // no gaps in meshes
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
281 gap = NO_TIME_GAP;
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
282 }
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
283 else if (pEnd-pStart < 60) {
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
284 gap = (3/(pEnd-pStart)) * (dEnd.getTime() - dStart.getTime());
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
285 }
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
286 }
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
287 else{
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
288 Iterator it = timeGaps.iterator();
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
289
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
290 while (it.hasNext()) {
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
291 TimeGap tempTimeGap = (TimeGap) it.next();
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
292
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
293 if (tempTimeGap.getKey() == gapID){
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
294 String unit = tempTimeGap.getUnit();
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
295 int gapValue = tempTimeGap.getValue();
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
296
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
297 if (unit.equals(TimeGap.TIME_UNIT_MINUTE)) {
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
298 gap = gapValue * TimeGap.MINUTE_IN_MILLIS;
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
299 }
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
300 else if (unit.equals(TimeGap.TIME_UNIT_HOUR)) {
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
301 gap = gapValue * TimeGap.HOUR_IN_MILLIS;
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
302 }
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
303 else if (unit.equals(TimeGap.TIME_UNIT_DAY)) {
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
304 gap = gapValue * TimeGap.DAY_IN_MILLIS;
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
305 }
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
306 else if (unit.equals(TimeGap.TIME_UNIT_WEEK)) {
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
307 gap = gapValue * TimeGap.WEEK_IN_MILLIS;
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
308 }
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
309 else if (unit.equals(TimeGap.TIME_UNIT_MONTH)) {
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
310 gap = gapValue * (TimeGap.DAY_IN_MILLIS *30);
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
311 }
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
312 else if (unit.equals(TimeGap.TIME_UNIT_YEAR)) {
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
313 gap = gapValue * (TimeGap.DAY_IN_MILLIS *365);
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
314 }
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
315 break;
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
316 }
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
317 }
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
318 }
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
319
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
320 return gap;
42a5269636eb Added time gap detection to time series charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 327
diff changeset
321 }
298
80f7c5dc09c6 Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
322 }
315
63f8b3fb7d9a Localization of chart axis with locale which fits best to server and browser settings.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 312
diff changeset
323 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org