ingo@297: package de.intevation.gnv.chart; ingo@297: ingo@297: import java.awt.Color; ingo@297: import java.util.Collection; ingo@297: import java.util.Iterator; ingo@297: ingo@297: import org.apache.log4j.Logger; ingo@297: ingo@297: import org.jfree.chart.JFreeChart; ingo@297: import org.jfree.chart.ChartFactory; ingo@297: import org.jfree.chart.axis.NumberAxis; ingo@297: import org.jfree.chart.axis.NumberTickUnit; ingo@297: import org.jfree.chart.axis.AxisLocation; ingo@297: import org.jfree.chart.plot.PlotOrientation; ingo@297: import org.jfree.chart.plot.XYPlot; ingo@297: import org.jfree.chart.renderer.xy.StandardXYItemRenderer; ingo@297: import org.jfree.data.general.Series; ingo@297: ingo@297: import de.intevation.gnv.geobackend.base.Result; ingo@297: import de.intevation.gnv.transition.describedata.KeyValueDescibeData; ingo@297: ingo@297: /** ingo@297: * @author Ingo Weinzierl ingo@297: */ ingo@297: public abstract class AbstractXYLineChart ingo@297: extends AbstractChart ingo@297: { ingo@297: private static Logger log = Logger.getLogger(AbstractXYLineChart.class); ingo@297: ingo@297: protected static Color[] COLOR = { ingo@297: Color.black, Color.red, Color.green, Color.blue ingo@297: }; ingo@297: ingo@297: protected PlotOrientation PLOT_ORIENTATION = PlotOrientation.VERTICAL; ingo@297: ingo@297: protected abstract void initData(); ingo@297: protected abstract void addValue(Result row, Series series); ingo@297: protected abstract void addSeries(Series series, int idx); ingo@297: protected abstract String createSeriesName( ingo@297: String breakPoint1, ingo@297: String breakPoint2, ingo@297: String breakPoint3 ingo@297: ); ingo@297: ingo@297: ingo@297: public JFreeChart generateChart() { ingo@297: log.debug("generate XYLineChart"); ingo@297: ingo@297: if (chart != null) ingo@297: return chart; ingo@297: ingo@297: chart = ChartFactory.createXYLineChart( ingo@297: labels.getTitle(), ingo@297: labels.getDomainAxisLabel(), ingo@297: null, ingo@297: null, ingo@297: PLOT_ORIENTATION, ingo@297: true, ingo@297: false, ingo@297: false ingo@297: ); ingo@297: ingo@304: theme.apply(chart); ingo@297: initData(); ingo@304: ingo@297: return chart; ingo@297: } ingo@297: ingo@297: ingo@297: protected void prepareAxis(String seriesKey, int idx) { ingo@297: log.debug("prepare axis of xychart"); ingo@297: XYPlot plot = chart.getXYPlot(); ingo@297: NumberAxis axis = new NumberAxis(seriesKey); ingo@297: ingo@297: if (seriesKey.contains("richtung")) { ingo@297: axis.setTickUnit(new NumberTickUnit(30.0)); ingo@297: axis.setUpperBound(360.0); ingo@297: axis.setLowerBound(0.0); ingo@297: plot.setRangeAxis(idx, axis); ingo@297: } ingo@297: else { ingo@297: axis.setFixedDimension(10.0); ingo@297: axis.setAutoRangeIncludesZero(false); ingo@297: plot.setRangeAxis(idx, axis); ingo@297: axis.configure(); ingo@297: } ingo@297: ingo@297: if (idx % 2 != 0) ingo@297: plot.setRangeAxisLocation(idx, AxisLocation.BOTTOM_OR_RIGHT); ingo@297: else ingo@297: plot.setRangeAxisLocation(idx, AxisLocation.BOTTOM_OR_LEFT); ingo@297: plot.mapDatasetToRangeAxis(idx, idx); ingo@297: ingo@297: StandardXYItemRenderer renderer = new StandardXYItemRenderer(); ingo@297: renderer.setSeriesPaint(idx, COLOR[idx%COLOR.length]); ingo@297: plot.setRenderer(idx, renderer); ingo@297: } ingo@297: ingo@297: ingo@297: protected String findValueTitle(Collection values, String id) { ingo@297: log.debug("find description of dataset"); ingo@297: tim@307: if (values != null){ tim@307: Iterator it = values.iterator(); tim@307: while (it.hasNext()) { tim@307: KeyValueDescibeData data = (KeyValueDescibeData) it.next(); tim@307: tim@307: if (id.equals(data.getKey())) tim@307: return data.getValue(); tim@307: } ingo@297: } ingo@297: return ""; ingo@297: } ingo@297: } ingo@297: // vim:set ts=4 sw=4 si et sta sts=4 fenc=latin1 :