Mercurial > dive4elements > river
diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/GaugeDischargeArtifact.java @ 2733:ac9a03ed32c1
More debugging of discharge-curve issue.
flys-artifacts/trunk@4466 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Tue, 22 May 2012 19:51:05 +0000 |
parents | 5ce5abd173b9 |
children | 64dc2997b2dd |
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/GaugeDischargeArtifact.java Tue May 22 19:42:54 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/GaugeDischargeArtifact.java Tue May 22 19:51:05 2012 +0000 @@ -1,12 +1,15 @@ 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; @@ -17,9 +20,20 @@ import de.intevation.artifacts.common.utils.XMLUtils; 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; + /** @@ -33,7 +47,7 @@ private static Logger logger = Logger.getLogger(GaugeDischargeArtifact.class); /** The name of the artifact. */ - public static final String ARTIFACT_NAME = "historicalq"; + public static final String ARTIFACT_NAME = "gaugedischarge"; // TODO make this one globally available public static final String XPATH_DATA = @@ -66,6 +80,7 @@ String ids = XMLUtils.xpathString( data, XPATH_DATA, ArtifactNamespaceContext.INSTANCE); logger.debug("id for gaugedischarge: " + ids); + } @@ -91,15 +106,20 @@ FLYSArtifact artifact = (FLYSArtifact) art; // Get the location(s) - importData(artifact, "ld_mode"); - importData(artifact, "ld_from"); - importData(artifact, "ld_to"); - importData(artifact, "ld_locations"); + //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 ."); + logger.debug("Facets to add in GaugeDischargeArtifact.initialize. (" + + state.getID() + ")."); facets.put(getCurrentStateId(), fs); } else { @@ -109,7 +129,6 @@ } - /** * Determines Facets initial disposition regarding activity (think of * selection in Client ThemeList GUI). This will be checked one time @@ -127,5 +146,62 @@ { 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 :