view artifacts/src/main/java/org/dive4elements/river/exports/MiddleBedHeightGenerator.java @ 6332:f5bb53106ae8

Remove createBarriersLayer and createBarriers The generated mapfiles did not work and were just confusing. This looks like historical cruft that was never deleted. The real barrier mapfiles are created in the Floodmap state
author Andre Heinecke <aheinecke@intevation.de>
date Thu, 13 Jun 2013 17:24:56 +0200
parents 128686fa5add
children 641fd5bd6965
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;

import org.dive4elements.artifactdatabase.state.ArtifactAndFacet;
import org.dive4elements.artifactdatabase.state.Facet;
import org.dive4elements.river.artifacts.D4EArtifact;
import org.dive4elements.river.artifacts.model.FacetTypes;
import org.dive4elements.river.artifacts.model.MiddleBedHeightData;
import org.dive4elements.river.exports.process.BedheightProcessor;
import org.dive4elements.river.exports.process.Processor;
import org.dive4elements.river.exports.process.WOutProcessor;
import org.dive4elements.river.jfree.RiverAnnotation;
import org.dive4elements.river.jfree.StyledXYSeries;
import org.dive4elements.river.utils.RiverUtils;

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

// TODO Move class to org.dive4elements.river.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), W(1), P(2);
        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]";
    public static final String I18N_W_YAXIS_LABEL =
        "chart.longitudinal.section.yaxis.label";
    public static final String I18N_W_YAXIS_LABEL_DEFAULT  = "W [NN + m]";
    public static final String I18N_P_YAXIS_LABEL_DEFAULT  = "Gepeilte Breite [m]";
    public static final String I18N_P_YAXIS_LABEL =
        "chart.bedheight_middle.sounding.yaxis.label";

    @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() {
        D4EArtifact flys = (D4EArtifact) master;

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


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

        if (index == YAXIS.H.idx) {
            label = getHAxisLabel();
        }
        else if (index == YAXIS.W.idx) {
           D4EArtifact flys = (D4EArtifact) master;
           String unit = RiverUtils.getRiver(flys).getWstUnit().getName();

           label = msg(
                I18N_W_YAXIS_LABEL,
                I18N_W_YAXIS_LABEL_DEFAULT,
                new Object[] { unit });
        }
        else if (index == YAXIS.P.idx) {
            label = msg(I18N_P_YAXIS_LABEL, I18N_P_YAXIS_LABEL_DEFAULT);
        }

        return label;
    }


    /**
     * Get internationalized label for the y axis.
     */
    protected String getHAxisLabel() {
        D4EArtifact flys = (D4EArtifact) master;

        String unit = RiverUtils.getRiver(flys).getWstUnit().getName();

        return msg(I18N_YAXIS_LABEL,
            I18N_YAXIS_LABEL_DEFAULT,
            new Object[] { unit });
    }


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

        Processor woutp = new WOutProcessor();
        Processor bedp = new BedheightProcessor();
        WOutProcessor processor = new WOutProcessor();
        if (processor.canHandle(name)) {
            processor.doOut(this, artifactAndFacet, attr, visible, YAXIS.W.idx);
        }
        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(
                (RiverAnnotation) 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 if (bedp.canHandle(name)) {
            bedp.doOut(this, artifactAndFacet, attr, visible, YAXIS.P.idx);
        }
        else if (woutp.canHandle(name)) {
            woutp.doOut(this, artifactAndFacet, attr, visible, YAXIS.W.idx);
        }
        else {
            logger.warn("Unknown facet name: " + name);
        }
    }


    /**
     * @param data A data object
     * @param aandf The artifact and facet. This facet does NOT support any data objects. Use
     * D4EArtifact.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, 0.110d);

        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 if (FacetTypes.IS.W(facetName)) {
            return YAXIS.W.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