view artifacts/src/main/java/org/dive4elements/river/exports/minfo/BedQualityGenerator.java @ 5863:4897a58c8746

River artifacts: Added new copyright headers.
author Sascha L. Teichmann <teichmann@intevation.de>
date Sun, 28 Apr 2013 14:40:59 +0200
parents 5aa05a7a34b7
children f2e46a668fe6
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.minfo;

import org.apache.log4j.Logger;
import org.jfree.data.xy.XYSeries;
import org.w3c.dom.Document;

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.minfo.BedDiameterResult;
import org.dive4elements.river.artifacts.model.minfo.BedParametersResult;
import org.dive4elements.river.artifacts.model.minfo.BedloadDiameterResult;
import org.dive4elements.river.exports.StyledSeriesBuilder;
import org.dive4elements.river.exports.XYChartGenerator;
import org.dive4elements.river.jfree.FLYSAnnotation;
import org.dive4elements.river.jfree.StyledXYSeries;


/**
 * An OutGenerator that generates bed quality charts.
 *
 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
 */
public class BedQualityGenerator extends XYChartGenerator implements FacetTypes {

    public enum YAXIS {
        W(0), P(1), D(2);

        protected int idx;

        private YAXIS(int c) {
            idx = c;
        }
    }

    /** The logger that is used in this generator. */
    private static Logger logger = Logger.getLogger(BedQualityGenerator.class);

    public static final String I18N_CHART_TITLE = "chart.bedquality.title";
    public static final String I18N_XAXIS_LABEL = "chart.bedquality.xaxis.label";
    public static final String I18N_YAXIS_LABEL = "chart.bedquality.yaxis.label";
    public static final String I18N_SECOND_YAXIS_LABEL = "chart.bedquality.yaxis.label.porosity";
    public static final String I18N_THIRD_YAXIS_LABEL = "chart.bedquality.yaxis.label.diameter";

    public static final String I18N_CHART_TITLE_DEFAULT = "Sohlen Längsschnitt";
    public static final String I18N_XAXIS_LABEL_DEFAULT = "Fluss-Km";
    public static final String I18N_YAXIS_LABEL_DEFAULT = "Durchmesser [mm]";
    public static final String I18N_SECOND_YAXIS_LABEL_DEFAULT = "Porosität [%]";
    public static final String I18N_THIRD_YAXIS_LABEL_DEFAULT = "Dichte [t/m^3]";

    @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();
            }
        };
    }

    /**
     * Returns the default title for this chart.
     *
     * @return the default title for this chart.
     */
    @Override
    public String getDefaultChartTitle() {
        return msg(I18N_CHART_TITLE, I18N_CHART_TITLE_DEFAULT);
    }

    /**
     * Get internationalized label for the x axis.
     */
    @Override
    protected String getDefaultXAxisLabel() {
        return msg(I18N_XAXIS_LABEL, I18N_XAXIS_LABEL_DEFAULT);
    }

    @Override
    protected String getDefaultYAxisLabel(int index) {
        String label = "default";

        if (index == YAXIS.W.idx) {
            label = getWAxisLabel();
        }
        else if (index == YAXIS.P.idx) {
            label = getPAxisLabel();
        }
        else if (index == YAXIS.D.idx) {
            label = getDAxisLabel();
        }

        return label;
    }

    /**
     * Get internationalized label for the y axis displaying the diameter.
     */
    protected String getWAxisLabel() {
        return msg(I18N_YAXIS_LABEL, I18N_YAXIS_LABEL_DEFAULT);
    }

    /**
     * Get internationalized label for the y axis displaying the porosity.
     */
    protected String getPAxisLabel() {
        return msg(I18N_SECOND_YAXIS_LABEL, I18N_SECOND_YAXIS_LABEL_DEFAULT);
    }

    /**
     * Get internationalized label for the y axis displaying the density.
     */
    protected String getDAxisLabel() {
        return msg(I18N_THIRD_YAXIS_LABEL, I18N_THIRD_YAXIS_LABEL_DEFAULT);
    }

    /**
     * Produce output.
     *
     * @param artifactAndFacet
     *            current facet.
     * @param attr
     *            theme for facet
     */
    public void doOut(ArtifactAndFacet artifactAndFacet, Document attr,
        boolean visible) {
        String name = artifactAndFacet.getFacetName();

        logger.debug("BedQualityGenerator.doOut: " + name);

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

        Facet facet = artifactAndFacet.getFacet();

        if (facet == null) {
            return;
        }

        // TODO BED_QUALITY_BED_DIAMETER_TOPLAYER
        if (name.equals(BED_QUALITY_BED_DIAMETER_TOPLAYER)) {
            doBedDiameterTopLayerOut(
                (BedDiameterResult) artifactAndFacet.getData(context),
                artifactAndFacet, attr, visible);
        }
        else if (name.equals(BED_QUALITY_BED_DIAMETER_SUBLAYER)) {
            doBedDiameterSubLayerOut(
                (BedDiameterResult) artifactAndFacet.getData(context),
                artifactAndFacet, attr, visible);
        }
        // TODO BED_QUALITY_BED_DIAMETER_SUBLAYER
        else if (name.equals(BED_QUALITY_BEDLOAD_DIAMETER)) {
            doBedLoadDiameterOut(
                (BedloadDiameterResult) artifactAndFacet.getData(context),
                artifactAndFacet, attr, visible);
        }
        else if (name.equals(BED_QUALITY_POROSITY_TOPLAYER)) {
            doPorosityTopLayerOut(
                (BedParametersResult) artifactAndFacet.getData(context),
                artifactAndFacet, attr, visible);
        }
        else if (name.equals(BED_QUALITY_POROSITY_SUBLAYER)) {
            doPorositySubLayerOut(
                (BedParametersResult) artifactAndFacet.getData(context),
                artifactAndFacet, attr, visible);
        }
        else if (name.equals(BED_QUALITY_SEDIMENT_DENSITY_TOPLAYER)) {
            doDensityTopLayerOut(
                (BedParametersResult) artifactAndFacet.getData(context),
                artifactAndFacet, attr, visible);
        }
        else if (name.equals(BED_QUALITY_SEDIMENT_DENSITY_SUBLAYER)) {
            doDensitySubLayerOut(
                (BedParametersResult) artifactAndFacet.getData(context),
                artifactAndFacet, attr, visible);
        }
        else if (name.equals(LONGITUDINAL_ANNOTATION)) {
            doAnnotations(
                (FLYSAnnotation) artifactAndFacet.getData(context),
                 artifactAndFacet,
                 attr,
                 visible);
        }
        else if (FacetTypes.IS.MANUALPOINTS(name)) {
            doPoints(artifactAndFacet.getData(context), artifactAndFacet, attr,
                visible, YAXIS.W.idx);
        }
        else {
            logger.warn("Unknown facet name: " + name);
            return;
        }
    }

    protected void doBedDiameterTopLayerOut(BedDiameterResult data,
        ArtifactAndFacet aandf, Document theme, boolean visible) {
        logger.debug("BedQuality.doBedDiameterTopLayerOut");

        XYSeries series = new StyledXYSeries(aandf.getFacetDescription(), theme);
        StyledSeriesBuilder.addPoints(series, data.getDiameterCapData(), true);

        addAxisSeries(series, YAXIS.W.idx, visible);
    }

    protected void doBedDiameterSubLayerOut(BedDiameterResult data,
        ArtifactAndFacet aandf, Document theme, boolean visible) {
        logger.debug("BedQuality.doBedDiameterSubLayerOut");

        XYSeries series = new StyledXYSeries(aandf.getFacetDescription(), theme);
        StyledSeriesBuilder.addPoints(series, data.getDiameterSubData(), true);

        addAxisSeries(series, YAXIS.W.idx, visible);
    }

    protected void doBedLoadDiameterOut(BedloadDiameterResult data,
        ArtifactAndFacet aandf, Document theme, boolean visible) {
        logger.debug("BedQuality.doBedLoadDiameterOut");

        XYSeries series = new StyledXYSeries(aandf.getFacetDescription(), theme);
        StyledSeriesBuilder.addPoints(series, data.getDiameterData(), true);

        addAxisSeries(series, YAXIS.W.idx, visible);
    }

    protected void doPorosityTopLayerOut(BedParametersResult data,
        ArtifactAndFacet aandf, Document theme, boolean visible) {
        logger.debug("BedQuality.doPorosityTopLayerOut");

        XYSeries series = new StyledXYSeries(aandf.getFacetDescription(), theme);

        StyledSeriesBuilder.addPoints(series, data.getPorosityCapData(),
            true);

        addAxisSeries(series, YAXIS.P.idx, visible);
    }

    protected void doPorositySubLayerOut(BedParametersResult data,
        ArtifactAndFacet aandf, Document theme, boolean visible) {
        logger.debug("BedQuality.doPorositySubLayerOut");

        XYSeries series = new StyledXYSeries(aandf.getFacetDescription(), theme);

        StyledSeriesBuilder.addPoints(series, data.getPorositySubData(),
            true);

        addAxisSeries(series, YAXIS.P.idx, visible);
    }

    protected void doDensityTopLayerOut(BedParametersResult data,
        ArtifactAndFacet aandf, Document theme, boolean visible) {
        logger.debug("BedQuality.doDensityOut");

        XYSeries series = new StyledXYSeries(aandf.getFacetDescription(), theme);

        StyledSeriesBuilder.addPoints(series, data.getDensityCapData(),
            true);

        addAxisSeries(series, YAXIS.D.idx, visible);
    }

    protected void doDensitySubLayerOut(BedParametersResult data,
        ArtifactAndFacet aandf, Document theme, boolean visible) {
        logger.debug("BedQuality.doDensityOut");

        XYSeries series = new StyledXYSeries(aandf.getFacetDescription(), theme);

        StyledSeriesBuilder.addPoints(series, data.getDensitySubData(),
            true);

        addAxisSeries(series, YAXIS.D.idx, visible);
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org