comparison gnv-artifacts/src/main/java/de/intevation/gnv/chart/TimeSeriesVectorChart.java @ 1040:70653c29fc1d

Finished vector support for timeseriespoints (Issue27). gnv-artifacts/trunk@1112 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Wed, 19 May 2010 14:05:33 +0000
parents
children f953c9a559d8
comparison
equal deleted inserted replaced
1039:3be83ac4cfde 1040:70653c29fc1d
1 package de.intevation.gnv.chart;
2
3 import de.intevation.gnv.geobackend.base.Result;
4 import de.intevation.gnv.geobackend.base.ResultDescriptor;
5
6 import java.util.Collection;
7 import java.util.Date;
8 import java.util.Iterator;
9 import java.util.Locale;
10
11 import org.apache.log4j.Logger;
12
13 import org.jfree.chart.ChartTheme;
14 import org.jfree.chart.plot.XYPlot;
15
16 import org.jfree.data.time.Minute;
17 import org.jfree.data.time.TimeSeries;
18 import org.jfree.data.time.TimeSeriesCollection;
19
20
21 /**
22 * This class is used to create timeseries charts that contain components of a
23 * vector parameter. The domain axis contains multiple date/time objects.
24 *
25 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
26 */
27 public class TimeSeriesVectorChart extends TimeSeriesChart {
28
29 private static Logger logger =Logger.getLogger(TimeSeriesVectorChart.class);
30
31 public TimeSeriesVectorChart(
32 ChartLabels labels,
33 ChartTheme theme,
34 Collection parameters,
35 Collection measurements,
36 Collection dates,
37 Collection result,
38 Collection timeGaps,
39 Locale locale,
40 boolean linesVisible,
41 boolean shapesVisible
42 ) {
43 super(labels, theme, parameters, measurements, dates, result,
44 timeGaps, locale, linesVisible, shapesVisible);
45 }
46
47
48 @Override
49 protected void initData() {
50 logger.debug("init data for timeseries vector chart");
51
52 Iterator iter = resultSet.iterator();
53 Result row = null;
54 String seriesName = null;
55 TimeSeries series = null;
56
57 int idx = 0;
58 int startPos = 0;
59 int endPos = 0;
60 Date startDate = null;
61 Date endDate = null;
62
63 ResultDescriptor rd = null;
64 int idxSeries = -1;
65 int idxX = -1;
66 int idxY = -1;
67
68 Result[] results =
69 (Result[]) resultSet.toArray(new Result[resultSet.size()]);
70
71 while (iter.hasNext()) {
72 row = (Result) iter.next();
73
74 if (rd == null) {
75 rd = row.getResultDescriptor();
76 idxSeries = rd.getColumnIndex("SERIES");
77 idxX = rd.getColumnIndex("XORDINATE");
78 idxY = rd.getColumnIndex("YORDINATE");
79 }
80
81 // add current data to plot and prepare for next one
82 if (!row.getString(idxSeries).equals(seriesName)) {
83 logger.debug("prepare data/plot for next dataset");
84
85 if(series != null) {
86 // add gaps before adding series to chart
87 startDate = results[startPos].getDate(idxX);
88 endDate = results[endPos-1].getDate(idxX);
89 addGaps(results,series,startDate,endDate,startPos,endPos);
90 addSeries(series, seriesName, idx);
91
92 startPos = endPos + 1;
93 }
94
95 // prepare variables for next plot
96 seriesName = row.getString(idxSeries);
97
98 logger.debug("next dataset is '" + seriesName + "'");
99 series = new TimeSeries(seriesName, Minute.class);
100 }
101
102 addValue(row, series);
103 storeMaxRange(ranges, row.getDouble(idxY), seriesName);
104 endPos++;
105 }
106
107 if (startPos < results.length && endPos-1 < results.length) {
108 // add the last dataset if existing to plot and prepare its axis
109 startDate = results[startPos].getDate(idxX);
110 endDate = results[endPos-1].getDate(idxX);
111 addGaps(results, series, startDate, endDate, startPos, endPos);
112 addSeries(series, seriesName, idx);
113 }
114
115 addDatasets();
116 }
117
118
119 @Override
120 protected void addDatasets() {
121 XYPlot plot = chart.getXYPlot();
122 int idx = 0;
123
124 TimeSeriesCollection tsc = null;
125 Iterator iter = datasets.keySet().iterator();
126
127 while (iter.hasNext()) {
128 String key = (String) iter.next();
129 tsc = (TimeSeriesCollection)datasets.get(key);
130 plot.setDataset(idx, tsc );
131 logger.debug("Added " + key + " parameter to plot.");
132 prepareAxis(key, idx);
133 adjustRenderer(
134 idx++,
135 tsc.getSeriesCount(),
136 linesVisible,
137 shapesVisible
138 );
139 }
140 }
141 }
142 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org