Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/exports/WaterlevelExporter.java @ 2035:3ebbe497d7f7
#252 Set titles in waterlevel exports to named main values if those are existing for given Q values.
flys-artifacts/trunk@3504 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Wed, 21 Dec 2011 09:17:23 +0000 |
parents | 72bcbc308501 |
children | f73036b991e2 |
comparison
equal
deleted
inserted
replaced
2034:7bc9293de4e6 | 2035:3ebbe497d7f7 |
---|---|
3 import java.io.IOException; | 3 import java.io.IOException; |
4 import java.io.OutputStream; | 4 import java.io.OutputStream; |
5 import java.text.NumberFormat; | 5 import java.text.NumberFormat; |
6 import java.util.ArrayList; | 6 import java.util.ArrayList; |
7 import java.util.List; | 7 import java.util.List; |
8 import java.util.regex.Matcher; | |
9 import java.util.regex.Pattern; | |
8 | 10 |
9 import org.w3c.dom.Document; | 11 import org.w3c.dom.Document; |
10 | 12 |
11 import org.apache.log4j.Logger; | 13 import org.apache.log4j.Logger; |
12 | 14 |
13 import au.com.bytecode.opencsv.CSVWriter; | 15 import au.com.bytecode.opencsv.CSVWriter; |
14 | 16 |
17 import de.intevation.artifacts.Artifact; | |
15 import de.intevation.artifacts.CallContext; | 18 import de.intevation.artifacts.CallContext; |
16 | 19 |
20 import de.intevation.artifactdatabase.state.ArtifactAndFacet; | |
21 | |
22 import de.intevation.flys.artifacts.WINFOArtifact; | |
17 import de.intevation.flys.artifacts.model.CalculationResult; | 23 import de.intevation.flys.artifacts.model.CalculationResult; |
18 import de.intevation.flys.artifacts.model.WQCKms; | 24 import de.intevation.flys.artifacts.model.WQCKms; |
19 import de.intevation.flys.artifacts.model.WQKms; | 25 import de.intevation.flys.artifacts.model.WQKms; |
20 | 26 |
27 import de.intevation.flys.utils.FLYSUtils; | |
21 import de.intevation.flys.utils.Formatter; | 28 import de.intevation.flys.utils.Formatter; |
22 | 29 |
23 | 30 |
24 /** | 31 /** |
25 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> | 32 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> |
39 public static final String CSV_W_HEADER = | 46 public static final String CSV_W_HEADER = |
40 "export.waterlevel.csv.header.w"; | 47 "export.waterlevel.csv.header.w"; |
41 | 48 |
42 public static final String CSV_Q_HEADER = | 49 public static final String CSV_Q_HEADER = |
43 "export.waterlevel.csv.header.q"; | 50 "export.waterlevel.csv.header.q"; |
51 | |
52 public static final Pattern NUMBERS_PATTERN = | |
53 Pattern.compile("\\D*(\\d++.\\d*)\\D*"); | |
44 | 54 |
45 public static final String DEFAULT_CSV_KM_HEADER = "Fluss-Km"; | 55 public static final String DEFAULT_CSV_KM_HEADER = "Fluss-Km"; |
46 public static final String DEFAULT_CSV_W_HEADER = "W [NN + m]"; | 56 public static final String DEFAULT_CSV_W_HEADER = "W [NN + m]"; |
47 public static final String DEFAULT_CSV_Q_HEADER = "Q [m\u00b3/s]"; | 57 public static final String DEFAULT_CSV_Q_HEADER = "Q [m\u00b3/s]"; |
48 | 58 |
87 } | 97 } |
88 } | 98 } |
89 } | 99 } |
90 | 100 |
91 | 101 |
102 /** | |
103 * This method is used to determine, if the name of the WQKms object | |
104 * <i>data</i> matches a named value. In such cases, the name of <i>data</i> | |
105 * is reset to this named value. | |
106 * | |
107 * @param aaf The wrapper for the Artifact and Facet. | |
108 * @param data Needs to be a CalculationResult that contains a WQKms[] | |
109 * objects, otherwise nothing is done. | |
110 */ | |
111 @Override | |
112 protected void prepareData(ArtifactAndFacet aaf, Object data) { | |
113 logger.debug("WaterlevelExporter.prepareData"); | |
114 | |
115 Artifact artifact = aaf.getArtifact(); | |
116 | |
117 if (!(artifact instanceof WINFOArtifact)) { | |
118 logger.debug("Artifact is no WINFOArtifact. Cannot prepare data."); | |
119 return; | |
120 } | |
121 | |
122 if (data instanceof CalculationResult) { | |
123 data = ((CalculationResult) data).getData(); | |
124 | |
125 if (data instanceof WQKms[]) { | |
126 WQKms[] wqkms = (WQKms[]) data; | |
127 | |
128 for (WQKms item: wqkms) { | |
129 prepareNamedValue((WINFOArtifact) artifact, item); | |
130 } | |
131 } | |
132 } | |
133 } | |
134 | |
135 | |
136 /** | |
137 * This method is used to prepare the column titles of waterlevel exports. | |
138 * Titles in this export include the Q value. If a Q value matches a named | |
139 * main value (as HQ100 or MNQ) this named main value should be used as | |
140 * title. This method resets the name of the <i>wqkms</i> object if such | |
141 * named main value fits to the chosen Q. | |
142 * | |
143 * @param winfo A WINFO Artifact. | |
144 * @param wqkms A WQKms object that should be prepared. | |
145 */ | |
146 protected void prepareNamedValue(WINFOArtifact winfo, WQKms wqkms) { | |
147 logger.debug("WaterlevelExporter.prepareNamedValue"); | |
148 | |
149 String name = wqkms.getName(); | |
150 | |
151 logger.debug("Name of WQKms = '" + name + "'"); | |
152 | |
153 Matcher m = NUMBERS_PATTERN.matcher(name); | |
154 | |
155 if (m.matches()) { | |
156 String raw = m.group(1); | |
157 | |
158 try { | |
159 double v = Double.valueOf(raw); | |
160 | |
161 String nmv = FLYSUtils.getNamedMainValue(winfo.getGauge(), v); | |
162 | |
163 if (nmv != null && nmv.length() > 0) { | |
164 nmv = FLYSUtils.stripNamedMainValue(nmv); | |
165 logger.debug("Set named main value '" + nmv + "'"); | |
166 | |
167 wqkms.setName(nmv); | |
168 } | |
169 } | |
170 catch (NumberFormatException nfe) { | |
171 // do nothing here | |
172 } | |
173 } | |
174 } | |
175 | |
176 | |
92 @Override | 177 @Override |
93 protected void writeCSVData(CSVWriter writer) { | 178 protected void writeCSVData(CSVWriter writer) { |
94 logger.info("WaterlevelExporter.writeData"); | 179 logger.info("WaterlevelExporter.writeData"); |
95 | 180 |
96 writeCSVHeader(writer); | 181 writeCSVHeader(writer); |