Mercurial > dive4elements > river
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 : |