view flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/WaterlevelInfoState.java @ 2571:63f44b8b41a3

Partial Dontcrash on flys/issue647 (NaNs from WstValueTable interpolation). flys-artifacts/trunk@4099 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Felix Wolfsteller <felix.wolfsteller@intevation.de>
date Thu, 01 Mar 2012 12:17:38 +0000
parents 51b9899f819d
children 3bf86d01fa54
line wrap: on
line source
package de.intevation.flys.artifacts.states;

import java.util.List;

import org.apache.log4j.Logger;

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

import de.intevation.artifactdatabase.state.Facet;

import de.intevation.flys.artifacts.FLYSArtifact;
import de.intevation.flys.artifacts.WINFOArtifact;
import de.intevation.flys.artifacts.model.FacetTypes;
import de.intevation.flys.artifacts.model.ReportFacet;
import de.intevation.flys.artifacts.model.WaterlevelFacet;
import de.intevation.flys.artifacts.model.WQKms;

import de.intevation.flys.artifacts.model.DataFacet;
import de.intevation.flys.artifacts.model.CrossSectionWaterLineFacet;
import de.intevation.flys.artifacts.model.CalculationResult;


public class WaterlevelInfoState
extends      DefaultState
implements   FacetTypes
{
    /** The logger that is used in this state. */
    private static Logger logger = Logger.getLogger(WaterlevelInfoState.class);


    @Override
    protected String getUIProvider() {
        return "noinput";
    }


    public Object computeInit(
        FLYSArtifact artifact,
        String       hash,
        Object       context,
        CallMeta     meta,
        List<Facet>  facets
    ) {
        return compute((WINFOArtifact) artifact, hash, facets, null);
    }


    protected Object compute(
        WINFOArtifact winfo,
        String        hash,
        List<Facet>   facets,
        Object        old
    ) {
        logger.debug("WaterlevelInfoState.compute");
        String id = getID();

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

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

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

        for (int i = 0; i < wqkms.length; i++) {
            String nameW = null;
            String nameQ = null;

            if (winfo.isQ()) {
                nameQ = wqkms[i].getName();
                nameW = "W(" + nameQ + ")";
            }
            else {
                nameW = wqkms[i].getName();
                nameQ = "Q(" + nameQ + ")";
            }

            logger.debug("WaterlevelInfoState Create facet: " + nameW);
            logger.debug("WaterlevelInfoState 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(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);

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

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

        // TODO Adjust to WaterlevelState - implementation.
        facets.add(new CrossSectionWaterLineFacet(0, "Q=" + winfo.getDataAsString("wq_single")));

        // Assume to be in wq_single mode.
        return res;
    }


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


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

http://dive4elements.wald.intevation.org