Mercurial > dive4elements > gnv-client
diff gnv-artifacts/src/main/java/de/intevation/gnv/chart/AbstractHistogram.java @ 1119:7c4f81f74c47
merged gnv-artifacts
author | Thomas Arendsen Hein <thomas@intevation.de> |
---|---|
date | Fri, 28 Sep 2012 12:14:00 +0200 |
parents | f953c9a559d8 |
children |
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/AbstractHistogram.java Fri Sep 28 12:14:00 2012 +0200 @@ -0,0 +1,151 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + +package de.intevation.gnv.chart; + +import java.util.Locale; + +import org.apache.log4j.Logger; + +import org.jfree.chart.ChartFactory; +import org.jfree.chart.ChartTheme; +import org.jfree.chart.JFreeChart; + +import org.jfree.chart.axis.NumberAxis; +import org.jfree.chart.axis.TickUnitSource; + +import org.jfree.chart.plot.PlotOrientation; +import org.jfree.chart.plot.XYPlot; + +import org.jfree.chart.renderer.xy.XYBarRenderer; + +/** + * This abstract class defines some methods to adjust chart settings after its + * creation. + * + * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> + */ +public abstract class AbstractHistogram +implements Chart +{ + /** + * Logger used for logging with Apache log4j. + */ + private Logger logger = Logger.getLogger(AbstractHistogram.class); + + /** + * JFreeChart chart stored at this place after chart creation. + */ + protected JFreeChart chart; + + /** + * Labels used for chart title, subtitle, axis description. + */ + protected ChartLabels labels; + + /** + * Theme which is used to adjust the styling of this chart. + */ + protected ChartTheme theme; + + /** + * Raw data which should be displayed in the chart. + */ + protected Object[] data; + + /** + * Locale object used for i18n support. + */ + protected Locale locale; + + + /** + * Constructor for creating histogram charts. + * + * @param labels See {@link #labels} + * @param data See {@link #data} + * @param theme See {@link #theme} + */ + public AbstractHistogram( + ChartLabels labels, Object[] data, ChartTheme theme + ) { + this.labels = labels; + this.data = data; + this.theme = theme; + } + + + /** + * @see de.intevation.gnv.chart.Chart#generateChart() + */ + public JFreeChart generateChart() { + + if (chart != null) + return chart; + + chart = ChartFactory.createHistogram( + labels.getTitle(), + labels.getDomainAxisLabel(), + labels.getRangeAxisLabel(), + null, + PlotOrientation.VERTICAL, + true, + false, + false); + + applyDatasets(); + + theme.apply(chart); + adjustPlot(); + adjustDomainAxis(chart); + adjustRangeAxis(chart); + + return chart; + } + + + /** + * Method to do some changes in plot settings. + */ + protected void adjustPlot() { + XYPlot plot = (XYPlot) chart.getPlot(); + XYBarRenderer renderer = (XYBarRenderer) plot.getRenderer(); + + renderer.setShadowVisible(false); + renderer.setSeriesVisibleInLegend(0, false); + } + + + protected void adjustDomainAxis(JFreeChart chart) { + XYPlot plot = (XYPlot) chart.getPlot(); + NumberAxis domainAxis = (NumberAxis) plot.getDomainAxis(); + + TickUnitSource tus = domainAxis.createStandardTickUnits(locale); + domainAxis.setStandardTickUnits(tus); + } + + + protected void adjustRangeAxis(JFreeChart chart) { + XYPlot plot = (XYPlot) chart.getPlot(); + NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis(); + + TickUnitSource tus = rangeAxis.createStandardTickUnits(locale); + rangeAxis.setStandardTickUnits(tus); + } + + + + + /** + * This method needs to be implemented by subclasses and should add valid + * <code>HistogramDataset</code> objects to the created chart. It is called + * by {@link #generateChart} after chart creation. + */ + protected abstract void applyDatasets(); +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :