Mercurial > dive4elements > gnv-client
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 : |