view flys-artifacts/src/main/java/de/intevation/flys/artifacts/charts/TimeseriesStepChart.java @ 4255:670e98f5a441

Fixed leak while merging facets. The ThemeList that is used by OutputHelper to sort the Facets for an Output now uses a list to store the ManagedFacets. The correct order is made up by sorting the List using Collections.sort() function of the Java JDK. Therfore, the ManagedFacet class implements the Comparable interface. The return value of its compareTo(other) method depends on the value of the 'position' field.
author Ingo Weinzierl <weinzierl.ingo@googlemail.com>
date Thu, 25 Oct 2012 14:01:46 +0200
parents 6d8c7a00e74e
children
line wrap: on
line source
package de.intevation.flys.artifacts.charts;

import java.awt.Dimension;
import java.util.Date;
import java.util.GregorianCalendar;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.ui.ApplicationFrame;

import org.jfree.data.time.SimpleTimePeriod;
import org.jfree.data.time.Second;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.time.TimePeriodValues;
import org.jfree.data.time.TimePeriodValuesCollection;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;


public class TimeseriesStepChart extends ApplicationFrame {

    private static final Logger logger =
        Logger.getLogger(TimeseriesStepChart.class);


    public static final String LOG4J_PROPERTIES = "FLYS_CLIENT_LOG4J_PROPERIES";

    public static final int USER_CHART_TYPE =
        Integer.getInteger("chart.type", -1);

    public static final int CHART_TYPE_TIMEPERIOD = 1;
    public static final int CHART_TYPE_TIMESERIES = 2;


    public static void main(String[] args) {
        configureLogging();

        logger.info("Start TimeseriesStepChart demo.");

        if (USER_CHART_TYPE <= 0) {
            logger.error("Unknown chart type: " + USER_CHART_TYPE);
        }

        logger.debug("Create Chart from type: " + USER_CHART_TYPE);

        TimeseriesStepChart tsc = new TimeseriesStepChart();
        tsc.build(USER_CHART_TYPE);

        logger.info("End of TimeseriesStepChart demo.");
    }


    /** Setup the log4j logging (read LOG4J_PROPERIES envvar). */
    public static void configureLogging() {
        String log4jProperties = System.getenv(LOG4J_PROPERTIES);

        if (log4jProperties != null && log4jProperties.length() > 0) {
            PropertyConfigurator.configure(log4jProperties);
            logger.info("Log4J logging initialized.");
        }
        else {
            System.out.println("Error while setting up Log4J configuration.");
        }

        System.out.println("LoggingConfigurator.init finished");
    }


    public TimeseriesStepChart() {
        super("TimeseriesStepChart");
    }


    public void build(int type) {
        ChartPanel chartPanel = createChartPanel(type);
        chartPanel.setPreferredSize(new Dimension(500, 300));

        setContentPane(chartPanel);

        pack();
        setVisible(true);
    }


    protected ChartPanel createChartPanel(int type) {
        JFreeChart chart = createJFreeChart(type);
        ChartPanel panel = new ChartPanel(chart);
        return panel;
    }


    protected JFreeChart createJFreeChart(int type) {
        if (type == CHART_TYPE_TIMEPERIOD) {
            return createTimePeriodValuesChart();
        }
        else if (type == CHART_TYPE_TIMESERIES) {
            return createTimeSeriesChart();
        }

        logger.error("Unknown chart type: " + type);

        return null;
    }


    public static Date createDate(int year, int month, int day) {
        GregorianCalendar cal = new GregorianCalendar(year, month, day);
        return cal.getTime();
    }



    //
    // XXX FOLLOWING METHODS ARE USED FOR "TimePeriodValues" CHART TYPE
    //
    protected JFreeChart createTimePeriodValuesChart() {
        return ChartFactory.createTimeSeriesChart(
            "TimePeriodValues Chart",
            "Time Axis",
            "Y Axis",
            createTimePeriodValuesDataset(),
            true,
            false,
            false);
    }


    protected TimePeriodValuesCollection createTimePeriodValuesDataset() {
        TimePeriodValuesCollection dataset = new TimePeriodValuesCollection();
        TimePeriodValues series = createTimePeriodValues();

        dataset.addSeries(series);

        return dataset;
    }


    protected TimePeriodValues createTimePeriodValues() {
        TimePeriodValues series1 = new TimePeriodValues("Series 1");

        Date start1 = createDate(2000, 0, 1);
        Date end1   = createDate(2000, 11, 31);

        logger.debug("START DATE 1 = " + start1);
        logger.debug("END   DATE 1 = " + end1);

        SimpleTimePeriod period1 = new SimpleTimePeriod(start1, end1);

        Date start2 = createDate(2001, 0, 1);
        Date end2   = createDate(2001, 11, 31);
        SimpleTimePeriod period2 = new SimpleTimePeriod(start2, end2);

        Date start3 = createDate(2002, 0, 1);
        Date end3   = createDate(2002, 11, 31);
        SimpleTimePeriod period3 = new SimpleTimePeriod(start3, end3);

        series1.add(period1, 100);
        series1.add(period2, 200);
        series1.add(period3, 150);

        return series1;
    }


    //
    // XXX FOLLOWING METHODS ARE USED FOR "TimePeriodValues" CHART TYPE
    //
    protected JFreeChart createTimeSeriesChart() {
        return ChartFactory.createTimeSeriesChart(
            "TimeSeriesCollection Chart",
            "Time Axis",
            "Y Axis",
            createTimeSeriesCollectionDataset(),
            true,
            false,
            false);
    }


    protected TimeSeriesCollection createTimeSeriesCollectionDataset() {
        TimeSeriesCollection dataset = new TimeSeriesCollection();
        TimeSeries[]         series  = createTimeSeries();

        for (TimeSeries tmp: series) {
            dataset.addSeries(tmp);
        }

        return dataset;
    }


    protected TimeSeries[] createTimeSeries() {
        TimeSeries series1 = new TimeSeries("Series 1");
        series1.add(new Second(0, 0, 0, 1, 1, 2000), 100);
        series1.add(new Second(59, 59, 23, 31, 12, 2000), 100);

        series1.add(new Second(0, 0, 0, 1, 1, 2001), 200);
        series1.add(new Second(59, 59, 23, 31, 12, 2001), 200);

        series1.add(new Second(0, 0, 0, 1, 1, 2002), 150);
        series1.add(new Second(59, 59, 23, 31, 12, 2002), 150);

        TimeSeries series2 = new TimeSeries("Series 2");
        series2.add(new Second(0, 0, 0, 1, 1, 2000), 10);
        series2.add(new Second(59, 59, 23, 31, 12, 2000), 10);

        series2.add(new Second(0, 0, 0, 1, 1, 2001), 20);
        series2.add(new Second(59, 59, 23, 31, 12, 2001), 20);

        series2.add(new Second(0, 0, 0, 1, 1, 2002), 15);
        series2.add(new Second(59, 59, 23, 31, 12, 2002), 15);

        return new TimeSeries[] { series1, series2 };
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org