Mercurial > dive4elements > river
comparison artifacts/src/main/java/org/dive4elements/river/artifacts/states/SoundingsSelect.java @ 9390:f575ff573cbb
"Name der Peilung" columname minfo.
author | gernotbelger |
---|---|
date | Thu, 09 Aug 2018 15:22:31 +0200 |
parents | 5e38e2924c07 |
children | 2da486c7c05f |
comparison
equal
deleted
inserted
replaced
9389:63c086139391 | 9390:f575ff573cbb |
---|---|
16 import org.dive4elements.artifacts.Artifact; | 16 import org.dive4elements.artifacts.Artifact; |
17 import org.dive4elements.artifacts.CallContext; | 17 import org.dive4elements.artifacts.CallContext; |
18 import org.dive4elements.artifacts.common.model.KVP; | 18 import org.dive4elements.artifacts.common.model.KVP; |
19 import org.dive4elements.artifacts.common.utils.XMLUtils; | 19 import org.dive4elements.artifacts.common.utils.XMLUtils; |
20 import org.dive4elements.artifacts.common.utils.XMLUtils.ElementCreator; | 20 import org.dive4elements.artifacts.common.utils.XMLUtils.ElementCreator; |
21 import org.dive4elements.river.artifacts.D4EArtifact; | |
22 import org.dive4elements.river.artifacts.resources.Resources; | |
21 import org.dive4elements.river.model.BedHeight; | 23 import org.dive4elements.river.model.BedHeight; |
22 import org.dive4elements.river.model.River; | 24 import org.dive4elements.river.model.River; |
23 import org.dive4elements.river.artifacts.D4EArtifact; | |
24 import org.dive4elements.river.artifacts.resources.Resources; | |
25 import org.dive4elements.river.utils.Formatter; | 25 import org.dive4elements.river.utils.Formatter; |
26 import org.dive4elements.river.utils.RiverUtils; | 26 import org.dive4elements.river.utils.RiverUtils; |
27 import org.w3c.dom.Element; | 27 import org.w3c.dom.Element; |
28 | |
29 | 28 |
30 public class SoundingsSelect extends DefaultState { | 29 public class SoundingsSelect extends DefaultState { |
31 | 30 |
32 public static final String SOUNDINGS = "soundings"; | 31 public static final String SOUNDINGS = "soundings"; |
33 | 32 |
34 public static final String PREFIX_SINGLE = "single-"; | 33 public static final String PREFIX_SINGLE = "single-"; |
35 | 34 |
36 /** Private log. */ | 35 /** Private log. */ |
37 private static final Logger log = Logger.getLogger(SoundingsSelect.class); | 36 private static final Logger log = Logger.getLogger(SoundingsSelect.class); |
38 | 37 |
39 | |
40 @Override | 38 @Override |
41 public String getUIProvider() { | 39 public String getUIProvider() { |
42 return "parameter-matrix"; | 40 return "parameter-matrix-sounding"; |
43 } | 41 } |
44 | 42 |
45 @Override | 43 @Override |
46 protected void appendItems( | 44 protected void appendItems(final Artifact artifact, final ElementCreator creator, final String name, final CallContext context, final Element select) { |
47 Artifact artifact, | |
48 ElementCreator creator, | |
49 String name, | |
50 CallContext context, | |
51 Element select | |
52 ) { | |
53 try { | 45 try { |
54 creator.addAttr(select, "type", "multiattribute", true); | 46 creator.addAttr(select, "type", "multiattribute", true); |
55 | 47 |
56 appendMeta(creator, select); | 48 appendMeta(creator, select); |
57 | 49 |
58 getOptions(artifact, name, context, creator, select); | 50 getOptions(artifact, name, context, creator, select); |
59 } | 51 } |
60 catch (IllegalArgumentException iae) { | 52 catch (final IllegalArgumentException iae) { |
61 log.warn("Illegal argument", iae); | 53 log.warn("Illegal argument", iae); |
62 } | 54 } |
63 } | 55 } |
64 | 56 |
65 private static Element order( | 57 private static Element order(final ElementCreator creator, final String name, final String order) { |
66 ElementCreator creator, | 58 final Element element = creator.create(name); |
67 String name, | |
68 String order | |
69 ) { | |
70 Element element = creator.create(name); | |
71 creator.addAttr(element, "order", order, false); | 59 creator.addAttr(element, "order", order, false); |
72 return element; | 60 return element; |
73 } | 61 } |
74 | 62 |
75 private void appendMeta(ElementCreator creator, Element select) { | 63 private void appendMeta(final ElementCreator creator, final Element select) { |
76 | 64 |
77 Element meta = creator.create("meta"); | 65 final Element meta = creator.create("meta"); |
78 | 66 meta.appendChild(order(creator, "year", "0")); |
79 meta.appendChild(order(creator, "year", "0")); | 67 meta.appendChild(order(creator, "value", "1")); |
80 meta.appendChild(order(creator, "value", "1")); | |
81 meta.appendChild(order(creator, "analyzed_range", "2")); | 68 meta.appendChild(order(creator, "analyzed_range", "2")); |
82 meta.appendChild(order(creator, "label", "3")); | 69 meta.appendChild(order(creator, "label", "3")); |
83 meta.appendChild(order(creator, "minfo_type", "4")); | 70 meta.appendChild(order(creator, "minfo_type", "4")); |
84 | 71 |
85 select.appendChild(meta); | 72 select.appendChild(meta); |
86 | 73 |
87 } | 74 } |
88 | 75 |
89 protected KVP<String, String>[] getOptions( | 76 protected KVP<String, String>[] getOptions(final Artifact artifact, final String parameterName, final CallContext context, final ElementCreator creator, |
90 Artifact artifact, | 77 final Element select) throws IllegalArgumentException { |
91 String parameterName, | |
92 CallContext context, | |
93 ElementCreator creator, | |
94 Element select | |
95 ) | |
96 throws IllegalArgumentException | |
97 { | |
98 log.debug("Get options for parameter: '" + parameterName + "'"); | 78 log.debug("Get options for parameter: '" + parameterName + "'"); |
99 | 79 |
100 if (!testParameterName(parameterName)) { | 80 if (!testParameterName(parameterName)) { |
101 throw new IllegalArgumentException( | 81 throw new IllegalArgumentException("Invalid parameter for state: '" + parameterName + "'"); |
102 "Invalid parameter for state: '" + parameterName + "'"); | |
103 } | 82 } |
104 | 83 |
105 River river = RiverUtils.getRiver((D4EArtifact) artifact); | 84 final River river = RiverUtils.getRiver((D4EArtifact) artifact); |
106 double lo = ((D4EArtifact) artifact).getDataAsDouble("ld_from"); | 85 final double lo = ((D4EArtifact) artifact).getDataAsDouble("ld_from"); |
107 double hi = ((D4EArtifact) artifact).getDataAsDouble("ld_to"); | 86 final double hi = ((D4EArtifact) artifact).getDataAsDouble("ld_to"); |
108 | 87 |
109 double kmLo = Math.min(lo, hi); | 88 final double kmLo = Math.min(lo, hi); |
110 double kmHi = Math.max(lo, hi); | 89 final double kmHi = Math.max(lo, hi); |
111 | 90 |
112 appendSingles(river, kmLo, kmHi, creator, select, context); | 91 appendSingles(river, kmLo, kmHi, creator, select, context); |
113 | 92 |
114 List<KVP<String, String>> kvp = | 93 final List<KVP<String, String>> kvp = Collections.<KVP<String, String>>emptyList(); |
115 Collections.<KVP<String, String>>emptyList(); | |
116 return kvp.toArray(new KVP[kvp.size()]); | 94 return kvp.toArray(new KVP[kvp.size()]); |
117 } | 95 } |
118 | 96 |
119 | 97 protected void appendSingles(final River river, final double kmLo, final double kmHi, final ElementCreator creator, final Element select, |
120 protected void appendSingles( | 98 final CallContext context) { |
121 River river, | 99 final List<BedHeight> singles = BedHeight.getBedHeights(river, kmLo, kmHi); |
122 double kmLo, | |
123 double kmHi, | |
124 ElementCreator creator, | |
125 Element select, | |
126 CallContext context | |
127 ) { | |
128 List<BedHeight> singles = | |
129 BedHeight.getBedHeights(river, kmLo, kmHi); | |
130 | 100 |
131 if (singles != null) { | 101 if (singles != null) { |
132 int size = singles.size(); | 102 final int size = singles.size(); |
133 | 103 |
134 log.debug("Found " + size + " singles."); | 104 log.debug("Found " + size + " singles."); |
135 | 105 |
136 NumberFormat nf = Formatter.getCalculationKm(context.getMeta()); | 106 final NumberFormat nf = Formatter.getCalculationKm(context.getMeta()); |
137 for (int i = 0; i < size; i++) { | 107 for (int i = 0; i < size; i++) { |
138 BedHeight s = singles.get(i); | 108 final BedHeight s = singles.get(i); |
139 | 109 |
140 String id = PREFIX_SINGLE + s.getId(); | 110 final String id = PREFIX_SINGLE + s.getId(); |
141 String value = s.getDescription(); | 111 final String value = s.getDescription(); |
142 | 112 |
143 Integer year = s.getYear(); | 113 final Integer year = s.getYear(); |
144 Element item = creator.create("item"); | 114 final Element item = creator.create("item"); |
145 creator.addAttr(item, "label", value, true); | 115 creator.addAttr(item, "label", value, true); |
146 creator.addAttr(item, "value", id, true); | 116 creator.addAttr(item, "value", id, true); |
147 creator.addAttr(item, "analyzed_range", | 117 creator.addAttr(item, "analyzed_range", nf.format(s.getRange().getA()) + " - " + nf.format(s.getRange().getB())); |
148 nf.format(s.getRange().getA()) + | 118 creator.addAttr(item, "year", year != null ? s.getYear().toString() : ""); |
149 " - " + | |
150 nf.format(s.getRange().getB())); | |
151 creator.addAttr(item, "year", | |
152 year != null ? s.getYear().toString() : ""); | |
153 creator.addAttr(item, "minfo_type", s.getType().getName()); | 119 creator.addAttr(item, "minfo_type", s.getType().getName()); |
154 select.appendChild(item); | 120 select.appendChild(item); |
155 } | 121 } |
156 } | 122 } |
157 if (log.isDebugEnabled()) { | 123 if (log.isDebugEnabled()) { |
159 log.debug(XMLUtils.toString(select)); | 125 log.debug(XMLUtils.toString(select)); |
160 } | 126 } |
161 } | 127 } |
162 | 128 |
163 @Override | 129 @Override |
164 protected Element createStaticData( | 130 protected Element createStaticData(final D4EArtifact flys, final ElementCreator creator, final CallContext cc, final String name, final String value, |
165 D4EArtifact flys, | 131 final String type) { |
166 ElementCreator creator, | 132 final Element data = creator.create("data"); |
167 CallContext cc, | 133 creator.addAttr(data, "name", name, true); |
168 String name, | 134 creator.addAttr(data, "type", type, true); |
169 String value, | 135 creator.addAttr(data, "label", Resources.getMsg(cc.getMeta(), name, name), true); |
170 String type | |
171 ) { | |
172 Element data = creator.create("data"); | |
173 creator.addAttr(data, "name", name, true); | |
174 creator.addAttr(data, "type", type, true); | |
175 creator.addAttr(data, "label", | |
176 Resources.getMsg(cc.getMeta(), name, name), true); | |
177 | 136 |
178 String[] values = value.split(";"); | 137 final String[] values = value.split(";"); |
179 | 138 |
180 for (String val: values) { | 139 for (final String val : values) { |
181 Element item = creator.create("item"); | 140 final Element item = creator.create("item"); |
182 creator.addAttr(item, "value", val, true); | 141 creator.addAttr(item, "value", val, true); |
183 creator.addAttr(item, "label", getLabelFor(cc, name, val), true); | 142 creator.addAttr(item, "label", getLabelFor(cc, name, val), true); |
184 | 143 |
185 data.appendChild(item); | 144 data.appendChild(item); |
186 } | 145 } |
187 | 146 |
188 return data; | 147 return data; |
189 } | 148 } |
190 | 149 |
191 protected String getLabelFor( | 150 protected String getLabelFor(final CallContext cc, final String parameterName, final String value) throws IllegalArgumentException { |
192 CallContext cc, | |
193 String parameterName, | |
194 String value | |
195 ) throws IllegalArgumentException | |
196 { | |
197 if (!testParameterName(parameterName)) { | 151 if (!testParameterName(parameterName)) { |
198 throw new IllegalArgumentException( | 152 throw new IllegalArgumentException("Invalid parameter for state: '" + parameterName + "'"); |
199 "Invalid parameter for state: '" + parameterName + "'"); | |
200 } | 153 } |
201 | 154 |
202 if (value.indexOf(PREFIX_SINGLE) >= 0) { | 155 if (value.indexOf(PREFIX_SINGLE) >= 0) { |
203 return getLabelForSingle(cc, value); | 156 return getLabelForSingle(cc, value); |
204 } | 157 } |
205 return value; | 158 return value; |
206 } | 159 } |
207 | 160 |
208 | 161 protected String getLabelForSingle(final CallContext cc, final String value) { |
209 protected String getLabelForSingle(CallContext cc, String value) { | 162 final String id = value.replace(PREFIX_SINGLE, ""); |
210 String id = value.replace(PREFIX_SINGLE, ""); | |
211 try { | 163 try { |
212 BedHeight s = BedHeight.getBedHeightById( | 164 final BedHeight s = BedHeight.getBedHeightById(Integer.parseInt(id)); |
213 Integer.parseInt(id)); | |
214 | 165 |
215 if (s != null) { | 166 if (s != null) { |
216 return s.getDescription(); | 167 return s.getDescription(); |
217 } | 168 } else { |
218 else { | |
219 return "no value for '" + id + "'"; | 169 return "no value for '" + id + "'"; |
220 } | 170 } |
221 } | 171 } |
222 catch (NumberFormatException nfe) { | 172 catch (final NumberFormatException nfe) { |
223 log.warn("Could not parse id from string '" + id + "'", nfe); | 173 log.warn("Could not parse id from string '" + id + "'", nfe); |
224 } | 174 } |
225 | 175 |
226 return "n.A."; | 176 return "n.A."; |
227 } | 177 } |
228 | 178 |
229 | |
230 /** | 179 /** |
231 * This method might be used to test, if a parameter name | 180 * This method might be used to test, if a parameter name |
232 * is handled by this state. | 181 * is handled by this state. |
233 * | 182 * |
234 * @param parameterName The name of a parameter. | 183 * @param parameterName |
184 * The name of a parameter. | |
235 * | 185 * |
236 * @return true, if parameterName is one of <i>MAIN_CHANNEL</i> or | 186 * @return true, if parameterName is one of <i>MAIN_CHANNEL</i> or |
237 * <i>TOTAL_CHANNEL</i>. Otherwise false. | 187 * <i>TOTAL_CHANNEL</i>. Otherwise false. |
238 */ | 188 */ |
239 protected boolean testParameterName(String parameterName) { | 189 protected boolean testParameterName(final String parameterName) { |
240 if (parameterName == null || parameterName.length() == 0) { | 190 if (parameterName == null || parameterName.length() == 0) { |
241 return false; | 191 return false; |
242 } | 192 } else if (parameterName.equals(SOUNDINGS)) { |
243 else if (parameterName.equals(SOUNDINGS)) { | |
244 return true; | 193 return true; |
245 } | 194 } else { |
246 else { | |
247 return false; | 195 return false; |
248 } | 196 } |
249 } | 197 } |
250 } | 198 } |
251 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : | 199 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |