Mercurial > dive4elements > river
diff 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 |
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/exports/TimeseriesChartGenerator.java Thu Feb 02 15:39:28 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/exports/TimeseriesChartGenerator.java Thu Feb 02 15:44:13 2012 +0000 @@ -1,10 +1,22 @@ package de.intevation.flys.exports; +import java.awt.Color; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import org.apache.log4j.Logger; +import org.jfree.chart.ChartFactory; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.NumberAxis; +import org.jfree.chart.plot.XYPlot; + +import org.jfree.data.Range; +import org.jfree.data.time.TimeSeriesCollection; +import org.jfree.data.xy.XYDataset; /** @@ -12,20 +24,139 @@ */ public abstract class TimeseriesChartGenerator extends ChartGenerator { + + /** + * Inner class TimeseriesAxisDataset stores TimeSeriesCollection. + */ + public class TimeseriesAxisDataset implements AxisDataset { + + protected int axisSymbol; + + protected List<TimeSeriesCollection> datasets; + + protected Range range; + + protected int plotAxisIndex; + + + public TimeseriesAxisDataset(int axisSymbol) { + this.axisSymbol = axisSymbol; + this.datasets = new ArrayList<TimeSeriesCollection>(); + } + + + @Override + public void addDataset(XYDataset dataset) { + if (!(dataset instanceof TimeSeriesCollection)) { + logger.warn("Skip non TimeSeriesCollection dataset."); + return; + } + + TimeSeriesCollection tsc = (TimeSeriesCollection) dataset; + + datasets.add(tsc); + mergeRanges(tsc); + } + + + @Override + public boolean isEmpty() { + return datasets.isEmpty(); + } + + + protected void mergeRanges(TimeSeriesCollection dataset) { + logger.debug("Range after merging: " + range); + + Range[] xyRanges = ChartHelper.getRanges(dataset); + range = Range.combine(range, xyRanges[1]); + + logger.debug("Range after merging: " + range); + } + + } // end of TimeseriesAxisDataset class + + + private static final Logger logger = Logger.getLogger(TimeseriesChartGenerator.class); - protected abstract NumberAxis createYAxis(int index); + protected Map<Integer, Range> xRanges; + + + + /** + * The default constructor that initializes internal datastructures. + */ + public TimeseriesChartGenerator() { + super(); + + xRanges = new HashMap<Integer, Range>(); + } + @Override public JFreeChart generateChart() { logger.info("Generate Timeseries Chart."); + JFreeChart chart = ChartFactory.createTimeSeriesChart( + getChartTitle(), + getXAxisLabel(), + getYAxisLabel(0), + null, + true, + false, + false); + logger.warn("TODO: IMPLEMENT ME!"); - return null; + XYPlot plot = (XYPlot) chart.getPlot(); + + chart.setBackgroundPaint(Color.WHITE); + plot.setBackgroundPaint(Color.WHITE); + + addSubtitles(chart); + addDatasets(plot); + + return chart; + } + + + /** + * This method creates new instances of TimeseriesAxisDataset. + * + * @param idx The symbol for the new TimeseriesAxisDataset. + */ + @Override + protected AxisDataset createAxisDataset(int idx) { + logger.debug("Create a new AxisDataset for index: " + idx); + return new TimeseriesAxisDataset(idx); + } + + + /** + * Effect: extend range of x axis to include given limits. + * @param range the given ("minimal") range. + * @param index index of axis to be merged. + */ + @Override + protected void combineXRanges(Range range, int index) { + if (range != null) { + Range old = xRanges.get(index); + + if (old != null) { + range = Range.combine(old, range); + } + + xRanges.put(index, range); + } + } + + + protected void addDatasets(XYPlot plot) { + logger.warn("TODO: IMPLEMENT ME!"); } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :