diff gnv-artifacts/src/main/java/de/intevation/gnv/chart/AbstractXYLineChart.java @ 297:3f43392df3f6

Interface and abstract classes for chart creation implemented. gnv-artifacts/trunk@351 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Thu, 19 Nov 2009 15:24:45 +0000
parents
children 3ea030aafe65
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gnv-artifacts/src/main/java/de/intevation/gnv/chart/AbstractXYLineChart.java	Thu Nov 19 15:24:45 2009 +0000
@@ -0,0 +1,116 @@
+package de.intevation.gnv.chart;
+
+import java.awt.Color;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Locale;
+
+import org.apache.log4j.Logger;
+
+import org.jfree.chart.JFreeChart;
+import org.jfree.chart.ChartTheme;
+import org.jfree.chart.ChartFactory;
+import org.jfree.chart.axis.NumberAxis;
+import org.jfree.chart.axis.NumberTickUnit;
+import org.jfree.chart.axis.AxisLocation;
+import org.jfree.chart.plot.PlotOrientation;
+import org.jfree.chart.plot.XYPlot;
+import org.jfree.chart.renderer.xy.StandardXYItemRenderer;
+import org.jfree.data.general.Series;
+import org.jfree.data.time.TimeSeriesCollection;
+import org.jfree.data.time.Minute;
+import org.jfree.data.xy.XYDataset;
+
+import de.intevation.gnv.geobackend.base.Result;
+import de.intevation.gnv.transition.describedata.KeyValueDescibeData;
+
+/**
+ * @author Ingo Weinzierl <ingo.weinzierl@intevation.de>
+ */
+public abstract class AbstractXYLineChart
+extends               AbstractChart
+{
+    private static Logger log    = Logger.getLogger(AbstractXYLineChart.class);
+
+    protected static Color[] COLOR = {
+        Color.black, Color.red, Color.green, Color.blue
+    };
+
+    protected PlotOrientation PLOT_ORIENTATION = PlotOrientation.VERTICAL;
+
+    protected abstract void initData();
+    protected abstract void addValue(Result row, Series series);
+    protected abstract void addSeries(Series series, int idx);
+    protected abstract String createSeriesName(
+        String breakPoint1,
+        String breakPoint2,
+        String breakPoint3
+    );
+
+
+    public JFreeChart generateChart() {
+        log.debug("generate XYLineChart");
+
+        if (chart != null)
+            return chart;
+
+        chart = ChartFactory.createXYLineChart(
+            labels.getTitle(),
+            labels.getDomainAxisLabel(),
+            null,
+            null,
+            PLOT_ORIENTATION,
+            true,
+            false,
+            false
+        );
+
+        initData();
+        return chart;
+    }
+
+
+    protected void prepareAxis(String seriesKey, int idx) {
+        log.debug("prepare axis of xychart");
+        XYPlot plot     = chart.getXYPlot();
+        NumberAxis axis = new NumberAxis(seriesKey);
+
+        if (seriesKey.contains("richtung")) {
+            axis.setTickUnit(new NumberTickUnit(30.0));
+            axis.setUpperBound(360.0);
+            axis.setLowerBound(0.0);
+            plot.setRangeAxis(idx, axis);
+        }
+        else {
+            axis.setFixedDimension(10.0);
+            axis.setAutoRangeIncludesZero(false);
+            plot.setRangeAxis(idx, axis);
+            axis.configure();
+        }
+
+        if (idx % 2 != 0)
+            plot.setRangeAxisLocation(idx, AxisLocation.BOTTOM_OR_RIGHT);
+        else
+            plot.setRangeAxisLocation(idx, AxisLocation.BOTTOM_OR_LEFT);
+        plot.mapDatasetToRangeAxis(idx, idx);
+
+        StandardXYItemRenderer renderer = new StandardXYItemRenderer();
+        renderer.setSeriesPaint(idx, COLOR[idx%COLOR.length]);
+        plot.setRenderer(idx, renderer);
+    }
+
+
+    protected String findValueTitle(Collection values, String id) {
+        log.debug("find description of dataset");
+
+        Iterator it = values.iterator();
+        while (it.hasNext()) {
+            KeyValueDescibeData data = (KeyValueDescibeData) it.next();
+
+            if (id.equals(data.getKey()))
+                return data.getValue();
+        }
+        return "";
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=latin1 :

http://dive4elements.wald.intevation.org