comparison flys-artifacts/src/main/java/de/intevation/flys/exports/TimeseriesChartGenerator.java @ 2238:23c7c51df772

Some more refactoring in XYChartGenerator and ChartGenerator; implemented necessary stuff in TimeseriesChartGenerator and return new empty instances of timeseries charts. flys-artifacts/trunk@3885 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Thu, 02 Feb 2012 15:44:13 +0000
parents c2b15d9c0f43
children 7e8e1d5384c0
comparison
equal deleted inserted replaced
2237:60615235e951 2238:23c7c51df772
1 package de.intevation.flys.exports; 1 package de.intevation.flys.exports;
2 2
3 import java.awt.Color;
4
5 import java.util.ArrayList;
6 import java.util.HashMap;
7 import java.util.List;
8 import java.util.Map;
3 9
4 import org.apache.log4j.Logger; 10 import org.apache.log4j.Logger;
5 11
12 import org.jfree.chart.ChartFactory;
6 import org.jfree.chart.JFreeChart; 13 import org.jfree.chart.JFreeChart;
7 import org.jfree.chart.axis.NumberAxis; 14 import org.jfree.chart.axis.NumberAxis;
15 import org.jfree.chart.plot.XYPlot;
16
17 import org.jfree.data.Range;
18 import org.jfree.data.time.TimeSeriesCollection;
19 import org.jfree.data.xy.XYDataset;
8 20
9 21
10 /** 22 /**
11 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> 23 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
12 */ 24 */
13 public abstract class TimeseriesChartGenerator extends ChartGenerator { 25 public abstract class TimeseriesChartGenerator extends ChartGenerator {
14 26
27
28 /**
29 * Inner class TimeseriesAxisDataset stores TimeSeriesCollection.
30 */
31 public class TimeseriesAxisDataset implements AxisDataset {
32
33 protected int axisSymbol;
34
35 protected List<TimeSeriesCollection> datasets;
36
37 protected Range range;
38
39 protected int plotAxisIndex;
40
41
42 public TimeseriesAxisDataset(int axisSymbol) {
43 this.axisSymbol = axisSymbol;
44 this.datasets = new ArrayList<TimeSeriesCollection>();
45 }
46
47
48 @Override
49 public void addDataset(XYDataset dataset) {
50 if (!(dataset instanceof TimeSeriesCollection)) {
51 logger.warn("Skip non TimeSeriesCollection dataset.");
52 return;
53 }
54
55 TimeSeriesCollection tsc = (TimeSeriesCollection) dataset;
56
57 datasets.add(tsc);
58 mergeRanges(tsc);
59 }
60
61
62 @Override
63 public boolean isEmpty() {
64 return datasets.isEmpty();
65 }
66
67
68 protected void mergeRanges(TimeSeriesCollection dataset) {
69 logger.debug("Range after merging: " + range);
70
71 Range[] xyRanges = ChartHelper.getRanges(dataset);
72 range = Range.combine(range, xyRanges[1]);
73
74 logger.debug("Range after merging: " + range);
75 }
76
77 } // end of TimeseriesAxisDataset class
78
79
80
15 private static final Logger logger = 81 private static final Logger logger =
16 Logger.getLogger(TimeseriesChartGenerator.class); 82 Logger.getLogger(TimeseriesChartGenerator.class);
17 83
18 84
19 protected abstract NumberAxis createYAxis(int index); 85 protected Map<Integer, Range> xRanges;
86
87
88
89 /**
90 * The default constructor that initializes internal datastructures.
91 */
92 public TimeseriesChartGenerator() {
93 super();
94
95 xRanges = new HashMap<Integer, Range>();
96 }
97
20 98
21 99
22 @Override 100 @Override
23 public JFreeChart generateChart() { 101 public JFreeChart generateChart() {
24 logger.info("Generate Timeseries Chart."); 102 logger.info("Generate Timeseries Chart.");
25 103
104 JFreeChart chart = ChartFactory.createTimeSeriesChart(
105 getChartTitle(),
106 getXAxisLabel(),
107 getYAxisLabel(0),
108 null,
109 true,
110 false,
111 false);
112
26 logger.warn("TODO: IMPLEMENT ME!"); 113 logger.warn("TODO: IMPLEMENT ME!");
27 114
28 return null; 115 XYPlot plot = (XYPlot) chart.getPlot();
116
117 chart.setBackgroundPaint(Color.WHITE);
118 plot.setBackgroundPaint(Color.WHITE);
119
120 addSubtitles(chart);
121 addDatasets(plot);
122
123 return chart;
124 }
125
126
127 /**
128 * This method creates new instances of TimeseriesAxisDataset.
129 *
130 * @param idx The symbol for the new TimeseriesAxisDataset.
131 */
132 @Override
133 protected AxisDataset createAxisDataset(int idx) {
134 logger.debug("Create a new AxisDataset for index: " + idx);
135 return new TimeseriesAxisDataset(idx);
136 }
137
138
139 /**
140 * Effect: extend range of x axis to include given limits.
141 * @param range the given ("minimal") range.
142 * @param index index of axis to be merged.
143 */
144 @Override
145 protected void combineXRanges(Range range, int index) {
146 if (range != null) {
147 Range old = xRanges.get(index);
148
149 if (old != null) {
150 range = Range.combine(old, range);
151 }
152
153 xRanges.put(index, range);
154 }
155 }
156
157
158 protected void addDatasets(XYPlot plot) {
159 logger.warn("TODO: IMPLEMENT ME!");
29 } 160 }
30 } 161 }
31 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : 162 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org