view flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/fixation/FixRealizingCompute.java @ 4241:49cb65d5932d

Improved the historical discharge calculation. The calculation now creates new HistoricalWQKms (new subclass of WQKms). Those WQKms are used to create new facets from (new) type 'HistoricalDischargeCurveFacet'. The chart generator is improved to support those facets.
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Wed, 24 Oct 2012 14:34:35 +0200
parents d52c4ca93ffb
children acd7437f66f0
line wrap: on
line source
package de.intevation.flys.artifacts.states.fixation;

import java.util.List;

import org.apache.log4j.Logger;

import de.intevation.artifactdatabase.state.Facet;
import de.intevation.artifacts.CallContext;
import de.intevation.artifacts.CallMeta;
import de.intevation.flys.artifacts.FLYSArtifact;
import de.intevation.flys.artifacts.access.FixRealizingAccess;
import de.intevation.flys.artifacts.model.CalculationResult;
import de.intevation.flys.artifacts.model.DataFacet;
import de.intevation.flys.artifacts.model.FacetTypes;
import de.intevation.flys.artifacts.model.ReportFacet;
import de.intevation.flys.artifacts.model.WQCKms;
import de.intevation.flys.artifacts.model.WQKms;
import de.intevation.flys.artifacts.model.fixings.FixOutlierFacet;
import de.intevation.flys.artifacts.model.fixings.FixRealizingCalculation;
import de.intevation.flys.artifacts.model.fixings.FixRealizingResult;
import de.intevation.flys.artifacts.model.fixings.FixReferenceEventsFacet;
import de.intevation.flys.artifacts.model.fixings.FixWQCurveFacet;
import de.intevation.flys.artifacts.model.fixings.FixWaterlevelFacet;
import de.intevation.flys.artifacts.resources.Resources;
import de.intevation.flys.artifacts.states.DefaultState;

/**
 * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
 */
public class FixRealizingCompute extends DefaultState implements FacetTypes {

    /** The logger used in this class. */
    private static Logger logger = Logger.getLogger(FixRealizingCompute.class);


    public static final String I18N_WQ_CURVE = "fix.vollmer.wq.curve";

    public static final String I18N_WQ_OUTLIER = "fix.vollmer.wq.outliers";

    public static final String I18N_WQ_EVENTS = "fix.vollmer.wq.events";


    /**
     * The default constructor that initializes an empty State object.
     */
    public FixRealizingCompute() {
    }

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

        CalculationResult res;

        FixRealizingAccess access =
            new FixRealizingAccess(artifact);

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

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

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

        String   id   = getID();
        CallMeta meta = context.getMeta();

        FixRealizingResult fixRes = (FixRealizingResult) res.getData();
        WQKms [] wqkms = fixRes != null ? fixRes.getWQKms() : new WQKms[0];

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

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

            Facet w = new FixWaterlevelFacet(
                i, LONGITUDINAL_W, nameW);

            Facet q = new FixWaterlevelFacet(
                i, LONGITUDINAL_Q, nameQ);

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

            if (wqkms[i] instanceof WQCKms) {
                String nameC = nameW.replace(
                    "benutzerdefiniert",
                    "benutzerdefiniert [korrigiert]");

                Facet c = new FixWaterlevelFacet(
                    i, DISCHARGE_LONGITUDINAL_C, nameC);

                facets.add(c);
            }
        }

        if (wqkms.length > 0) {
            facets.add(
                new DataFacet(CSV, "CSV data", ComputeType.ADVANCE, hash, id));

            facets.add(
                new DataFacet(WST, "WST data", ComputeType.ADVANCE, hash, id));

            facets.add(
                new DataFacet(PDF, "PDF data", ComputeType.ADVANCE, hash, id));
        }

        facets.add(new FixWQCurveFacet(
            0, Resources.getMsg(meta, I18N_WQ_CURVE, I18N_WQ_CURVE)));

        facets.add(new FixReferenceEventsFacet(
            0,
            FIX_REFERENCE_EVENTS_WQ,
            Resources.getMsg(meta, I18N_WQ_EVENTS, I18N_WQ_EVENTS)));

        facets.add(new FixOutlierFacet(
            0,
            FIX_OUTLIER,
            Resources.getMsg(meta, I18N_WQ_OUTLIER, I18N_WQ_OUTLIER)));

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

http://dive4elements.wald.intevation.org