teichmann@5863: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5863: * Software engineering by Intevation GmbH teichmann@5863: * teichmann@5863: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5863: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5863: * documentation coming with Dive4Elements River for details. teichmann@5863: */ teichmann@5863: teichmann@5831: package org.dive4elements.river.artifacts.model; bjoern@3936: bjoern@3936: import java.util.Arrays; bjoern@3936: import java.util.Map; bjoern@3936: teichmann@5831: import org.dive4elements.artifacts.Artifact; teichmann@5831: import org.dive4elements.artifacts.CallContext; bjoern@3936: teichmann@5831: import org.dive4elements.artifactdatabase.state.DefaultFacet; teichmann@5831: import org.dive4elements.artifactdatabase.state.Facet; bjoern@3936: teichmann@5867: import org.dive4elements.river.artifacts.D4EArtifact; teichmann@3986: teichmann@5831: import org.dive4elements.river.model.Gauge; bjoern@3936: teichmann@5865: import org.dive4elements.river.utils.RiverUtils; teichmann@3986: teichmann@3986: import org.apache.log4j.Logger; teichmann@3986: bjoern@3936: /** bjoern@3936: * A Facet that returns discharge curve data at a gauge bjoern@3936: * bjoern@3936: * @author Björn Ricks bjoern@3936: */ bjoern@3936: public class GaugeDischargeCurveFacet bjoern@3936: extends DefaultFacet bjoern@4032: implements FacetTypes bjoern@3936: { teichmann@3986: private static final Logger log = teichmann@3986: Logger.getLogger(GaugeDischargeCurveFacet.class); bjoern@3936: bjoern@4187: public GaugeDischargeCurveFacet(String name, String description) { bjoern@4187: super(0, name, description); bjoern@3936: } bjoern@3936: bjoern@3936: @Override bjoern@3936: public Object getData(Artifact art, CallContext context) { bjoern@4583: return getWQKms(art, context); bjoern@4583: } bjoern@3936: bjoern@4583: protected WQKms getWQKms(Artifact art, CallContext context) { teichmann@5867: if (!(art instanceof D4EArtifact)) { teichmann@3986: log.warn("Invalid artifact type"); teichmann@3986: return null; teichmann@3986: } teichmann@3986: teichmann@5867: D4EArtifact flys = (D4EArtifact)art; teichmann@3986: teichmann@3986: String river = flys.getDataAsString("river"); teichmann@3986: teichmann@5865: Gauge gauge = RiverUtils.getReferenceGauge(flys); teichmann@3986: teichmann@3986: if (river == null || gauge == null) { teichmann@3986: log.warn("Unknown river or gauge"); teichmann@3986: return null; teichmann@3986: } teichmann@3986: teichmann@3986: String name = gauge.getName(); teichmann@3986: teichmann@3986: DischargeTables dt = new DischargeTables(river, name); bjoern@3936: bjoern@4584: Map map = dt.getValues( rrenkert@4919: DischargeTables.MASTER_SCALE); bjoern@3936: bjoern@3936: double [][] values = map.get(name); bjoern@3936: if (values == null) { bjoern@3936: return null; bjoern@3936: } bjoern@3936: double [] kms = new double[values[0].length]; bjoern@3936: Arrays.fill(kms, gauge.getStation().doubleValue()); teichmann@3986: return new WQKms(kms, values[0], values[1], name); bjoern@3936: } bjoern@3936: bjoern@3936: @Override bjoern@3936: public Facet deepCopy() { bjoern@4032: GaugeDischargeCurveFacet copy = new GaugeDischargeCurveFacet( bjoern@4187: this.name, bjoern@4032: this.description); bjoern@3936: copy.set(this); bjoern@3936: return copy; bjoern@3936: } bjoern@3936: }