view flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/GaugeDischargeCurveFacet.java @ 5496:23d8f2700b38

Add support for multiple floodplains and add them to the datacage accordingly
author Andre Heinecke <aheinecke@intevation.de>
date Thu, 28 Mar 2013 12:39:14 +0100
parents dbe9b7d6b80b
children
line wrap: on
line source
package de.intevation.flys.artifacts.model;

import java.util.Arrays;
import java.util.Map;

import de.intevation.artifacts.Artifact;
import de.intevation.artifacts.CallContext;

import de.intevation.artifactdatabase.state.DefaultFacet;
import de.intevation.artifactdatabase.state.Facet;

import de.intevation.flys.artifacts.FLYSArtifact;

import de.intevation.flys.model.Gauge;

import de.intevation.flys.utils.FLYSUtils;

import org.apache.log4j.Logger;

/**
 * A Facet that returns discharge curve data at a gauge
 *
 * @author <a href="mailto:bjoern.ricks@intevation.de">Björn Ricks</a>
 */
public class GaugeDischargeCurveFacet
extends      DefaultFacet
implements FacetTypes
{
    private static final Logger log =
        Logger.getLogger(GaugeDischargeCurveFacet.class);

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

    @Override
    public Object getData(Artifact art, CallContext context) {
        return getWQKms(art, context);
    }

    protected WQKms getWQKms(Artifact art, CallContext context) {
        if (!(art instanceof FLYSArtifact)) {
            log.warn("Invalid artifact type");
            return null;
        }

        FLYSArtifact flys = (FLYSArtifact)art;

        String river = flys.getDataAsString("river");

        Gauge gauge = FLYSUtils.getReferenceGauge(flys);

        if (river == null || gauge == null) {
            log.warn("Unknown river or gauge");
            return null;
        }

        String name = gauge.getName();

        DischargeTables dt = new DischargeTables(river, name);

        Map<String, double [][]> map = dt.getValues(
                DischargeTables.MASTER_SCALE);

        double [][] values = map.get(name);
        if (values == null) {
            return null;
        }
        double [] kms = new double[values[0].length];
        Arrays.fill(kms, gauge.getStation().doubleValue());
        return new WQKms(kms, values[0], values[1], name);
    }

    @Override
    public Facet deepCopy() {
        GaugeDischargeCurveFacet copy = new GaugeDischargeCurveFacet(
                this.name,
                this.description);
        copy.set(this);
        return copy;
    }
}

http://dive4elements.wald.intevation.org