view flys-artifacts/src/main/java/de/intevation/flys/exports/minfo/BedQualityGenerator.java @ 3867:d8c99ff18db8

Refactor MINFO bed quality resultsets and facets. flys-artifacts/trunk@5498 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Raimund Renkert <raimund.renkert@intevation.de>
date Mon, 17 Sep 2012 14:38:47 +0000
parents 5a8f8fd5310c
children a5f65e8983be
line wrap: on
line source
package de.intevation.flys.exports.minfo;

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

import de.intevation.artifactdatabase.state.ArtifactAndFacet;
import de.intevation.artifactdatabase.state.Facet;
import de.intevation.flys.artifacts.model.FacetTypes;
import de.intevation.flys.artifacts.model.minfo.BedDiameterResult;
import de.intevation.flys.artifacts.model.minfo.BedParametersResult;
import de.intevation.flys.artifacts.model.minfo.BedQualityResult;
import de.intevation.flys.artifacts.model.minfo.BedloadDiameterResult;
import de.intevation.flys.exports.StyledSeriesBuilder;
import de.intevation.flys.exports.XYChartGenerator;
import de.intevation.flys.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 [m]";
    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 (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