comparison gnv-artifacts/src/main/java/de/intevation/gnv/histogram/HistogramHelper.java @ 1081:846b2b70b2e0

Implemented histogram creation for vectorial timeseries. gnv-artifacts/trunk@1183 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Wed, 09 Jun 2010 09:51:05 +0000
parents 01e26528bb39
children f953c9a559d8
comparison
equal deleted inserted replaced
1080:01e26528bb39 1081:846b2b70b2e0
1 package de.intevation.gnv.histogram; 1 package de.intevation.gnv.histogram;
2
3 import de.intevation.artifacts.CallContext;
4
5 import de.intevation.gnv.artifacts.ressource.RessourceFactory;
6
7 import de.intevation.gnv.chart.ChartLabels;
2 8
3 import de.intevation.gnv.geobackend.base.Result; 9 import de.intevation.gnv.geobackend.base.Result;
4 import de.intevation.gnv.geobackend.base.ResultDescriptor; 10 import de.intevation.gnv.geobackend.base.ResultDescriptor;
5 11
6 import de.intevation.gnv.state.describedata.KeyValueDescibeData; 12 import de.intevation.gnv.state.describedata.KeyValueDescibeData;
7 13
8 import java.util.ArrayList; 14 import java.util.ArrayList;
9 import java.util.Collection; 15 import java.util.Collection;
10 import java.util.Iterator; 16 import java.util.Iterator;
11 import java.util.List; 17 import java.util.List;
18 import java.util.Locale;
12 19
13 import org.apache.log4j.Logger; 20 import org.apache.log4j.Logger;
14 21
15 /** 22 /**
16 * This class supports some helper methods for histogram charts. 23 * This class supports some helper methods for histogram charts.
234 (String) data[0], 241 (String) data[0],
235 "", 242 "",
236 "", 243 "",
237 fac.getRessource(locale, "histogram.axis.range.title", "")); 244 fac.getRessource(locale, "histogram.axis.range.title", ""));
238 } 245 }
246
247
248 public static Object[][] prepareVectorialHistogramData(Collection input) {
249 List names = new ArrayList<String>();
250 List data = new ArrayList<Double[]>();
251
252 if (logger.isDebugEnabled()) {
253 logger.debug("######### prepare vectorial histogram data #######");
254 logger.debug("Input data size: " + input.size());
255 }
256
257 if (input == null) {
258 return new Object[0][0];
259 }
260
261 int sIdx = -1;
262 int yIdx = -1;
263
264 String series = null;
265
266 try {
267 Iterator iter = input.iterator();
268
269 if (iter.hasNext()) {
270 Result row = (Result) iter.next();
271 Result previousRow = row;
272
273 if (sIdx == -1 || yIdx == -1) {
274 ResultDescriptor rd = row.getResultDescriptor();
275 sIdx = rd.getColumnIndex("SERIES");
276 yIdx = rd.getColumnIndex("YORDINATE");
277
278 if (sIdx == -1 || yIdx == -1) {
279 return new Object[0][0];
280 }
281 }
282
283 List values = new ArrayList<Double>();
284 while (iter.hasNext()) {
285 row = (Result) iter.next();
286
287 // found new series
288 if (series != null && !series.equals(row.getString(sIdx))) {
289
290 // add values and parameter name
291 data.add((Double[])
292 values.toArray(new Double[values.size()]));
293 names.add(series);
294
295 if (logger.isDebugEnabled()) {
296 logger.debug(" --- series name: " + series);
297 logger.debug(" --- series items: " + values.size());
298 }
299
300 values.clear();
301 }
302
303 Double value = row.getDouble(yIdx);
304 if (value != null)
305 values.add(value);
306
307 series = row.getString(sIdx);
308 }
309
310 if (logger.isDebugEnabled()) {
311 logger.debug(" --- series name: " + series);
312 logger.debug(" --- series items: " + values.size());
313 }
314
315 data.add((Double[]) values.toArray(new Double[values.size()]));
316 names.add(series);
317 }
318 }
319 catch (Exception e) {
320 logger.error(e.getMessage(), e);
321 }
322
323 int count = data.size();
324 logger.debug(" === Found total: " + count);
325 Object[][] obj = new Object[count][2];
326 for (int i = 0; i < count; i++) {
327 obj[i][0] = names.get(i);
328 obj[i][1] = (Double[]) data.get(i);
329 }
330
331 return obj;
332 }
239 } 333 }
240 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 : 334 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org