view artifacts/src/main/java/org/dive4elements/river/exports/DischargeGenerator.java @ 8320:b1303070c050

Generate a W in CM axis if there are W data.
author Sascha L. Teichmann <teichmann@intevation.de>
date Wed, 24 Sep 2014 17:39:29 +0200
parents cfb3a4d0c637
children c44775cd79f2
line wrap: on
line source
/* Copyright (C) 2014 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 java.awt.Font;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.Logger;
import org.dive4elements.artifactdatabase.state.ArtifactAndFacet;
import org.dive4elements.river.exports.injector.InjectorConstants;
import org.dive4elements.river.jfree.AxisDataset;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.Range;

public class DischargeGenerator
extends      DiagramGenerator
implements   InjectorConstants
{
    private static Logger log = Logger.getLogger(DiagramGenerator.class);

    public DischargeGenerator() {
    }

    @Override
    public void addDatasets(XYPlot plot) {
        super.addDatasets(plot);

        Object pnp = context.getContextValue(PNP);
        if (!(pnp instanceof Number)) {
            return;
        }

        double pnpValue = ((Number)pnp).doubleValue();

        int wAxisIndex = diagramAttributes.getAxisIndex("W");
        if (wAxisIndex == -1) {
            log.warn("No W axis found.");
            return;
        }

        AxisDataset data = datasets.get(wAxisIndex);
        if (data == null) {
            // No W axis
            return;
        }

        Range range = inCm(data.getRange(), pnpValue);

        // Do we have an index for W in cm?
        NumberAxis wInCmAxis = createWinCMAxis(wAxisIndex);
        wInCmAxis.setRange(range.getLowerBound(), range.getUpperBound());

        plot.setRangeAxis(plot.getRangeAxisCount(), wInCmAxis);
    }

    private static Range inCm(Range r, double pnpValue) {
        double l = r.getLowerBound();
        double u = r.getUpperBound();
        l = (l - pnpValue)*100d;
        u = (u - pnpValue)*100d;
        return new Range(l, u);
    }

    private NumberAxis createWinCMAxis(int wAxisIndex) {

        Font labelFont = new Font(
            DEFAULT_FONT_NAME,
            Font.BOLD,
            getYAxisFontSize(wAxisIndex));

        String axisName = "W.in.cm";

        // TODO: I18N
        IdentifiableNumberAxis axis = new IdentifiableNumberAxis(
            axisName, "W.in.cm");

        axis.setAutoRangeIncludesZero(false);
        axis.setLabelFont(labelFont);
        axis.setTickLabelFont(labelFont);

        return axis;
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org