comparison gnv-artifacts/src/main/java/de/intevation/gnv/chart/TimeSeriesChart.java @ 298:80f7c5dc09c6

Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts. gnv-artifacts/trunk@352 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Thu, 19 Nov 2009 15:30:27 +0000
parents
children 45625b5cd6d4
comparison
equal deleted inserted replaced
297:3f43392df3f6 298:80f7c5dc09c6
1 package de.intevation.gnv.chart;
2
3 import java.util.Collection;
4 import java.util.Iterator;
5 import java.util.Locale;
6
7 import org.apache.log4j.Logger;
8
9 import org.jfree.chart.ChartTheme;
10 import org.jfree.chart.plot.XYPlot;
11 import org.jfree.chart.plot.PlotOrientation;
12 import org.jfree.data.general.Series;
13 import org.jfree.data.time.TimeSeries;
14 import org.jfree.data.time.Minute;
15 import org.jfree.data.time.TimeSeriesCollection;
16
17 import de.intevation.gnv.geobackend.base.Result;
18
19
20 /**
21 * @author Ingo Weinzierl <ingo.weinzierl@intevation.de>
22 */
23 public class TimeSeriesChart
24 extends AbstractXYLineChart
25 {
26
27 private static Logger log = Logger.getLogger(TimeSeriesChart.class);
28
29
30 public TimeSeriesChart(
31 ChartLabels labels,
32 ChartTheme theme,
33 Collection parameters,
34 Collection measurements,
35 Collection result,
36 Collection dates,
37 Locale locale
38 ) {
39 this.labels = labels;
40 this.theme = theme;
41 this.parameters = parameters;
42 this.measurements = measurements;
43 this.resultSet = result;
44 this.dates = dates;
45 this.locale = locale;
46 this.PLOT_ORIENTATION = PlotOrientation.VERTICAL;
47 }
48
49
50 protected void initData() {
51 log.debug("init data for timeseries chart");
52
53 String breakPoint1 = null;
54 String breakPoint2 = null;
55 String breakPoint3 = null;
56
57 Iterator iter = resultSet.iterator();
58 Result row = null;
59 String seriesName = null;
60 TimeSeries series = null;
61
62 int idx = 0;
63
64 while (iter.hasNext()) {
65 row = (Result) iter.next();
66
67 // add current data to plot and prepare for next one
68 if (!row.getString("GROUP1").equals(breakPoint1) ||
69 !row.getString("GROUP2").equals(breakPoint2) ||
70 !row.getString("GROUP3").equals(breakPoint3)
71 ) {
72 log.debug("prepare data/plot for next dataset");
73
74 if(series != null) {
75 addSeries(series, idx);
76 prepareAxis(((String)series.getKey()), idx++);
77 }
78
79 // prepare variables for next plot
80 breakPoint1 = row.getString("GROUP1");
81 breakPoint2 = row.getString("GROUP2");
82 breakPoint3 = row.getString("GROUP3");
83
84 seriesName = createSeriesName(
85 breakPoint1,
86 breakPoint2,
87 breakPoint3
88 );
89
90 log.debug("next dataset is '" + seriesName + "'");
91 series = new TimeSeries(seriesName, Minute.class);
92 }
93
94 addValue(row, series);
95 }
96
97 // add the last dataset if existing to plot and prepare its axis
98 addSeries(series, idx);
99 prepareAxis(((String)series.getKey()), idx++);
100 }
101
102
103 protected void addValue(Result row, Series series) {
104 // TODO look for gaps between two values
105 ((TimeSeries) series).addOrUpdate(
106 new Minute(row.getDate("XORDINATE")),
107 row.getDouble("YORDINATE")
108 );
109 }
110
111
112 protected void addSeries(Series series, int idx) {
113 log.debug("add series to timeseries chart");
114 XYPlot plot = chart.getXYPlot();
115
116 if (series == null) {
117 log.warn("no data to add");
118 return;
119 }
120
121 TimeSeriesCollection tsc = new TimeSeriesCollection((TimeSeries)series);
122 plot.setDataset(idx, tsc);
123 }
124
125
126 protected String createSeriesName(
127 String breakPoint1,
128 String breakPoint2,
129 String breakPoint3
130 ) {
131 log.debug("create seriesname of timeseries chart");
132 return findValueTitle(parameters, breakPoint1) +
133 " " +
134 findValueTitle(measurements, breakPoint2) +
135 "m";
136 }
137 }
138 // vim:set ts=4 sw=4 si et sta sts=4 fenc=latin1 :

http://dive4elements.wald.intevation.org