Mercurial > dive4elements > gnv-client
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 :