view flys-artifacts/src/main/java/de/intevation/flys/exports/ReferenceCurveGenerator.java @ 2253:707b47d8c554

Dont sort the data series in reference curve. flys-artifacts/trunk@3903 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Fri, 03 Feb 2012 14:53:11 +0000
parents c9c788eea200
children dd93a8e1377a
line wrap: on
line source
package de.intevation.flys.exports;

import de.intevation.artifactdatabase.state.ArtifactAndFacet;

import de.intevation.flys.artifacts.model.FacetTypes;

import de.intevation.flys.artifacts.model.WW.ApplyFunctionIterator;

import de.intevation.flys.artifacts.model.WW;

import de.intevation.flys.jfree.StyledXYSeries;

import java.awt.Font;

import org.apache.log4j.Logger;

import org.jfree.chart.axis.NumberAxis;

import org.jfree.data.xy.XYSeries;

import org.w3c.dom.Document;


/**
 * An OutGenerator that generates reference curves.
 */
public class ReferenceCurveGenerator
extends      XYChartGenerator
implements   FacetTypes
{
    public static enum YAXIS {
        W(0);
        public int idx;
        private YAXIS(int c) {
           idx = c;
        }
    }

    private static Logger logger =
        Logger.getLogger(ReferenceCurveGenerator.class);

    /*
    public static final String I18N_CHART_TITLE =
        "chart.reference.curve.title";

    public static final String I18N_CHART_SUBTITLE =
        "chart.reference.curve.subtitle";

    public static final String I18N_XAXIS_LABEL =
        "chart.reference.curve.xaxis.label";

    public static final String I18N_YAXIS_LABEL =
        "chart.reference.curve.yaxis.label";

    public static final String I18N_CHART_TITLE_DEFAULT  =
        "Bezugslinie";

    public static final String I18N_XAXIS_LABEL_DEFAULT  =
        "W [NN+m]";

    public static final String I18N_YAXIS_LABEL_DEFAULT  =
        "W [NN + m]";
    */

    public ReferenceCurveGenerator() {
        super();
    }


    /**
     * Create Axis for given index.
     * @return axis with according internationalized label.
     */
    @Override
    protected NumberAxis createYAxis(int index) {
        Font labelFont = new Font("Tahoma", Font.BOLD, 14);
        String label   = getYAxisLabel(index);

        NumberAxis axis = createNumberAxis(index, label);
        if (index == YAXIS.W.idx) {
            axis.setAutoRangeIncludesZero(false);
        }
        axis.setLabelFont(labelFont);
        return axis;
    }

    /** Get default chart title. */
    @Override
    protected String getDefaultChartTitle() {
        // TODO i18n return msg(I18N_CHART_TITLE, I18N_CHART_TITLE_DEFAULT);
        return "Bezugslinien";
    }

    /*
    // TODO i18n
    @Override
    protected String getDefaultChartSubtitle() {
        double[] dist  = getRange();

        Object[] args = new Object[] {
            getRiverName(),
            dist[0]
        };

        return msg(I18N_CHART_SUBTITLE, "", args);
    }


    @Override
    protected void addSubtitles(JFreeChart chart) {
        String subtitle = getChartSubtitle();

        if (subtitle != null && subtitle.length() > 0) {
            chart.addSubtitle(new TextTitle(subtitle));
        }
    }
    */


    /** Get Label for X-axis (W). */
    @Override
    protected String getDefaultXAxisLabel() {
        // TODO i18nreturn msg(I18N_XAXIS_LABEL, I18N_XAXIS_LABEL_DEFAULT);
        return "W!";
    }


    /**
     * Get Label for primary and other Y Axes.
     * @param index Axis-Index (0-based).
     */
    @Override
    protected String getDefaultYAxisLabel(int index) {
        String label = "default";
        if (index == YAXIS.W.idx) {
            //label = msg(I18N_YAXIS_LABEL, I18N_YAXIS_LABEL_DEFAULT);
            //TODO i18n
            return "W over W over W";
        }

        return label;
    }


    /**
     * Called for each facet/them in the out mapped to this generator.
     * @param artifactFacet artifact and facet for this theme.
     * @param theme         styling info.
     * @param visible       Whether or not the theme is visible.
     */
    @Override
    public void doOut(
        ArtifactAndFacet artifactFacet,
        Document         theme,
        boolean          visible
    ) {
        String name = artifactFacet.getFacetName();

        logger.debug("ReferenceCurveGenerator.doOut: " + name);

        if (name == null || name.length() == 0) {
            logger.error("No facet given. Cannot create dataset.");
            return;
        }

        if (name.equals(REFERENCE_CURVE)) {
            doReferenceOut(artifactFacet.getData(context), theme, visible);
        }
        else {
            logger.warn("Unknown facet name: " + name);
            return;
        }
    }


    public void doReferenceOut(
        Object   data,
        Document theme,
        boolean  visible
    ) {
        ApplyFunctionIterator iter = (ApplyFunctionIterator) data;

        XYSeries series = new StyledXYSeries(
            iter.getWW().getName(), false, theme);

        double [] values = new double[2];

        while (iter.hasNext()) {
            iter.next(values);
            series.add(values[0], values[1], false);
        }

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


    /** Get Walker to iterate over all axes. */
    @Override
    protected YAxisWalker getYAxisWalker() {
        return new YAxisWalker() {
            /** Get number of items. */
            @Override
            public int length() {
                return YAXIS.values().length;
            }

            /** Get identifier for this index. */
            @Override
            public String getId(int idx) {
                YAXIS[] yaxes = YAXIS.values();
                return yaxes[idx].toString();
            }
        };
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org