view flys-artifacts/src/main/java/de/intevation/flys/artifacts/QSectorArtifact.java @ 4378:8eb1d6dc96a9

Add chart generation for fixings in bed differences generators If matching fixanalysis data is loaded via the datacage the bed difference generators are now able to display graphs for the additonal data.
author Björn Ricks <bjoern.ricks@intevation.de>
date Fri, 02 Nov 2012 15:50:35 +0100
parents a66df8e8d3df
children a2735a4bf75e
line wrap: on
line source
package de.intevation.flys.artifacts;

import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;

import org.w3c.dom.Document;

import de.intevation.artifactdatabase.state.Facet;

import de.intevation.artifacts.Artifact;
import de.intevation.artifacts.ArtifactFactory;
import de.intevation.artifacts.CallMeta;
import de.intevation.artifacts.CallContext;

import de.intevation.flys.artifacts.model.GaugeFinder;
import de.intevation.flys.artifacts.model.GaugeFinderFactory;
import de.intevation.flys.artifacts.model.GaugeRange;
import de.intevation.flys.artifacts.model.NamedDouble;

import de.intevation.flys.artifacts.services.FixingsKMChartService;

import de.intevation.flys.artifacts.states.DefaultState;

import de.intevation.flys.artifacts.resources.Resources;


/**
 * Artifact to produce sector markers.
 */
public class QSectorArtifact
extends      StaticFLYSArtifact
{
    /** The logger for this class. */
    private static Logger logger = Logger.getLogger(QSectorArtifact.class);

    /** The name of the artifact. */
    public static final String ARTIFACT_NAME = "qsector";


    /**
     * Trivial Constructor.
     */
    public QSectorArtifact() {
        logger.debug("QSectorArtifact.QSectorArtifact()");
    }


    /**
     * Gets called from factory, to set things up.
     */
    @Override
    public void setup(
        String          identifier,
        ArtifactFactory factory,
        Object          context,
        CallMeta        callMeta,
        Document        data)
    {
        logger.debug("QSectorArtifact.setup");
        super.setup(identifier, factory, context, callMeta, data);
        initialize(null, context, callMeta);
    }


    /** Return the name of this artifact. */
    public String getName() {
        return ARTIFACT_NAME;
    }


    /** Get list of NamedDouble s (QSectors). */
    public Object getQSectors(double km, CallContext context) {

        String river = getDataAsString("river");
        List<NamedDouble> qsectors = new ArrayList<NamedDouble>();

        GaugeFinderFactory ggf = GaugeFinderFactory.getInstance();
        GaugeFinder        gf  = ggf.getGaugeFinder(river);

        if (gf == null) {
            logger.warn("No gauge finder found for river '" + river + "'");
            return null;
        }

        GaugeRange gr = gf.find(km);
        if (gr == null) {
            logger.debug("No gauge range found for km "
                + km + " on river " + river + ".");
            return null;
        }

        if (logger.isDebugEnabled()) {
            logger.debug(gr);
        }

        for (int i = 0; i < FixingsKMChartService.I18N_Q_SECTOR_BOARDERS.length; ++i) {
            String key   = FixingsKMChartService.I18N_Q_SECTOR_BOARDERS[i];
            String def   = FixingsKMChartService.DEFAULT_Q_SECTOR_BORDERS[i];
            String label = Resources.getMsg(context.getMeta(), key, def);

            qsectors.add(new NamedDouble(label, gr.getSectorBorder(i)));
        }

        return qsectors;
    }


    /** Setup state and facet. */
    @Override
    protected void initialize(Artifact artifact, Object context, CallMeta meta) {
        logger.debug("QSectorArtifact.initialize");
        List<Facet> fs = new ArrayList<Facet>();

        FLYSArtifact flys = (FLYSArtifact) artifact;
        importData(flys, "river");

        DefaultState state = (DefaultState) getCurrentState(context);
        state.computeInit(this, hash(), context, meta, fs);
        if (!fs.isEmpty()) {
            logger.debug("Facets to add in QSectorArtifact.initialize .");
            facets.put(getCurrentStateId(), fs);
        }
        else {
            logger.debug("No facets to add in QSectorArtifact.initialize ("
                + state.getID() + ").");
        }
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org