comparison gnv-artifacts/src/main/java/de/intevation/gnv/chart/VerticalProfileChart.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 3ea030aafe65
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.data.xy.XYSeries;
11 import org.jfree.data.general.Series;
12 import org.jfree.data.xy.XYDataset;
13 import org.jfree.data.xy.XYSeriesCollection;
14 import org.jfree.chart.plot.XYPlot;
15 import org.jfree.chart.plot.PlotOrientation;
16
17 import de.intevation.gnv.geobackend.base.Result;
18
19
20 /**
21 * @author Ingo Weinzierl <ingo.weinzierl@intevation.de>
22 */
23 public class VerticalProfileChart
24 extends AbstractXYLineChart
25 {
26 private static Logger log = Logger.getLogger(VerticalProfileChart.class);
27
28
29 public VerticalProfileChart(
30 ChartLabels labels,
31 ChartTheme theme,
32 Collection parameters,
33 Collection measurements,
34 Collection result,
35 Collection dates,
36 Locale locale
37 ) {
38 this.labels = labels;
39 this.theme = theme;
40 this.parameters = parameters;
41 this.measurements = measurements;
42 this.resultSet = result;
43 this.dates = dates;
44 this.locale = locale;
45 this.PLOT_ORIENTATION = PlotOrientation.HORIZONTAL;
46 }
47
48
49 protected void initData() {
50 log.debug("init data for VerticalProfileChart");
51
52 String breakPoint1 = null;
53 String breakPoint2 = null;
54 String breakPoint3 = null;
55
56 Iterator iter = resultSet.iterator();
57 Result row = null;
58 String seriesName = null;
59 XYSeries series = null;
60
61 int idx = 0;
62
63 while (iter.hasNext()) {
64 row = (Result) iter.next();
65
66 // add current data to plot and prepare for next one
67 if (!row.getString("GROUP1").equals(breakPoint1) ||
68 !row.getString("GROUP2").equals(breakPoint2) ||
69 !row.getString("GROUP3").equals(breakPoint3)
70 ) {
71 log.debug("prepare data/plot for next dataset");
72
73 if(series != null) {
74 addSeries(series, idx);
75 prepareAxis(((String)series.getKey()), idx++);
76 }
77
78 // prepare variables for next plot
79 breakPoint1 = row.getString("GROUP1");
80 breakPoint2 = row.getString("GROUP2");
81 breakPoint3 = row.getString("GROUP3");
82
83 seriesName = createSeriesName(
84 breakPoint1,
85 breakPoint2,
86 breakPoint3
87 );
88
89 log.debug("next dataset is '" + seriesName + "'");
90 series = new XYSeries(seriesName);
91 }
92
93 addValue(row, series);
94 }
95
96 addSeries(series, idx);
97 prepareAxis(((String)series.getKey()), idx++);
98 }
99
100
101 protected void addValue(Result row, Series series) {
102 // TODO look for gaps between two values
103 ((XYSeries) series).add(
104 row.getDouble("XORDINATE"),
105 row.getDouble("YORDINATE")
106 );
107 }
108
109
110 protected void addSeries(Series series, int idx) {
111 log.debug("add series to verticalprofile chart");
112 XYPlot plot = chart.getXYPlot();
113
114 if (series == null) {
115 log.warn("no data to add");
116 return;
117 }
118
119 XYSeriesCollection xysc = new XYSeriesCollection((XYSeries)series);
120 plot.setDataset(idx, xysc);
121 }
122
123
124 protected String createSeriesName(
125 String breakPoint1,
126 String breakPoint2,
127 String breakPoint3
128 ) {
129 log.debug("create seriesname of verticalprofile chart");
130 return findValueTitle(parameters, breakPoint1) +
131 " " +
132 findValueTitle(measurements, breakPoint2) +
133 "m";
134 }
135 }
136 // vim:set ts=4 sw=4 si et sta sts=4 fenc=latin1 :

http://dive4elements.wald.intevation.org