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 });

http://dive4elements.wald.intevation.org