Mercurial > dive4elements > river
comparison flys-client/src/main/java/de/intevation/flys/client/client/ui/WQAdaptedInputPanel.java @ 565:a078ba1c139d
Introduced a client side input validation for the adapted WQ panel.
flys-client/trunk@2112 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Tue, 14 Jun 2011 14:00:19 +0000 |
parents | 5274b9317e40 |
children | 3b670af34367 |
comparison
equal
deleted
inserted
replaced
564:55a90afaf513 | 565:a078ba1c139d |
---|---|
1 package de.intevation.flys.client.client.ui; | 1 package de.intevation.flys.client.client.ui; |
2 | 2 |
3 import java.util.ArrayList; | |
3 import java.util.HashMap; | 4 import java.util.HashMap; |
4 import java.util.Iterator; | 5 import java.util.Iterator; |
5 import java.util.LinkedHashMap; | 6 import java.util.LinkedHashMap; |
6 import java.util.List; | 7 import java.util.List; |
7 import java.util.Map; | 8 import java.util.Map; |
8 | 9 |
9 import com.google.gwt.core.client.GWT; | 10 import com.google.gwt.core.client.GWT; |
11 import com.google.gwt.i18n.client.NumberFormat; | |
10 | 12 |
11 import com.smartgwt.client.types.TitleOrientation; | 13 import com.smartgwt.client.types.TitleOrientation; |
12 import com.smartgwt.client.types.VerticalAlignment; | 14 import com.smartgwt.client.types.VerticalAlignment; |
13 import com.smartgwt.client.widgets.Canvas; | 15 import com.smartgwt.client.widgets.Canvas; |
14 import com.smartgwt.client.widgets.Label; | 16 import com.smartgwt.client.widgets.Label; |
24 import de.intevation.flys.client.shared.model.Data; | 26 import de.intevation.flys.client.shared.model.Data; |
25 import de.intevation.flys.client.shared.model.DataItem; | 27 import de.intevation.flys.client.shared.model.DataItem; |
26 import de.intevation.flys.client.shared.model.DataList; | 28 import de.intevation.flys.client.shared.model.DataList; |
27 import de.intevation.flys.client.shared.model.DefaultData; | 29 import de.intevation.flys.client.shared.model.DefaultData; |
28 import de.intevation.flys.client.shared.model.DefaultDataItem; | 30 import de.intevation.flys.client.shared.model.DefaultDataItem; |
31 import de.intevation.flys.client.shared.model.WQDataItem; | |
29 | 32 |
30 import de.intevation.flys.client.client.FLYSConstants; | 33 import de.intevation.flys.client.client.FLYSConstants; |
31 | 34 |
32 | 35 |
33 /** | 36 /** |
57 protected FLYSConstants MSG = GWT.create(FLYSConstants.class); | 60 protected FLYSConstants MSG = GWT.create(FLYSConstants.class); |
58 | 61 |
59 /** Stores the input panels related to their keys.*/ | 62 /** Stores the input panels related to their keys.*/ |
60 protected Map<String, DoubleArrayPanel> wqranges; | 63 protected Map<String, DoubleArrayPanel> wqranges; |
61 | 64 |
65 /** Stores the min/max values for each q range.*/ | |
66 protected Map<String, double[]> qranges; | |
67 | |
68 /** Stores the min/max values for each w range.*/ | |
69 protected Map<String, double[]> wranges; | |
70 | |
62 /** The RadioGroupItem that determines the w/q input mode.*/ | 71 /** The RadioGroupItem that determines the w/q input mode.*/ |
63 protected DynamicForm modes; | 72 protected DynamicForm modes; |
64 | 73 |
65 | 74 |
66 | 75 |
67 public WQAdaptedInputPanel() { | 76 public WQAdaptedInputPanel() { |
68 wqranges = new HashMap<String, DoubleArrayPanel>(); | 77 wqranges = new HashMap<String, DoubleArrayPanel>(); |
78 qranges = new HashMap<String, double[]>(); | |
79 wranges = new HashMap<String, double[]>(); | |
69 } | 80 } |
70 | 81 |
71 | 82 |
72 public Canvas create(DataList data) { | 83 public Canvas create(DataList data) { |
73 Canvas submit = getNextButton(); | 84 Canvas submit = getNextButton(); |
187 | 198 |
188 return layout; | 199 return layout; |
189 } | 200 } |
190 | 201 |
191 | 202 |
203 @Override | |
204 public List<String> validate() { | |
205 if (isWMode()) { | |
206 return validateW(); | |
207 } | |
208 else { | |
209 return validateQ(); | |
210 } | |
211 } | |
212 | |
213 | |
214 protected List<String> validateW() { | |
215 List<String> errors = new ArrayList<String>(); | |
216 NumberFormat nf = NumberFormat.getDecimalFormat(); | |
217 | |
218 Iterator<String> iter = wqranges.keySet().iterator(); | |
219 | |
220 while (iter.hasNext()) { | |
221 List<String> tmpErrors = new ArrayList<String>(); | |
222 | |
223 String key = iter.next(); | |
224 DoubleArrayPanel dap = wqranges.get(key); | |
225 double[] mm = wranges.get(key); | |
226 | |
227 double[] values = dap.getInputValues(); | |
228 double[] good = new double[values.length]; | |
229 | |
230 int idx = 0; | |
231 | |
232 for (double value: values) { | |
233 if (value < mm[0] || value > mm[1]) { | |
234 String tmp = MSG.error_validate_range(); | |
235 tmp = tmp.replace("$1", nf.format(value)); | |
236 tmp = tmp.replace("$2", nf.format(mm[0])); | |
237 tmp = tmp.replace("$3", nf.format(mm[1])); | |
238 tmpErrors.add(tmp); | |
239 } | |
240 else { | |
241 good[idx++] = value; | |
242 } | |
243 } | |
244 | |
245 double[] justGood = new double[idx]; | |
246 for (int i = 0; i < justGood.length; i++) { | |
247 justGood[i] = good[i]; | |
248 } | |
249 | |
250 if (!tmpErrors.isEmpty()) { | |
251 dap.setValues(justGood); | |
252 | |
253 errors.addAll(tmpErrors); | |
254 } | |
255 } | |
256 | |
257 return errors; | |
258 } | |
259 | |
260 | |
261 protected List<String> validateQ() { | |
262 List<String> errors = new ArrayList<String>(); | |
263 NumberFormat nf = NumberFormat.getDecimalFormat(); | |
264 | |
265 Iterator<String> iter = wqranges.keySet().iterator(); | |
266 | |
267 while (iter.hasNext()) { | |
268 List<String> tmpErrors = new ArrayList<String>(); | |
269 | |
270 String key = iter.next(); | |
271 DoubleArrayPanel dap = wqranges.get(key); | |
272 double[] mm = qranges.get(key); | |
273 | |
274 double[] values = dap.getInputValues(); | |
275 double[] good = new double[values.length]; | |
276 | |
277 int idx = 0; | |
278 | |
279 for (double value: values) { | |
280 if (value < mm[0] || value > mm[1]) { | |
281 String tmp = MSG.error_validate_range(); | |
282 tmp = tmp.replace("$1", nf.format(value)); | |
283 tmp = tmp.replace("$2", nf.format(mm[0])); | |
284 tmp = tmp.replace("$3", nf.format(mm[1])); | |
285 tmpErrors.add(tmp); | |
286 } | |
287 else { | |
288 good[idx++] = value; | |
289 } | |
290 } | |
291 | |
292 double[] justGood = new double[idx]; | |
293 for (int i = 0; i < justGood.length; i++) { | |
294 justGood[i] = good[i]; | |
295 } | |
296 | |
297 if (!tmpErrors.isEmpty()) { | |
298 dap.setValues(justGood); | |
299 | |
300 errors.addAll(tmpErrors); | |
301 } | |
302 } | |
303 | |
304 return errors; | |
305 } | |
306 | |
307 | |
192 protected void initUserDefaults(DataList dataList) { | 308 protected void initUserDefaults(DataList dataList) { |
193 | 309 |
194 initUserWQValues(dataList); | 310 initUserWQValues(dataList); |
195 initUserWQMode(dataList); | 311 initUserWQMode(dataList); |
196 } | 312 } |
273 | 389 |
274 DoubleArrayPanel dap = new DoubleArrayPanel( | 390 DoubleArrayPanel dap = new DoubleArrayPanel( |
275 createLineTitle(title), null, this, TitleOrientation.LEFT); | 391 createLineTitle(title), null, this, TitleOrientation.LEFT); |
276 | 392 |
277 wqranges.put(title, dap); | 393 wqranges.put(title, dap); |
394 | |
395 if (item instanceof WQDataItem) { | |
396 WQDataItem wq = (WQDataItem) item; | |
397 double[] mmQ = wq.getQRange(); | |
398 double[] mmW = wq.getWRange(); | |
399 | |
400 GWT.log(title + " Q: " + mmQ[0] + " - " + mmQ[1]); | |
401 GWT.log(title + " W: " + mmW[0] + " - " + mmW[1]); | |
402 | |
403 qranges.put(title, mmQ); | |
404 wranges.put(title, mmW); | |
405 } | |
406 | |
278 layout.addMember(dap); | 407 layout.addMember(dap); |
279 } | 408 } |
280 | 409 |
281 layout.setHeight(items.length * ROW_HEIGHT); | 410 layout.setHeight(items.length * ROW_HEIGHT); |
282 | 411 |
338 | 467 |
339 return new Data[] { mode, values }; | 468 return new Data[] { mode, values }; |
340 } | 469 } |
341 | 470 |
342 | 471 |
472 public boolean isWMode() { | |
473 String mode = (String) modes.getValue(FIELD_WQ_MODE); | |
474 | |
475 return FIELD_WQ_W.equals(mode); | |
476 } | |
477 | |
478 | |
343 protected Data getWQMode() { | 479 protected Data getWQMode() { |
344 String wqMode = modes.getValueAsString(FIELD_WQ_MODE); | 480 String wqMode = modes.getValueAsString(FIELD_WQ_MODE); |
345 DataItem item = new DefaultDataItem("wq_mode", "wq_mode", wqMode); | 481 DataItem item = new DefaultDataItem("wq_mode", "wq_mode", wqMode); |
346 Data mode = new DefaultData( | 482 Data mode = new DefaultData( |
347 "wq_mode", null, null, new DataItem[] { item }); | 483 "wq_mode", null, null, new DataItem[] { item }); |