comparison gnv-artifacts/src/main/java/de/intevation/gnv/chart/TimeSeriesChart.java @ 334:e37930705daa

Changed the way of adding data to charts. Same parameters have one axis - not each parameter its own one. gnv-artifacts/trunk@400 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Mon, 07 Dec 2009 17:03:24 +0000
parents 19571fd1d0e8
children e964a3d8f7bc
comparison
equal deleted inserted replaced
333:19571fd1d0e8 334:e37930705daa
2 2
3 import java.text.DateFormat; 3 import java.text.DateFormat;
4 import java.text.SimpleDateFormat; 4 import java.text.SimpleDateFormat;
5 import java.util.Collection; 5 import java.util.Collection;
6 import java.util.Date; 6 import java.util.Date;
7 import java.util.HashMap;
7 import java.util.Iterator; 8 import java.util.Iterator;
8 import java.util.Locale; 9 import java.util.Locale;
9 10
10 import org.apache.log4j.Logger; 11 import org.apache.log4j.Logger;
11 12
20 import org.jfree.data.time.TimeSeries; 21 import org.jfree.data.time.TimeSeries;
21 import org.jfree.data.time.Minute; 22 import org.jfree.data.time.Minute;
22 import org.jfree.data.time.TimeSeriesCollection; 23 import org.jfree.data.time.TimeSeriesCollection;
23 24
24 import de.intevation.gnv.geobackend.base.Result; 25 import de.intevation.gnv.geobackend.base.Result;
26 import de.intevation.gnv.transition.describedata.KeyValueDescibeData;
25 import de.intevation.gnv.timeseries.gap.TimeGap; 27 import de.intevation.gnv.timeseries.gap.TimeGap;
26 28
27 29
28 /** 30 /**
29 * @author Ingo Weinzierl <ingo.weinzierl@intevation.de> 31 * @author Ingo Weinzierl <ingo.weinzierl@intevation.de>
60 this.timeGaps = timeGaps; 62 this.timeGaps = timeGaps;
61 this.locale = locale; 63 this.locale = locale;
62 this.PLOT_ORIENTATION = PlotOrientation.VERTICAL; 64 this.PLOT_ORIENTATION = PlotOrientation.VERTICAL;
63 this.linesVisible = linesVisible; 65 this.linesVisible = linesVisible;
64 this.shapesVisible = shapesVisible; 66 this.shapesVisible = shapesVisible;
67 this.datasets = new HashMap();
65 } 68 }
66 69
67 70
68 protected void initChart() { 71 protected void initChart() {
69 chart = ChartFactory.createTimeSeriesChart( 72 chart = ChartFactory.createTimeSeriesChart(
112 if(series != null) { 115 if(series != null) {
113 // add gaps before adding series to chart 116 // add gaps before adding series to chart
114 startDate = results[startPos].getDate("XORDINATE"); 117 startDate = results[startPos].getDate("XORDINATE");
115 endDate = results[endPos-1].getDate("XORDINATE"); 118 endDate = results[endPos-1].getDate("XORDINATE");
116 addGaps(results,series,startDate,endDate,startPos,endPos); 119 addGaps(results,series,startDate,endDate,startPos,endPos);
117 addSeries(series, idx); 120 addSeries(series, seriesName, idx);
118 121
119 prepareAxis(((String)series.getKey()), idx);
120 adjustRenderer(idx++, linesVisible, shapesVisible);
121 startPos = endPos + 1; 122 startPos = endPos + 1;
122 } 123 }
123 124
124 // prepare variables for next plot 125 // prepare variables for next plot
125 breakPoint1 = row.getString("GROUP1"); 126 breakPoint1 = row.getString("GROUP1");
132 breakPoint3 133 breakPoint3
133 ); 134 );
134 135
135 log.debug("next dataset is '" + seriesName + "'"); 136 log.debug("next dataset is '" + seriesName + "'");
136 series = new TimeSeries(seriesName, Minute.class); 137 series = new TimeSeries(seriesName, Minute.class);
137
138 // set values of start date and start position in collection for
139 // next parameter
140 } 138 }
141 139
142 addValue(row, series); 140 addValue(row, series);
143 endPos++; 141 endPos++;
144 } 142 }
145 143
146 // add the last dataset if existing to plot and prepare its axis 144 // add the last dataset if existing to plot and prepare its axis
147 startDate = results[startPos].getDate("XORDINATE"); 145 startDate = results[startPos].getDate("XORDINATE");
148 endDate = results[endPos-1].getDate("XORDINATE"); 146 endDate = results[endPos-1].getDate("XORDINATE");
149 addGaps(results, series, startDate, endDate, startPos, endPos); 147 addGaps(results, series, startDate, endDate, startPos, endPos);
150 addSeries(series, idx); 148 addSeries(series, seriesName, idx);
151 149
152 if (series != null) { 150 addDatasets();
153 prepareAxis(((String)series.getKey()), idx);
154 adjustRenderer(idx++, linesVisible, shapesVisible);
155 }
156 } 151 }
157 152
158 153
159 protected void addValue(Result row, Series series) { 154 protected void addValue(Result row, Series series) {
160 ((TimeSeries) series).addOrUpdate( 155 ((TimeSeries) series).addOrUpdate(
162 row.getDouble("YORDINATE") 157 row.getDouble("YORDINATE")
163 ); 158 );
164 } 159 }
165 160
166 161
167 protected void addSeries(Series series, int idx) { 162 protected void addSeries(Series series, String label, int idx) {
168 log.debug("add series to timeseries chart"); 163 log.debug("add series (" + label + ")to timeseries chart");
169 XYPlot plot = chart.getXYPlot();
170 164
171 if (series == null) { 165 if (series == null) {
172 log.warn("no data to add"); 166 log.warn("no data to add");
173 return; 167 return;
174 } 168 }
175 169
176 TimeSeriesCollection tsc = new TimeSeriesCollection((TimeSeries)series); 170 TimeSeriesCollection tsc = null;
177 plot.setDataset(idx, tsc); 171
172 String parameter = findParameter(label);
173 if (datasets.containsKey(parameter))
174 tsc = (TimeSeriesCollection) datasets.get(parameter);
175 else
176 tsc = new TimeSeriesCollection();
177
178 tsc.addSeries((TimeSeries) series);
179 datasets.put(parameter, tsc);
180 }
181
182
183 protected void addDatasets() {
184 Iterator iter = parameters.iterator();
185 XYPlot plot = chart.getXYPlot();
186 int idx = 0;
187
188 TimeSeriesCollection tsc = null;
189 KeyValueDescibeData data = null;
190 String key = null;
191 while (iter.hasNext()) {
192 data = (KeyValueDescibeData) iter.next();
193 key = data.getValue();
194
195 if (datasets.containsKey(key)) {
196 tsc = (TimeSeriesCollection)datasets.get(key);
197 plot.setDataset(idx, tsc );
198 log.debug("Added " + key + " parameter to plot.");
199 prepareAxis(key, idx);
200 adjustRenderer(
201 idx++,
202 tsc.getSeriesCount(),
203 linesVisible,
204 shapesVisible
205 );
206 }
207 }
178 } 208 }
179 209
180 210
181 protected void localizeDomainAxis(Axis axis, Locale locale) { 211 protected void localizeDomainAxis(Axis axis, Locale locale) {
182 if (locale == null) 212 if (locale == null)

http://dive4elements.wald.intevation.org