view flys-artifacts/src/main/java/de/intevation/flys/exports/MiddleBedHeightGenerator.java @ 4282:8b4988815974

Added marker for Ws and Qs in Historical Discharge WQ charts. Therefore, the XYChartGenerator got two new methods addDomainMarker(Marker, boolean) and addValueMarker(Marker, boolean). The boolean parameters determine, if the marker should be visible or not. This is analogous to addAxisSeries(XYSeries, int, boolean).
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Mon, 29 Oct 2012 05:59:27 +0100
parents 0f60efc39953
children f3c4976874f2
line wrap: on
line source
package de.intevation.flys.exports;

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.jfree.FLYSAnnotation;
import de.intevation.flys.jfree.StyledXYSeries;
import de.intevation.flys.utils.FLYSUtils;

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

// TODO Move class to de.intevation.flys.exports.minfo
/**
 * An OutGenerator that generates middle bed height charts.
 *
 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
 */
public class MiddleBedHeightGenerator
extends      XYChartGenerator
implements   FacetTypes
{
    public enum YAXIS {
        H(0);
        protected int idx;
        private YAXIS(int c) {
           idx = c;
        }
    }

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

    /** Key to look up internationalized String for annotations label. */
    public static final String I18N_ANNOTATIONS_LABEL =
        "chart.bedheight_middle.annotations.label";

    public static final String I18N_CHART_TITLE =
        "chart.bedheight_middle.section.title";

    public static final String I18N_CHART_SUBTITLE =
        "chart.bedheight_middle.section.subtitle";

    public static final String I18N_CHART_SHORT_SUBTITLE =
        "chart.bedheight_middle.section.shortsubtitle";

    public static final String I18N_XAXIS_LABEL =
        "chart.bedheight_middle.section.xaxis.label";

    public static final String I18N_YAXIS_LABEL =
        "chart.bedheight_middle.section.yaxis.label";

    public static final String I18N_CHART_TITLE_DEFAULT  = "Mittlere Sohlhöhe";
    public static final String I18N_XAXIS_LABEL_DEFAULT  = "km";
    public static final String I18N_YAXIS_LABEL_DEFAULT  = "mittlere Sohlhöhen [müNN]";



    @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() {
        Object[] args = new Object[] {
            getRiverName()
        };

        return msg(I18N_CHART_TITLE, I18N_CHART_TITLE_DEFAULT, args);
    }


    /**
     * Get internationalized label for the x axis.
     */
    @Override
    protected String getDefaultXAxisLabel() {
        FLYSArtifact flys = (FLYSArtifact) master;

        return msg(
            I18N_XAXIS_LABEL,
            I18N_XAXIS_LABEL_DEFAULT,
            new Object[] { FLYSUtils.getRiver(flys).getName() });
    }


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

        if (index == YAXIS.H.idx) {
            label = getHAxisLabel();
        }

        return label;
    }


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


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

        logger.debug("MiddleBedHeightGenerator.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(MIDDLE_BED_HEIGHT_SINGLE) || name.equals(MIDDLE_BED_HEIGHT_EPOCH)) {
            doHeightOut(
                (MiddleBedHeightData) artifactAndFacet.getData(context),
                artifactAndFacet,
                attr,
                visible);
        }
        else if (name.equals(MIDDLE_BED_HEIGHT_ANNOTATION)) {
            doAnnotations(
                (FLYSAnnotation) artifactAndFacet.getData(context),
                 artifactAndFacet,
                 attr,
                 visible);
        }
        else if (FacetTypes.IS.AREA(name)) {
            doArea(
                artifactAndFacet.getData(context),
                artifactAndFacet,
                attr,
                visible);
        }
        else if (FacetTypes.IS.MANUALPOINTS(name)) {
            doPoints(
                artifactAndFacet.getData(context),
                artifactAndFacet,
                attr,
                visible,
                YAXIS.H.idx);
        }
        else {
            logger.warn("Unknown facet name: " + name);
            return;
        }
    }


    /**
     * @param data A data object
     * @param aandf The artifact and facet. This facet does NOT support any data objects. Use
     * FLYSArtifact.getNativeFacet() instead to retrieve a Facet which supports
     * data.
     * @param theme The theme that contains styling information.
     * @param visible The visibility of the curve.
     */
    protected void doHeightOut(
        MiddleBedHeightData data,
        ArtifactAndFacet    aandf,
        Document            theme,
        boolean             visible
    ) {
        logger.debug("MiddleBedHeightGenerator.doMainChannelOut");

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

        StyledSeriesBuilder.addPoints(series, data.getMiddleHeightsPoints(), false);

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


    /** Look up the axis identifier for a given facet type. */
    public int axisIdxForFacet(String facetName) {
        if (FacetTypes.IS.H(facetName)) {
            return YAXIS.H.idx;
        }
        else {
            logger.warn("Could not find axis for facet " + facetName);
            return YAXIS.H.idx;
        }
    }


    /**
     * Do Area out.
     * @param theme styling information.
     * @param visible whether or not visible.
     */
    protected void doArea(
        Object     o,
        ArtifactAndFacet aandf,
        Document   theme,
        boolean    visible
    ) {
        logger.debug("FlowVelocityGenerator.doArea");
        logger.warn("TODO: Implement FlowVelocityGenerator.doArea");
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org