view artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCurveFacet.java @ 9257:ef7b65576d4b

Added W and Q main values to S-Info flood duration curve chart
author mschaefer
date Fri, 13 Jul 2018 18:38:05 +0200
parents c2a0028bfa9f
children e5367900dd6d
line wrap: on
line source
/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
 * Software engineering by Intevation GmbH
 *
 * This file is Free Software under the GNU AGPL (>=v3)
 * and comes with ABSOLUTELY NO WARRANTY! Check out the
 * documentation coming with Dive4Elements River for details.
 */

package org.dive4elements.river.artifacts.sinfo.flood_duration;

//import java.util.ArrayList;
//import java.util.List;

import org.apache.log4j.Logger;
import org.dive4elements.artifactdatabase.state.DefaultFacet;
import org.dive4elements.artifactdatabase.state.Facet;
import org.dive4elements.artifacts.Artifact;
import org.dive4elements.artifacts.CallContext;
import org.dive4elements.river.artifacts.D4EArtifact;
import org.dive4elements.river.artifacts.model.CalculationResult;
//import org.dive4elements.river.artifacts.model.WQDay;
import org.dive4elements.river.artifacts.states.DefaultState.ComputeType;


/**
 * Data of a duration curve.
 */
public class FloodDurationCurveFacet extends DefaultFacet {

    private static Logger log = Logger.getLogger(FloodDurationCurveFacet.class);

    // /** Blackboard data provider key for durationcurve (wqday) data. */
    // public static String BB_DURATIONCURVE = "durationcurve";
    //
    // /** Blackboard data provider key for km of durationcurve. */
    // public static String BB_DURATIONCURVE_KM = "durationcurve.km";

    public FloodDurationCurveFacet() {
    }

    public FloodDurationCurveFacet(final String name, final String description) {
        super(0, name, description);
    }


    /**
     * Expose state computation from SINFOArtifact.
     */
    @Override
    public Object getData(final Artifact artifact, final CallContext context) {

        log.debug("Get data for flood duration curve data");

        final D4EArtifact flys = (D4EArtifact) artifact;

        final CalculationResult res = (CalculationResult) flys.compute(context, ComputeType.ADVANCE, false);

        final FloodDurationCalculationResults data = (FloodDurationCalculationResults) res.getData();

        return data.getDurationCurve();
        // return getTestData();
    }

    // private WQDay getTestData() {
    // final int[] days = new int[366];
    // final double[] ws = new double[366];
    // final double[] qs = new double[366];
    // for (int i = 0; i <= 365; i++) {
    // days[i] = i;
    // final double x = (i - 182.5) / 182.5;
    // ws[i] = 102.0 - (Math.pow(x, 5) + x);
    // qs[i] = 1600.0 - 800 * (Math.pow(x, 9) + x);
    // }
    // return new WQDay(days, ws, qs);
    // }


    // @Override
    // public List getStaticDataProviderKeys(final Artifact art) {
    // final List list = new ArrayList();
    // list.add(BB_DURATIONCURVE);
    // list.add(BB_DURATIONCURVE_KM);
    // return list;
    // }


    // /**
    // * Can provide whatever getData returns and additionally the location.
    // * @param key will respond on BB_DURATIONCURVE +KM
    // * @param param ignored
    // * @param context ignored
    // * @return whatever getData delivers or location.
    // */
    // @Override
    // public Object provideBlackboardData(final Artifact artifact,
    // final Object key,
    // final Object param,
    // final CallContext context
    // ) {
    // if (key.equals(BB_DURATIONCURVE)) {
    // return getData(artifact, context);
    // }
    // else if (key.equals(BB_DURATIONCURVE_KM)) {
    // return ((D4EArtifact)artifact).getDataAsString("ld_locations");
    // }
    // else {
    // return null;
    // }
    // }


    /** Create a deep copy. */
    @Override
    public Facet deepCopy() {
        final FloodDurationCurveFacet copy = new FloodDurationCurveFacet();
        copy.set(this);
        return copy;
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org