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

Added facets and chart generator for bed quality calculation. flys-artifacts/trunk@5454 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Thu, 13 Sep 2012 12:08:50 +0000
parents
children 0c978a80726a
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.FLYSArtifact;
import de.intevation.flys.artifacts.model.FacetTypes;
import de.intevation.flys.artifacts.model.MiddleBedHeightData;
import de.intevation.flys.exports.ChartGenerator.YAxisWalker;
import de.intevation.flys.exports.StyledSeriesBuilder;
import de.intevation.flys.exports.XYChartGenerator;
import de.intevation.flys.jfree.FLYSAnnotation;
import de.intevation.flys.jfree.StyledXYSeries;
import de.intevation.flys.utils.FLYSUtils;


/**
 * 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;
        }

        if (name.equals(BED_QUALITY_BED_DIAMETER)) {
            doBedDiameterOut(artifactAndFacet.getData(context), // TODO CAST TO
                                                                // SPECIFIC
                                                                // CLASS
                artifactAndFacet, attr, visible);
        }
        else if (name.equals(BED_QUALITY_BEDLOAD_DIAMETER)) {
            doBedloadDiameterOut(artifactAndFacet.getData(context), // TODO CAST
                                                                    // TO
                                                                    // SPECIFIC
                                                                    // CLASS
                artifactAndFacet, attr, visible);
        }
        else if (name.equals(BED_QUALITY_POROSITY)) {
            doPorosityOut(artifactAndFacet.getData(context), // TODO CAST TO
                                                             // SPECIFIC CLASS
                artifactAndFacet, attr, visible);
        }
        else if (name.equals(BED_QUALITY_SEDIMENT_DENSITY)) {
            doDensityOut(artifactAndFacet.getData(context), // TODO CAST TO
                                                            // SPECIFIC CLASS
                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 doBedDiameterOut(Object data, ArtifactAndFacet aandf,
        Document theme, boolean visible) {
        logger.debug("BedQuality.doBedDiameterOut");

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

        // StyledSeriesBuilder.addPoints(series, data.getMiddleHeightsPoints(),
        // true);

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

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

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

        // StyledSeriesBuilder.addPoints(series, data.getMiddleHeightsPoints(),
        // true);

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

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

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

        // StyledSeriesBuilder.addPoints(series, data.getMiddleHeightsPoints(),
        // true);

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

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

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

        // StyledSeriesBuilder.addPoints(series, data.getMiddleHeightsPoints(),
        // 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