mschaefer@9257: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde mschaefer@9257: * Software engineering by Intevation GmbH mschaefer@9257: * mschaefer@9257: * This file is Free Software under the GNU AGPL (>=v3) mschaefer@9257: * and comes with ABSOLUTELY NO WARRANTY! Check out the mschaefer@9257: * documentation coming with Dive4Elements River for details. mschaefer@9257: */ mschaefer@9257: mschaefer@9257: package org.dive4elements.river.artifacts.sinfo.flood_duration; mschaefer@9257: mschaefer@9257: import org.apache.log4j.Logger; mschaefer@9257: import org.dive4elements.artifactdatabase.state.DefaultFacet; mschaefer@9257: import org.dive4elements.artifacts.Artifact; mschaefer@9257: import org.dive4elements.artifacts.CallContext; mschaefer@9257: import org.dive4elements.river.artifacts.D4EArtifact; mschaefer@9257: import org.dive4elements.river.artifacts.model.CalculationResult; mschaefer@9257: import org.dive4elements.river.artifacts.model.WQDay; mschaefer@9257: import org.dive4elements.river.artifacts.states.DefaultState.ComputeType; mschaefer@9259: import org.dive4elements.river.jfree.RiverAnnotation; mschaefer@9257: import org.dive4elements.river.jfree.StickyAxisAnnotation; mschaefer@9257: mschaefer@9257: mschaefer@9257: /** mschaefer@9257: * Facet to show Main Q Values. mschaefer@9257: */ mschaefer@9257: public class FloodDurationMainValuesQFacet extends DefaultFacet { mschaefer@9257: mschaefer@9257: /** Own log. */ mschaefer@9257: private static Logger log = Logger.getLogger(FloodDurationMainValuesQFacet.class); mschaefer@9257: mschaefer@9257: /** Trivial Constructor. */ mschaefer@9257: public FloodDurationMainValuesQFacet(final String name, final String description) { mschaefer@9257: this.description = description; mschaefer@9259: this.name = name; mschaefer@9259: this.index = 1; mschaefer@9257: } mschaefer@9257: mschaefer@9257: /** mschaefer@9257: * Set the hit-point in Q where a line drawn from the axis would hit the mschaefer@9257: * curve in WQDay (if hit). mschaefer@9257: * Employ linear interpolation. mschaefer@9257: */ mschaefer@9259: public static void setHitPoint(final WQDay wqday, final StickyAxisAnnotation annotation) { mschaefer@9257: mschaefer@9257: final float q = annotation.getPos(); mschaefer@9257: final Double day = wqday.interpolateDayByQ(q); mschaefer@9259: if (day != null) mschaefer@9257: annotation.setHitPoint(day.floatValue()); mschaefer@9259: else mschaefer@9257: log.debug("StickyAnnotation does not hit wqday curve: " + q); mschaefer@9257: } mschaefer@9257: mschaefer@9257: mschaefer@9257: /** mschaefer@9257: * Returns the data this facet requires. mschaefer@9257: * mschaefer@9257: * @param artifact the owner artifact. mschaefer@9257: * @param context the CallContext (can be used to find out if in mschaefer@9257: * navigable fixation-setting, or durationcurve). mschaefer@9257: * mschaefer@9257: * @return the data. mschaefer@9257: */ mschaefer@9257: @Override mschaefer@9257: public Object getData(final Artifact artifact, final CallContext context) { mschaefer@9257: mschaefer@9257: log.debug("Get data for flood duration main value Q data"); mschaefer@9257: mschaefer@9257: final D4EArtifact flys = (D4EArtifact) artifact; mschaefer@9257: mschaefer@9257: final CalculationResult res = (CalculationResult) flys.compute(context, ComputeType.ADVANCE, false); mschaefer@9257: mschaefer@9257: final FloodDurationCalculationResults data = (FloodDurationCalculationResults) res.getData(); mschaefer@9257: mschaefer@9259: return new RiverAnnotation(this.description, data.getMainValueQAnnotations()); mschaefer@9257: } mschaefer@9257: mschaefer@9257: mschaefer@9257: /** mschaefer@9257: * Create a deep copy of this Facet. mschaefer@9257: * @return a deep copy. mschaefer@9257: */ mschaefer@9257: @Override mschaefer@9257: public FloodDurationMainValuesQFacet deepCopy() { mschaefer@9257: final FloodDurationMainValuesQFacet copy = new FloodDurationMainValuesQFacet(this.name, this.description); mschaefer@9257: copy.set(this); mschaefer@9257: return copy; mschaefer@9257: } mschaefer@9257: } mschaefer@9257: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :