Mercurial > dive4elements > river
view artifacts/src/main/java/org/dive4elements/river/artifacts/model/GaugeDischargeCurveFacet.java @ 8333:be7864b4fabb
Let's be more generous with facet activity of main values.
author | "Tom Gottfried <tom@intevation.de>" |
---|---|
date | Fri, 26 Sep 2014 10:50:54 +0200 |
parents | 10917ec29625 |
children | 1c732c88a2d6 |
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.model; import java.util.Arrays; import java.util.Map; import org.dive4elements.artifacts.Artifact; import org.dive4elements.artifacts.CallContext; import org.dive4elements.artifactdatabase.state.Facet; import org.dive4elements.river.artifacts.D4EArtifact; import org.dive4elements.river.model.Gauge; import org.dive4elements.river.utils.RiverUtils; import org.apache.log4j.Logger; import static org.dive4elements.river.exports.injector.InjectorConstants.PNP; /** * 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 DataFacet implements FacetTypes { private static final Logger log = Logger.getLogger(GaugeDischargeCurveFacet.class); public GaugeDischargeCurveFacet() { } public GaugeDischargeCurveFacet(String name, String description) { super(name, description); } @Override public Object getData(Artifact art, CallContext context) { return getWQKms(art, context); } protected WQKms getWQKms(Artifact art, CallContext context) { if (!(art instanceof D4EArtifact)) { log.warn("Invalid artifact type"); return null; } D4EArtifact flys = (D4EArtifact)art; String river = flys.getDataAsString("river"); Gauge gauge = RiverUtils.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(); double [][] values = map.get(name); if (values == null) { return null; } double [] kms = new double[values[0].length]; Arrays.fill(kms, gauge.getStation().doubleValue()); Object pnpObject = context.getContextValue(PNP); if (!(pnpObject instanceof Number)) { return new WQKms(kms, values[0], values[1], name, W.CENTIMETER_AT_GAUGE); } double pnp = Double.valueOf(pnpObject.toString()); double[] ws = transformToM(values[1], pnp); return new WQKms(kms, values[0], ws, name); } private double[] transformToM(double[] ws, double pnp) { double[] retVals = new double[ws.length]; for (int i = 0; i < ws.length; i++) { retVals[i] = ws[i]/100 + pnp; } return retVals; } @Override public Facet deepCopy() { GaugeDischargeCurveFacet copy = new GaugeDischargeCurveFacet( this.name, this.description); copy.set(this); return copy; } }