view flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/fixation/FixationCompute.java @ 3028:77b5f5a26700

Added facets for fix analysis. flys-artifacts/trunk@4597 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Raimund Renkert <raimund.renkert@intevation.de>
date Wed, 06 Jun 2012 08:07:32 +0000
parents 0abdede5a0b8
children b388d888330d
line wrap: on
line source
package de.intevation.flys.artifacts.states.fixation;

import de.intevation.artifactdatabase.state.Facet;

import de.intevation.artifacts.CallContext;

import de.intevation.flys.artifacts.FLYSArtifact;
import de.intevation.flys.artifacts.FixationArtifactAccess;

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.fixings.FixCalculation;

import de.intevation.flys.artifacts.model.fixings.FixAvSectorFacet;
import de.intevation.flys.artifacts.model.fixings.FixEventsFacet;
import de.intevation.flys.artifacts.model.fixings.FixOutlierFacet;
import de.intevation.flys.artifacts.model.fixings.FixWQCurveFacet;


import de.intevation.flys.artifacts.model.fixings.DateRange;

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

import java.util.List;

import org.apache.log4j.Logger;

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

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


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

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

        CalculationResult res;

        FixationArtifactAccess access =
            new FixationArtifactAccess(artifact);

        if (old instanceof CalculationResult) {
            res = (CalculationResult)old;
        }
        else {
            FixCalculation calc =
                new FixCalculation(access);

            res = calc.calculate();
        }

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

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

        int count = access.getAnalysisPeriods().length;
        for (int i = 0; i < count; i++) {
            DateRange period = access.getAnalysisPeriods()[i];
            for (int j = access.getQSectorStart().intValue();
                 j < access.getQSectorEnd().intValue();
                 j++) {
                //TODO: replace j with q sector string.
                String description = j + ": " +
                                     period.getFrom().toString() + " - " +
                                     period.getTo().toString();
                facets.add(
                    new FixAvSectorFacet(j - access.getQSectorStart().intValue(),
                                         description));
            }
            String eventDesc = period.getFrom().toString() +
                               " - " +
                               period.getTo().toString();
            facets.add(new FixEventsFacet(i, eventDesc));
        }
        facets.add(new FixEventsFacet(0, "Referenceperiod"));
        facets.add(new FixWQCurveFacet("W/Q"));
        facets.add(new FixOutlierFacet("Outlier"));

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

http://dive4elements.wald.intevation.org