comparison 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
comparison
equal deleted inserted replaced
2732:7311d0336600 2733:ac9a03ed32c1
1 package de.intevation.flys.artifacts; 1 package de.intevation.flys.artifacts;
2 2
3 import java.util.ArrayList; 3 import java.util.ArrayList;
4 import java.util.Arrays;
4 import java.util.List; 5 import java.util.List;
6 import java.util.Map;
5 7
6 import org.apache.log4j.Logger; 8 import org.apache.log4j.Logger;
7 9
8 import org.w3c.dom.Document; 10 import org.w3c.dom.Document;
9 11
12 import de.intevation.artifactdatabase.data.DefaultStateData;
10 import de.intevation.artifactdatabase.state.Facet; 13 import de.intevation.artifactdatabase.state.Facet;
11 14
12 import de.intevation.artifacts.Artifact; 15 import de.intevation.artifacts.Artifact;
13 import de.intevation.artifacts.ArtifactFactory; 16 import de.intevation.artifacts.ArtifactFactory;
14 import de.intevation.artifacts.ArtifactNamespaceContext; 17 import de.intevation.artifacts.ArtifactNamespaceContext;
15 import de.intevation.artifacts.CallMeta; 18 import de.intevation.artifacts.CallMeta;
16 19
17 import de.intevation.artifacts.common.utils.XMLUtils; 20 import de.intevation.artifacts.common.utils.XMLUtils;
18 21
19 import de.intevation.flys.artifacts.model.FacetTypes; 22 import de.intevation.flys.artifacts.model.FacetTypes;
23 import de.intevation.flys.artifacts.model.WQKms;
20 24
21 import de.intevation.flys.artifacts.states.DefaultState; 25 import de.intevation.flys.artifacts.states.DefaultState;
26
27 import de.intevation.flys.artifacts.model.Calculation;
28 import de.intevation.flys.artifacts.model.CalculationResult;
29
30 import de.intevation.flys.artifacts.model.DischargeTables;
31
32 import de.intevation.flys.model.Gauge;
33 import de.intevation.flys.model.River;
34
35 import de.intevation.flys.utils.FLYSUtils;
22 36
23 37
24 38
25 /** 39 /**
26 * Artifact to store user-added points. 40 * Artifact to store user-added points.
31 { 45 {
32 /** The logger for this class. */ 46 /** The logger for this class. */
33 private static Logger logger = Logger.getLogger(GaugeDischargeArtifact.class); 47 private static Logger logger = Logger.getLogger(GaugeDischargeArtifact.class);
34 48
35 /** The name of the artifact. */ 49 /** The name of the artifact. */
36 public static final String ARTIFACT_NAME = "historicalq"; 50 public static final String ARTIFACT_NAME = "gaugedischarge";
37 51
38 // TODO make this one globally available 52 // TODO make this one globally available
39 public static final String XPATH_DATA = 53 public static final String XPATH_DATA =
40 "/art:action/art:ids/@value"; 54 "/art:action/art:ids/@value";
41 55
64 logger.debug("GaugeDischargeArtifact.setup"); 78 logger.debug("GaugeDischargeArtifact.setup");
65 super.setup(identifier, factory, context, callMeta, data); 79 super.setup(identifier, factory, context, callMeta, data);
66 String ids = XMLUtils.xpathString( 80 String ids = XMLUtils.xpathString(
67 data, XPATH_DATA, ArtifactNamespaceContext.INSTANCE); 81 data, XPATH_DATA, ArtifactNamespaceContext.INSTANCE);
68 logger.debug("id for gaugedischarge: " + ids); 82 logger.debug("id for gaugedischarge: " + ids);
83
69 } 84 }
70 85
71 86
72 /** Return the name of this artifact. */ 87 /** Return the name of this artifact. */
73 public String getName() { 88 public String getName() {
89 logger.debug("GaugeDischargeArtifact.initialize"); 104 logger.debug("GaugeDischargeArtifact.initialize");
90 List<Facet> fs = new ArrayList<Facet>(); 105 List<Facet> fs = new ArrayList<Facet>();
91 FLYSArtifact artifact = (FLYSArtifact) art; 106 FLYSArtifact artifact = (FLYSArtifact) art;
92 107
93 // Get the location(s) 108 // Get the location(s)
94 importData(artifact, "ld_mode"); 109 //importData(artifact, "ld_mode");
95 importData(artifact, "ld_from"); 110 //importData(artifact, "ld_from");
96 importData(artifact, "ld_to"); 111 //importData(artifact, "ld_to");
97 importData(artifact, "ld_locations"); 112 //importData(artifact, "ld_locations");
113 addStringData("ld_from", "0");
114 addStringData("ld_to", "1000");
115 addStringData("ld_mode", "distance");
116
98 117
99 DefaultState state = (DefaultState) getCurrentState(context); 118 DefaultState state = (DefaultState) getCurrentState(context);
100 state.computeInit(this, hash(), context, meta, fs); 119 state.computeInit(this, hash(), context, meta, fs);
101 if (!fs.isEmpty()) { 120 if (!fs.isEmpty()) {
102 logger.debug("Facets to add in GaugeDischargeArtifact.initialize ."); 121 logger.debug("Facets to add in GaugeDischargeArtifact.initialize. ("
122 + state.getID() + ").");
103 facets.put(getCurrentStateId(), fs); 123 facets.put(getCurrentStateId(), fs);
104 } 124 }
105 else { 125 else {
106 logger.debug("No facets to add in GaugeDischargeArtifact.initialize (" 126 logger.debug("No facets to add in GaugeDischargeArtifact.initialize ("
107 + state.getID() + ")."); 127 + state.getID() + ").");
108 } 128 }
109 } 129 }
110
111 130
112 131
113 /** 132 /**
114 * Determines Facets initial disposition regarding activity (think of 133 * Determines Facets initial disposition regarding activity (think of
115 * selection in Client ThemeList GUI). This will be checked one time 134 * selection in Client ThemeList GUI). This will be checked one time
125 String facetName, 144 String facetName,
126 int index) 145 int index)
127 { 146 {
128 return 1; 147 return 1;
129 } 148 }
149
150
151 /**
152 * Returns the data that is used to create discharge curves.
153 *
154 */
155 public CalculationResult getDischargeCurveData() {
156
157 River river = FLYSUtils.getRiver(this);
158 if (river == null) {
159 return error(new WQKms[0], "no.river.selected");
160 }
161
162 double [] distance = FLYSUtils.getKmRange(this);
163 logger.debug("getDischargeCurveData: get range");
164
165 if (distance == null) {
166 return error(new WQKms[0], "no.range.found");
167 }
168
169 List<Gauge> gauges = river.determineGauges(distance[0], distance[1]);
170 logger.debug("getDischargeCurveData: get gauges");
171
172 if (gauges.isEmpty()) {
173 return error(new WQKms[0], "no.gauge.selected");
174 }
175
176 String [] names = new String[gauges.size()];
177
178 for (int i = 0; i < names.length; ++i) {
179 names[i] = gauges.get(i).getName();
180 logger.debug("getDischargeCurveData: name " + names[i]);
181 }
182
183 DischargeTables dt = new DischargeTables(river.getName(), names);
184
185 Map<String, double [][]> map = dt.getValues(100d);
186
187 ArrayList<WQKms> res = new ArrayList<WQKms>();
188
189 for (Gauge gauge: gauges) {
190 String name = gauge.getName();
191 double [][] values = map.get(name);
192 if (values == null) {
193 continue;
194 }
195 double [] kms = new double[values[0].length];
196 Arrays.fill(kms, gauge.getStation().doubleValue());
197 res.add(new WQKms(kms, values[0], values[1], name));
198 logger.debug("getDischargeCurveData: add one res gauge");
199 }
200
201 return new CalculationResult(
202 res.toArray(new WQKms[res.size()]),
203 new Calculation());
204 }
205
130 } 206 }
131 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : 207 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org