view gnv-artifacts/src/main/java/de/intevation/gnv/chart/AbstractXYLineChart.java @ 307:f0f106c7b906

Fixed some broken Method-Extentions. Added some null-value checks. gnv-artifacts/trunk@365 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Tim Englich <tim.englich@intevation.de>
date Tue, 24 Nov 2009 14:39:36 +0000
parents a16d337c5678
children 63f8b3fb7d9a
line wrap: on
line source
package de.intevation.gnv.chart;

import java.awt.Color;
import java.util.Collection;
import java.util.Iterator;

import org.apache.log4j.Logger;

import org.jfree.chart.JFreeChart;
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 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
        );

        theme.apply(chart);
        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");

        if (values != null){
            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