view flys-artifacts/src/main/java/de/intevation/flys/exports/sq/SQRelationGenerator.java @ 3105:9592b7d76633

Generate fake data for SQ curves; Implemented the Facet and Generator stuff. flys-artifacts/trunk@4704 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Tue, 19 Jun 2012 13:55:14 +0000
parents ef0dd585b5e0
children 63ef889eea2b
line wrap: on
line source
package de.intevation.flys.exports.sq;

import org.apache.log4j.Logger;

import org.jfree.chart.axis.LogarithmicAxis;
import org.jfree.chart.axis.NumberAxis;
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.sq.SQ;
import de.intevation.flys.artifacts.model.sq.SQFunction;
import de.intevation.flys.exports.XYChartGenerator;
import de.intevation.flys.jfree.Function2DAdapter;
import de.intevation.flys.jfree.JFreeUtil;
import de.intevation.flys.jfree.StyledXYSeries;

/**
 * An OutGenerator that generates charts for MINFO sq relation.
 *
 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
 */
public class SQRelationGenerator
extends      XYChartGenerator
implements   FacetTypes
{
    public enum YAXIS {
        S(0);
        protected int idx;
        private YAXIS(int c) {
           idx = c;
        }
    }

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


    @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();
            }
        };
    }


    @Override
    public String getDefaultChartTitle() {
        return "TODO: CHART TITLE";
    }


    @Override
    protected String getDefaultXAxisLabel() {
        return "TODO: XAXIS LABEL";
    }


    @Override
    protected String getDefaultYAxisLabel(int index) {
        return "TODO: YAXIS LABEL " + index;
    }


    @Override
    protected NumberAxis createXAxis(String label) {
        return new LogarithmicAxis(label);
    }


    @Override
    protected NumberAxis createYAxis(int index) {
        return new LogarithmicAxis("TODO: LABEL " + index);
    }


    @Override
    public void doOut(
        ArtifactAndFacet artifactAndFacet,
        Document         attr,
        boolean          visible
    ) {
        logger.debug("doOut");

        Facet  facet = artifactAndFacet.getFacet();
        String name  = facet != null ? facet.getName() : null;

        if (name == null || name.length() == 0) {
            logger.warn("Invalid facet with no name given!");
            return;
        }

        if (IS.SQ_CURVE(name)) {
            doSQCurveOut(artifactAndFacet, attr, visible);
        }
        else if (IS.SQ_MEASUREMENT(name)) {
            doSQOut(artifactAndFacet, attr, visible);
        }
        else if (IS.SQ_OUTLIER(name)) {
            doSQOut(artifactAndFacet, attr, visible);
        }
    }


    protected void doSQCurveOut(
        ArtifactAndFacet artifactAndFacet,
        Document         attr,
        boolean          visible
    ) {
        logger.debug("doSQCurveOut");

        Facet      f    = artifactAndFacet.getFacet();
        SQFunction func = (SQFunction) artifactAndFacet.getData(context);

        XYSeries series = JFreeUtil.sampleFunction2D(
            new Function2DAdapter(func.getFunction()),
            attr,
            "SQ Curve",
            10,
            func.getMinQ(),
            func.getMaxQ());

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


    protected void doSQOut(
        ArtifactAndFacet artifactAndFacet,
        Document         attr,
        boolean          visible
    ) {
        logger.debug("doSQOut: " + artifactAndFacet.getFacetDescription());

        Facet    f      = artifactAndFacet.getFacet();
        SQ[]     sqs    = (SQ[]) artifactAndFacet.getData(context);
        XYSeries series = new StyledXYSeries(f.getDescription(), attr);

        for (SQ sq: sqs) {
            series.add(sq.getQ(), sq.getS());
        }

        addAxisSeries(series, YAXIS.S.idx, visible);
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org