view artifacts/src/main/java/org/dive4elements/river/exports/minfo/BedQualityGenerator.java @ 6262:ea6225010871

Set facet activity, have the correct facet order and added new facet to bed quality.
author Raimund Renkert <rrenkert@intevation.de>
date Tue, 11 Jun 2013 09:20:14 +0200
parents 38d6ce2c7164
children ef3b02034f6a 10646f31efec
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.BedDiameterData;
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.RiverAnnotation;
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,
            new Object[] {getRiverName()});
    }

    @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(BED_DIAMETER_DATA_TOP) ||
                 name.equals(BED_DIAMETER_DATA_SUB) ||
                 name.equals(BEDLOAD_DIAMETER_DATA)) {
            doBedDiameterDataOut(
                (BedDiameterData) artifactAndFacet.getData(context),
                artifactAndFacet, attr, visible);
        }
        else if (name.equals(LONGITUDINAL_ANNOTATION)) {
            doAnnotations(
                (RiverAnnotation) 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;
        }
    }

    private void doBedDiameterDataOut(
        BedDiameterData data,
        ArtifactAndFacet aandf,
        Document theme,
        boolean visible
    ) {
        XYSeries series = new StyledXYSeries(aandf.getFacetDescription(), theme);
        StyledSeriesBuilder.addPoints(series, data.getDiameterData(), true);

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

    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