view gnv-artifacts/src/main/java/de/intevation/gnv/chart/VerticalProfileChart.java @ 298:80f7c5dc09c6

Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts. gnv-artifacts/trunk@352 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Thu, 19 Nov 2009 15:30:27 +0000
parents
children 3ea030aafe65
line wrap: on
line source
package de.intevation.gnv.chart;

import java.util.Collection;
import java.util.Iterator;
import java.util.Locale;

import org.apache.log4j.Logger;

import org.jfree.chart.ChartTheme;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.general.Series;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.plot.PlotOrientation;

import de.intevation.gnv.geobackend.base.Result;


/**
 * @author Ingo Weinzierl <ingo.weinzierl@intevation.de>
 */
public class VerticalProfileChart
extends      AbstractXYLineChart
{
    private static Logger log = Logger.getLogger(VerticalProfileChart.class);


    public VerticalProfileChart(
        ChartLabels labels,
        ChartTheme  theme,
        Collection  parameters,
        Collection  measurements,
        Collection  result,
        Collection  dates,
        Locale      locale
    ) {
        this.labels           = labels;
        this.theme            = theme;
        this.parameters       = parameters;
        this.measurements     = measurements;
        this.resultSet        = result;
        this.dates            = dates;
        this.locale           = locale;
        this.PLOT_ORIENTATION = PlotOrientation.HORIZONTAL;
    }


    protected void initData() {
        log.debug("init data for VerticalProfileChart");

        String  breakPoint1       = null;
        String  breakPoint2       = null;
        String  breakPoint3       = null;

        Iterator iter       = resultSet.iterator();
        Result   row        = null;
        String   seriesName = null;
        XYSeries series     = null;

        int idx = 0;

        while (iter.hasNext()) {
            row = (Result) iter.next();

            // add current data to plot and prepare for next one
            if (!row.getString("GROUP1").equals(breakPoint1) ||
                !row.getString("GROUP2").equals(breakPoint2) ||
                !row.getString("GROUP3").equals(breakPoint3)
            ) {
                log.debug("prepare data/plot for next dataset");

                if(series != null) {
                    addSeries(series, idx);
                    prepareAxis(((String)series.getKey()), idx++);
                }

                // prepare variables for next plot
                breakPoint1 = row.getString("GROUP1");
                breakPoint2 = row.getString("GROUP2");
                breakPoint3 = row.getString("GROUP3");

                seriesName  = createSeriesName(
                    breakPoint1,
                    breakPoint2,
                    breakPoint3
                );

                log.debug("next dataset is '" + seriesName + "'");
                series = new XYSeries(seriesName);
            }

            addValue(row, series);
        }

        addSeries(series, idx);
        prepareAxis(((String)series.getKey()), idx++);
    }


    protected void addValue(Result row, Series series) {
        // TODO look for gaps between two values
        ((XYSeries) series).add(
            row.getDouble("XORDINATE"),
            row.getDouble("YORDINATE")
        );
    }


    protected void addSeries(Series series, int idx) {
        log.debug("add series to verticalprofile chart");
        XYPlot plot = chart.getXYPlot();

        if (series == null) {
            log.warn("no data to add");
            return;
        }

        XYSeriesCollection xysc = new XYSeriesCollection((XYSeries)series);
        plot.setDataset(idx, xysc);
    }


    protected String createSeriesName(
        String breakPoint1,
        String breakPoint2,
        String breakPoint3
    ) {
        log.debug("create seriesname of verticalprofile chart");
        return findValueTitle(parameters, breakPoint1) +
            " " +
            findValueTitle(measurements, breakPoint2) +
            "m";
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=latin1 :

http://dive4elements.wald.intevation.org