Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/artifacts/GaugeDischargeArtifact.java @ 2745:b63017afbca8
Add helper to allow for points at duration curve facet.
flys-artifacts/trunk@4480 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Wed, 23 May 2012 19:31:26 +0000 |
parents | 0251393f037c |
children | 2f7fed1eb4bf |
line wrap: on
line source
package de.intevation.flys.artifacts; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import org.apache.log4j.Logger; import org.w3c.dom.Document; import de.intevation.artifactdatabase.data.DefaultStateData; import de.intevation.artifactdatabase.state.Facet; import de.intevation.artifacts.Artifact; import de.intevation.artifacts.ArtifactFactory; import de.intevation.artifacts.ArtifactNamespaceContext; import de.intevation.artifacts.CallMeta; import de.intevation.artifacts.common.utils.XMLUtils; import de.intevation.flys.artifacts.StaticFLYSArtifact; import de.intevation.flys.artifacts.model.FacetTypes; import de.intevation.flys.artifacts.model.WQKms; import de.intevation.flys.artifacts.states.DefaultState; import de.intevation.flys.artifacts.model.Calculation; import de.intevation.flys.artifacts.model.CalculationResult; import de.intevation.flys.artifacts.model.DischargeTables; import de.intevation.flys.model.Gauge; import de.intevation.flys.model.River; import de.intevation.flys.utils.FLYSUtils; /** * Artifact to store user-added points. */ public class GaugeDischargeArtifact extends WINFOArtifact implements FacetTypes { /** The logger for this class. */ private static Logger logger = Logger.getLogger(GaugeDischargeArtifact.class); /** The name of the artifact. */ public static final String ARTIFACT_NAME = "gaugedischarge"; /** * Trivial Constructor. */ public GaugeDischargeArtifact() { logger.debug("GaugeDischargeArtifact.HistoricalQArtifact()"); } /** * Gets called from factory, to set things up. * Especially, when loaded via datacage mechanisms, provide the * data document. * @param data filled with stuff from dc, if any. */ @Override public void setup( String identifier, ArtifactFactory factory, Object context, CallMeta callMeta, Document data) { logger.debug("GaugeDischargeArtifact.setup"); super.setup(identifier, factory, context, callMeta, data); String ids = StaticFLYSArtifact.getDatacageIDValue(data); logger.debug("id for gaugedischarge: " + ids); } /** Return the name of this artifact. */ public String getName() { return ARTIFACT_NAME; } /** Access state data storing the jsonstring with points. public String getPointsData(String facetName) { return getDataAsString(facetName + ".data"); }*/ /** * Setup state and facet, copy from master artifact. */ @Override protected void initialize(Artifact art, Object context, CallMeta meta) { logger.debug("GaugeDischargeArtifact.initialize"); List<Facet> fs = new ArrayList<Facet>(); FLYSArtifact artifact = (FLYSArtifact) art; // Get the location(s) //importData(artifact, "ld_mode"); //importData(artifact, "ld_from"); //importData(artifact, "ld_to"); //importData(artifact, "ld_locations"); addStringData("ld_from", "0"); addStringData("ld_to", "1000"); addStringData("ld_mode", "distance"); DefaultState state = (DefaultState) getCurrentState(context); state.computeInit(this, hash(), context, meta, fs); if (!fs.isEmpty()) { logger.debug("Facets to add in GaugeDischargeArtifact.initialize. (" + state.getID() + ")."); facets.put(getCurrentStateId(), fs); } else { logger.debug("No facets to add in GaugeDischargeArtifact.initialize (" + state.getID() + ")."); } } /** * Determines Facets initial disposition regarding activity (think of * selection in Client ThemeList GUI). This will be checked one time * when the facet enters a collections describe document. * * @param facetName name of the facet. * @param index index of the facet. * @return 0 if not active */ @Override public int getInitialFacetActivity( String outputName, String facetName, int index) { return 1; } /** * Returns the data that is used to create discharge curves. * */ public CalculationResult getDischargeCurveData() { River river = FLYSUtils.getRiver(this); if (river == null) { return error(new WQKms[0], "no.river.selected"); } double [] distance = FLYSUtils.getKmRange(this); logger.debug("getDischargeCurveData: get range"); if (distance == null) { return error(new WQKms[0], "no.range.found"); } List<Gauge> gauges = river.determineGauges(distance[0], distance[1]); logger.debug("getDischargeCurveData: get gauges"); if (gauges.isEmpty()) { return error(new WQKms[0], "no.gauge.selected"); } String [] names = new String[gauges.size()]; for (int i = 0; i < names.length; ++i) { names[i] = gauges.get(i).getName(); logger.debug("getDischargeCurveData: name " + names[i]); } DischargeTables dt = new DischargeTables(river.getName(), names); Map<String, double [][]> map = dt.getValues(100d); ArrayList<WQKms> res = new ArrayList<WQKms>(); for (Gauge gauge: gauges) { String name = gauge.getName(); double [][] values = map.get(name); if (values == null) { continue; } double [] kms = new double[values[0].length]; Arrays.fill(kms, gauge.getStation().doubleValue()); res.add(new WQKms(kms, values[0], values[1], name)); logger.debug("getDischargeCurveData: add one res gauge"); } return new CalculationResult( res.toArray(new WQKms[res.size()]), new Calculation()); } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :