view artifacts/src/main/java/org/dive4elements/river/exports/WDifferencesCurveGenerator.java @ 7076:7f600001c807 generator-refactoring

Add LTR inversion code to diagram generator. This code is used in serveral diagrams and as it modifies a whole diagram it should be central. (This should also make maintenance easier). This function can be called by processors to make sure that their data is plotted with an LTR waterflow.
author Andre Heinecke <aheinecke@intevation.de>
date Fri, 20 Sep 2013 16:33:22 +0200
parents 1b35b2ddfc28
children
line wrap: on
line source
/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
 * Software engineering by Intevation GmbH
 *
 * This file is Free Software under the GNU AGPL (>=v3)
 * and comes with ABSOLUTELY NO WARRANTY! Check out the
 * documentation coming with Dive4Elements River for details.
 */

package org.dive4elements.river.exports;

import org.apache.log4j.Logger;

import org.dive4elements.artifactdatabase.state.ArtifactAndFacet;
import org.dive4elements.artifactdatabase.state.Facet;

import org.dive4elements.river.artifacts.model.FacetTypes;
import org.dive4elements.river.artifacts.model.WKms;

import org.dive4elements.river.exports.process.BedDiffYearProcessor;
import org.dive4elements.river.exports.process.BedDiffHeightYearProcessor;
import org.dive4elements.river.exports.process.BedheightProcessor;
import org.dive4elements.river.exports.process.Processor;
import org.dive4elements.river.themes.ThemeDocument;

import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.XYPlot;


/**
 * An OutGenerator that generates w differences curves.
 */
public class WDifferencesCurveGenerator
extends      LongitudinalSectionGenerator
implements   FacetTypes
{
    /** The logger that is used in this generator. */
    private static Logger logger = Logger.getLogger(WDifferencesCurveGenerator.class);

    public enum YAXIS {
        W(0),
        D(1),
        Q(2);
        protected int idx;
        private YAXIS(int c) {
           idx = c;
        }
    }

    /** Key for internationalized title of WDiff charts. */
    public final static String I18N_WDIFF_TITLE = "chart.w_differences.title";

    /** Default for internationalized title (when no translation found). */
    public final static String I18N_WDIFF_TITLE_DEFAULT = "Differences";

    public final static String I18N_WDIFF_SUBTITLE =
        "chart.w_differences.subtitle";


    @Override
    protected YAxisWalker getYAxisWalker() {
        return new YAxisWalker() {
            @Override
            public int length() {
                return YAXIS.values().length;
            }

            @Override
            public String getId(int idx) {
                YAXIS[] yaxes = YAXIS.values();
                return yaxes[idx].toString();
            }
        };
    }


    /**
     * Get internationalized title for chart.
     * @return internationalized Chart title.
     */
    @Override
    public String getDefaultChartTitle() {
        return msg(I18N_WDIFF_TITLE, I18N_WDIFF_TITLE_DEFAULT);
    }


    @Override
    protected String getDefaultChartSubtitle() {
        return getRiverName();
    }


    /**
     * Gets key to look up internationalized String for the charts subtitle.
     * @return key to look up translated subtitle.
     */
    @Override
    protected String getChartSubtitleKey() {
        return I18N_WDIFF_SUBTITLE;
    }


    /** Handle additional facets (beddifferences). */
    @Override
    public void doOut(ArtifactAndFacet bundle, ThemeDocument attr, boolean visible) {
        super.doOut(bundle, attr, visible);

        String name = bundle.getFacetName();
        logger.debug("doOut: " + name);

        if (name == null) {
            logger.error("No facet name for doOut(). No output generated!");
            return;
        }

        Facet facet = bundle.getFacet();

        if (facet == null) {
            return;
        }

        Processor bedp = new BedheightProcessor();
        Processor bdyProcessor = new BedDiffYearProcessor();
        Processor bdhyProcessor = new BedDiffHeightYearProcessor();

        if (bedp.canHandle(name)) {
           bedp.doOut(this, bundle, attr, visible, YAXIS.W.idx);
        }
        else if (bdyProcessor.canHandle(name)) {
           bdyProcessor.doOut(this, bundle, attr, visible, YAXIS.W.idx);
        }
        else if (bdhyProcessor.canHandle(name)) {
           bdhyProcessor.doOut(this, bundle, attr, visible, YAXIS.W.idx);
        }
        else {
            logger.warn("WDifferencesCurveGenerator.doOut: unknown facet type " + name);
        }
    }


    /**
     * Sets the zero base line visible.
     */
    @Override
    public JFreeChart generateChart() {
        JFreeChart chart = super.generateChart();
        if (chart != null && chart.getPlot() != null) {
            XYPlot plot = (XYPlot) chart.getPlot();
            plot.setRangeZeroBaselineVisible(true);
        }
        return chart;
    }


    /**
     * Get name of series (displayed in legend).
     * @return name of the series.
     */
    protected String getSeriesName(WKms wqkms, String mode) {
        String name   = wqkms.getName();
        String prefix = (name != null && name.indexOf(mode) >= 0)
                      ? null
                      : mode;

        return (prefix != null && prefix.length() > 0)
                ? prefix + "(" + name +")"
                : name;
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org