view flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/WaterlevelState.java @ 5785:d38004f0c52f

Datacage: Always clone XML template for builders. If the first is not cloned they get interlinked somehow. Feels like a bug in Java's DOM implementation.
author Sascha L. Teichmann <teichmann@intevation.de>
date Mon, 22 Apr 2013 17:01:17 +0200
parents 1b4aaa7dbd07
children
line wrap: on
line source
package de.intevation.flys.artifacts.states;

import java.util.List;

import org.apache.log4j.Logger;

import de.intevation.artifactdatabase.state.Facet;
import de.intevation.artifacts.CallContext;
import de.intevation.flys.artifacts.ChartArtifact;
import de.intevation.flys.artifacts.FLYSArtifact;
import de.intevation.flys.artifacts.WINFOArtifact;
import de.intevation.flys.artifacts.model.CalculationResult;
import de.intevation.flys.artifacts.model.CrossSectionWaterLineFacet;
import de.intevation.flys.artifacts.model.DataFacet;
import de.intevation.flys.artifacts.model.EmptyFacet;
import de.intevation.flys.artifacts.model.FacetTypes;
import de.intevation.flys.artifacts.model.ReportFacet;
import de.intevation.flys.artifacts.model.WQKms;
import de.intevation.flys.artifacts.model.WaterlevelFacet;
import de.intevation.flys.utils.FLYSUtils;

/** State in which a waterlevel has been calculated. */
public class WaterlevelState
extends      DefaultState
implements   FacetTypes
{
    /** The logger that is used in this state. */
    private static Logger logger = Logger.getLogger(WaterlevelState.class);


    /**
     * From this state can only be continued trivially.
     */
    @Override
    protected String getUIProvider() {
        return "continue";
    }


    /**
     * Compute result or returned object from cache, create facets.
     * @param old Object that was cached.
     */
    protected Object compute(
        WINFOArtifact winfo,
        CallContext   cc,
        String        hash,
        List<Facet>   facets,
        Object        old
    ) {
        String id = getID();

        CalculationResult res = old instanceof CalculationResult
            ? (CalculationResult) old
            : winfo.getWaterlevelData();

        if (facets == null) {
            return res;
        }

        boolean debug = logger.isDebugEnabled();

        WQKms [] wqkms = (WQKms []) res.getData();

        for (int i = 0; i < wqkms.length; i++) {
            String name = wqkms[i].getName();

            String nameW = FLYSUtils.createWspWTitle(winfo, cc, name);
            String nameQ = FLYSUtils.createWspQTitle(winfo, cc, name);

            // Hotfix for theme names. Themes with the same name cause problems
            // aggregating chart legend items.
            if (i > 0 && name.equals(wqkms[i - 1].getName())) {
                nameW += "; Q=" + wqkms[i].get(0, new double[3])[1];
                nameQ += " = " + wqkms[i].get(0, new double[3])[1];
            }

            if (debug) {
                logger.debug("Create facet: " + nameW);
                logger.debug("Create facet: " + nameQ);
            }

            Facet w = new WaterlevelFacet(
                i, LONGITUDINAL_W, nameW, ComputeType.ADVANCE, id, hash);
            Facet q = new WaterlevelFacet(
                i, LONGITUDINAL_Q, nameQ, ComputeType.ADVANCE, id, hash);

            facets.add(new CrossSectionWaterLineFacet(i, nameW));

            facets.add(w);
            facets.add(q);
        }

        if (wqkms.length > 0) {
            Facet wst = new DataFacet(
                WST, "WST data", ComputeType.ADVANCE, hash, id);
            Facet csv = new DataFacet(
                CSV, "CSV data", ComputeType.ADVANCE, hash, id);
            Facet pdf = new DataFacet(
                PDF, "PDF data", ComputeType.ADVANCE, hash, id);

            facets.add(wst);
            facets.add(csv);
            facets.add(pdf);
        }

        if (res.getReport().hasProblems()) {
            facets.add(new ReportFacet(ComputeType.ADVANCE, hash, id));
        }

        return res;
    }


    /**
     * @param context Ignored.
     */
    @Override
    public Object computeFeed(
        FLYSArtifact artifact,
        String       hash,
        CallContext  context,
        List<Facet>  facets,
        Object       old
    ) {
        if (artifact instanceof ChartArtifact) {
            facets.add(new EmptyFacet());
            return null;
        }
        return compute((WINFOArtifact) artifact, context, hash, facets, old);
    }


    /**
     * @param context Ignored.
     */
    @Override
    public Object computeAdvance(
        FLYSArtifact artifact,
        String       hash,
        CallContext  context,
        List<Facet>  facets,
        Object       old
    ) {
        if (artifact instanceof ChartArtifact) {
            facets.add(new EmptyFacet());
            return null;
        }
        return compute((WINFOArtifact) artifact, context, hash, facets, old);
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org