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 :

http://dive4elements.wald.intevation.org