view flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/extreme/ExtremeCompute.java @ 4302:ce10b846bc86

ExtremeCompute: Generate LS-Facets.
author Felix Wolfsteller <felix.wolfsteller@intevation.de>
date Mon, 29 Oct 2012 13:46:39 +0100
parents 1f304cb5729b
children e7b923cf3a9c
line wrap: on
line source
package de.intevation.flys.artifacts.states.extreme;

import de.intevation.artifactdatabase.state.Facet;

import de.intevation.artifacts.CallContext;

import de.intevation.flys.artifacts.FLYSArtifact;

import de.intevation.flys.artifacts.access.ExtremeAccess;

import de.intevation.flys.artifacts.model.Calculation;
import de.intevation.flys.artifacts.model.CalculationResult;
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.extreme.ExtremeCalculation;
import de.intevation.flys.artifacts.model.extreme.ExtremeResult;

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

import de.intevation.flys.utils.FLYSUtils;

import java.util.List;

import org.apache.log4j.Logger;

/** State in which to deliver extreme value analysis result. */
public class ExtremeCompute
extends      DefaultState
implements   FacetTypes
{
    /** Private logger. */
    private static Logger logger = Logger.getLogger(ExtremeCompute.class);

    public ExtremeCompute() {
    }

    @Override
    public Object computeAdvance(
        FLYSArtifact artifact,
        String       hash,
        CallContext  context,
        List<Facet>  facets,
        Object       old
    ) {
        logger.debug("ExtremeCompute.computeAdvance");

        CalculationResult res;

        ExtremeAccess access = new ExtremeAccess(artifact);

        if (old instanceof CalculationResult) {
            res = (CalculationResult)old;
        }
        else {
            ExtremeCalculation calc = new ExtremeCalculation(access);
            res = calc.calculate();
        }

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

        if (res.getReport().hasProblems()) {
            facets.add(new ReportFacet());
        }

        ExtremeResult eres = (ExtremeResult) res.getData();
        WQKms [] wqkms = (WQKms []) eres.getWQKms();

        if (wqkms == null) {
            logger.error("No computation result!");
        }

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

            // Ext.Calc has wqkmsName(i)
            String nameW = "WW";//TODO: FLYSUtils.createWspWTitle(artifact, context, name);
            String nameQ = "QQ";//FLYSUtils.createWspQTitle(artifact, context, 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];
            }

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

            // TODO add more facets like:
            // csv, data, pdf wst facet
            // furthermore, waterlevel
            //facets.add(new CrossSectionWaterLineFacet(i, nameW));

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


        return res;
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org