view gnv-artifacts/src/main/java/de/intevation/gnv/chart/TimeSeriesChart.java @ 308:677da0e143cc

Added dependencies for esri and ibm libraries required for unit tests. gnv-artifacts/trunk@366 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Tue, 24 Nov 2009 14:40:53 +0000
parents 80f7c5dc09c6
children 45625b5cd6d4
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.chart.plot.XYPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.general.Series;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.Minute;
import org.jfree.data.time.TimeSeriesCollection;

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


/**
 * @author Ingo Weinzierl <ingo.weinzierl@intevation.de>
 */
public class TimeSeriesChart
extends      AbstractXYLineChart
{

    private static Logger log = Logger.getLogger(TimeSeriesChart.class);


    public TimeSeriesChart(
        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.VERTICAL;
    }


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

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

        Iterator   iter       = resultSet.iterator();
        Result     row        = null;
        String     seriesName = null;
        TimeSeries 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 TimeSeries(seriesName, Minute.class);
            }

            addValue(row, series);
        }

        // add the last dataset if existing to plot and prepare its axis
        addSeries(series, idx);
        prepareAxis(((String)series.getKey()), idx++);
    }


    protected void addValue(Result row, Series series) {
        // TODO look for gaps between two values
        ((TimeSeries) series).addOrUpdate(
            new Minute(row.getDate("XORDINATE")),
            row.getDouble("YORDINATE")
        );
    }


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

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

        TimeSeriesCollection tsc = new TimeSeriesCollection((TimeSeries)series);
        plot.setDataset(idx, tsc);
    }


    protected String createSeriesName(
        String breakPoint1,
        String breakPoint2,
        String breakPoint3
    ) {
        log.debug("create seriesname of timeseries 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