comparison flys-client/src/main/java/de/intevation/flys/client/client/ui/WQInputPanel.java @ 2392:8112ec686a9a

Picked rev4066,4075 from trunk. flys-client/tags/2.6.1@4082 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Fri, 17 Feb 2012 12:58:38 +0000
parents 3b1a7f34e19b
children 8490faba00e7
comparison
equal deleted inserted replaced
2391:3c8ae5605a51 2392:8112ec686a9a
70 70
71 /** The constant field value for Q input mode.*/ 71 /** The constant field value for Q input mode.*/
72 public static final String FIELD_WQ_Q = "Q"; 72 public static final String FIELD_WQ_Q = "Q";
73 73
74 /** The constant field value for Q input mode.*/ 74 /** The constant field value for Q input mode.*/
75 public static final String FIELD_WQ_Q_GAUGE = "Q_GAUGE"; 75 public static final String FIELD_WQ_Q_FREE = "QFREE";
76 76
77 /** The constant field name for choosing single values or range.*/ 77 /** The constant field name for choosing single values or range.*/
78 public static final String FIELD_MODE = "mode"; 78 public static final String FIELD_MODE = "mode";
79 79
80 /** The constant field value for single input mode.*/ 80 /** The constant field value for single input mode.*/
273 273
274 274
275 public Canvas createOld(DataList dataList) { 275 public Canvas createOld(DataList dataList) {
276 List<Data> items = dataList.getAll(); 276 List<Data> items = dataList.getAll();
277 277
278 Data dMode = getData(items, "wq_mode"); 278 Data dMode = getData(items, "wq_isq");
279 Data dFree = getData(items, "wq_free"); 279 Data dFree = getData(items, "wq_isfree");
280 Data dSelection = getData(items, "wq_selection"); 280 Data dSelection = getData(items, "wq_isrange");
281 Data dSingle = getData(items, "wq_single"); 281 Data dSingle = getData(items, "wq_single");
282 Data dFrom = getData(items, "wq_from"); 282 Data dFrom = getData(items, "wq_from");
283 Data dTo = getData(items, "wq_to"); 283 Data dTo = getData(items, "wq_to");
284 Data dStep = getData(items, "wq_step"); 284 Data dStep = getData(items, "wq_step");
285 285
286 DataItem[] mode = dMode.getItems(); 286 DataItem[] mode = dMode.getItems();
287 String strMode = mode[0].getStringValue(); 287 String strMode = mode[0].getStringValue();
288 boolean wMode = strMode.equals(FIELD_WQ_W); 288 boolean isQMode = Boolean.valueOf(strMode);
289 289
290 DataItem[] free = dFree.getItems(); 290 DataItem[] free = dFree.getItems();
291 String strFree = free[0].getStringValue(); 291 String strFree = free[0].getStringValue();
292 boolean isFree = Boolean.valueOf(strFree); 292 boolean isFree = Boolean.valueOf(strFree);
293 293
298 label.setWidth("200px"); 298 label.setWidth("200px");
299 299
300 VLayout vLabel = null; 300 VLayout vLabel = null;
301 301
302 DataItem[] selItem = dSelection.getItems(); 302 DataItem[] selItem = dSelection.getItems();
303 String sel = selItem != null 303 boolean isRange = selItem != null
304 ? selItem[0].getStringValue() 304 ? Boolean.valueOf(selItem[0].getStringValue())
305 : ""; 305 : false;
306 306
307 if (sel.equals("single")) { 307 if (!isRange) {
308 DataItem[] single = dSingle.getItems(); 308 DataItem[] single = dSingle.getItems();
309 309
310 vLabel = wMode 310 vLabel = !isQMode
311 ? createWString(single[0]) 311 ? createWString(single[0])
312 : createQString(single[0]); 312 : createQString(single[0]);
313 } 313 }
314 else { 314 else {
315 DataItem[] from = dFrom.getItems(); 315 DataItem[] from = dFrom.getItems();
316 DataItem[] to = dTo.getItems(); 316 DataItem[] to = dTo.getItems();
317 DataItem[] step = dStep.getItems(); 317 DataItem[] step = dStep.getItems();
318 318
319 vLabel = wMode 319 vLabel = !isQMode
320 ? createWString(from[0], to[0], step[0]) 320 ? createWString(from[0], to[0], step[0])
321 : createQString(from[0], to[0], step[0]); 321 : createQString(from[0], to[0], step[0]);
322 } 322 }
323 323
324 VLayout selectedLayout = new VLayout(); 324 VLayout selectedLayout = new VLayout();
325 String wqMode = null; 325 String wqMode = null;
326 326
327 if (wMode) { 327 if (!isQMode) {
328 wqMode = MESSAGE.wqW(); 328 wqMode = MESSAGE.wqW();
329 } 329 }
330 else { 330 else {
331 wqMode = isFree ? MESSAGE.wqQ() : MESSAGE.wqQGauge(); 331 wqMode = isFree ? MESSAGE.wqQ() : MESSAGE.wqQGauge();
332 } 332 }
402 * @param list The DataList that contains the user data. 402 * @param list The DataList that contains the user data.
403 */ 403 */
404 protected void initUserDefaults(DataList list) { 404 protected void initUserDefaults(DataList list) {
405 List<Data> allData = list.getAll(); 405 List<Data> allData = list.getAll();
406 406
407 Data m = getData(allData, "wq_mode"); 407 Data m = getData(allData, "wq_isq");
408 DataItem modeItem = m != null ? m.getDefault() : null; 408 DataItem modeItem = m != null ? m.getDefault() : null;
409 String theMode = modeItem != null 409 boolean isQ = modeItem != null
410 ? modeItem.getStringValue() 410 ? Boolean.valueOf(modeItem.getStringValue())
411 : ""; 411 : false;
412 412
413 Data f = getData(allData, "wq_free"); 413 Data f = getData(allData, "wq_isfree");
414 DataItem freeItem = f != null ? f.getDefault() : null; 414 DataItem freeItem = f != null ? f.getDefault() : null;
415 String theFree = freeItem != null 415 boolean isFree = freeItem != null
416 ? freeItem.getStringValue() 416 ? Boolean.valueOf(freeItem.getStringValue())
417 : null; 417 : false;
418 418
419 Data s = getData(allData, "wq_selection"); 419 Data s = getData(allData, "wq_isrange");
420 DataItem sI = s != null ? s.getDefault() : null; 420 DataItem sI = s != null ? s.getDefault() : null;
421 String theSelection = sI != null ? sI.getStringValue() : null; 421 boolean isRange = sI != null
422 422 ? Boolean.valueOf(sI.getStringValue())
423 if (theMode == null || theMode.length() == 0) { 423 : false;
424 return; 424
425 } 425 initUserSingleValues(list, isQ);
426 426 initUserRangeValues(list, isQ);
427 boolean isW = theMode.equals(FIELD_WQ_W); 427
428 boolean isFree = Boolean.valueOf(theFree); 428 if (isQ) {
429 boolean isWFree = theMode.equals(FIELD_WQ_W_FREE); 429 modes.setValue(FIELD_WQ, isQ);
430 430 }
431 initUserSingleValues(list, theMode); 431 else {
432 initUserRangeValues(list, theMode); 432 modes.setValue(FIELD_WQ, isFree ? FIELD_WQ_Q_FREE : FIELD_WQ_Q);
433 433 }
434 if (isW || isWFree) { 434
435 modes.setValue(FIELD_WQ, theMode); 435 if(isRange) {
436 } 436 modes.setValue(FIELD_MODE, FIELD_MODE_RANGE);
437 else { 437 }
438 modes.setValue(FIELD_WQ, isFree ? FIELD_WQ_Q : FIELD_WQ_Q_GAUGE); 438 else {
439 } 439 modes.setValue(FIELD_MODE, FIELD_MODE_SINGLE);
440 440 }
441 if (theSelection != null || theSelection.length() > 0) { 441 updatePanels(isQ, isFree, isRange);
442 modes.setValue(FIELD_MODE, theSelection);
443 updatePanels(theMode, theSelection);
444 }
445 } 442 }
446 443
447 444
448 /** 445 /**
449 * Initializes the single values of W or Q from DataList. 446 * Initializes the single values of W or Q from DataList.
450 * 447 *
451 * @param list The DataList that contains the 'wq_single' object. 448 * @param list The DataList that contains the 'wq_single' object.
452 * @param theMode The W or Q mode. 449 * @param theMode The W or Q mode.
453 */ 450 */
454 protected void initUserSingleValues(DataList list, String theMode) { 451 protected void initUserSingleValues(DataList list, boolean isQ) {
455 List<Data> allData = list.getAll(); 452 List<Data> allData = list.getAll();
453
456 454
457 Data s = getData(allData, "wq_single"); 455 Data s = getData(allData, "wq_single");
458 DataItem i = s != null ? s.getDefault() : null; 456 DataItem i = s != null ? s.getDefault() : null;
457 GWT.log("init values: " + i.getStringValue());
459 458
460 if (i != null) { 459 if (i != null) {
461 String value = i.getStringValue(); 460 String value = i.getStringValue();
462 String[] split = value.split(" "); 461 String[] split = value.split(" ");
463 462
472 catch (NumberFormatException nfe) { 471 catch (NumberFormatException nfe) {
473 // nothing to do 472 // nothing to do
474 } 473 }
475 } 474 }
476 475
477 if (theMode.equals("W")) { 476 if (!isQ) {
478 setSingleW(values); 477 setSingleW(values);
479 } 478 }
480 else { 479 else {
481 setSingleQ(values); 480 setSingleQ(values);
482 } 481 }
488 * Initializes the range values of W or Q from DataList. 487 * Initializes the range values of W or Q from DataList.
489 * 488 *
490 * @param list The DataList that contains the 'wq_single' object. 489 * @param list The DataList that contains the 'wq_single' object.
491 * @param theMode The W or Q mode. 490 * @param theMode The W or Q mode.
492 */ 491 */
493 protected void initUserRangeValues(DataList list, String theMode) { 492 protected void initUserRangeValues(DataList list, boolean isQ) {
494 List<Data> allData = list.getAll(); 493 List<Data> allData = list.getAll();
495 494
496 // init range mode values 495 // init range mode values
497 Data f = getData(allData, "wq_from"); 496 Data f = getData(allData, "wq_from");
498 Data t = getData(allData, "wq_to"); 497 Data t = getData(allData, "wq_to");
510 try { 509 try {
511 double from = Double.valueOf(fS); 510 double from = Double.valueOf(fS);
512 double to = Double.valueOf(tS); 511 double to = Double.valueOf(tS);
513 double step = Double.valueOf(sS); 512 double step = Double.valueOf(sS);
514 513
515 if (theMode.equals("W")) { 514 if (!isQ) {
516 setWRangeValues(from, to, step); 515 setWRangeValues(from, to, step);
517 } 516 }
518 else { 517 else {
519 setQRangeValues(from, to, step); 518 setQRangeValues(from, to, step);
520 } 519 }
657 mode.setWidth(WIDTH_LEFT_LOWER); 656 mode.setWidth(WIDTH_LEFT_LOWER);
658 657
659 LinkedHashMap wqValues = new LinkedHashMap(); 658 LinkedHashMap wqValues = new LinkedHashMap();
660 wqValues.put(FIELD_WQ_W, MESSAGE.wqW()); 659 wqValues.put(FIELD_WQ_W, MESSAGE.wqW());
661 wqValues.put(FIELD_WQ_W_FREE, MESSAGE.wqWFree()); 660 wqValues.put(FIELD_WQ_W_FREE, MESSAGE.wqWFree());
662 wqValues.put(FIELD_WQ_Q, MESSAGE.wqQ()); 661 wqValues.put(FIELD_WQ_Q_FREE, MESSAGE.wqQ());
663 wqValues.put(FIELD_WQ_Q_GAUGE, MESSAGE.wqQGauge()); 662 wqValues.put(FIELD_WQ_Q, MESSAGE.wqQGauge());
664 663
665 LinkedHashMap modeValues = new LinkedHashMap(); 664 LinkedHashMap modeValues = new LinkedHashMap();
666 modeValues.put(FIELD_MODE_SINGLE, MESSAGE.wqSingle()); 665 modeValues.put(FIELD_MODE_SINGLE, MESSAGE.wqSingle());
667 modeValues.put(FIELD_MODE_RANGE, MESSAGE.wqRange()); 666 modeValues.put(FIELD_MODE_RANGE, MESSAGE.wqRange());
668 667
676 modes.setFields(wq, mode); 675 modes.setFields(wq, mode);
677 modes.setWidth(WIDTH_LEFT_UPPER); 676 modes.setWidth(WIDTH_LEFT_UPPER);
678 modes.setNumCols(1); 677 modes.setNumCols(1);
679 678
680 LinkedHashMap initial = new LinkedHashMap(); 679 LinkedHashMap initial = new LinkedHashMap();
681 initial.put(FIELD_WQ, FIELD_WQ_Q_GAUGE); 680 initial.put(FIELD_WQ, FIELD_WQ_Q);
682 initial.put(FIELD_MODE, FIELD_MODE_SINGLE); 681 initial.put(FIELD_MODE, FIELD_MODE_SINGLE);
683 modes.setValues(initial); 682 modes.setValues(initial);
684 683
685 return modes; 684 return modes;
686 } 685 }
882 DataItem to = new DefaultDataItem("wq_to", "wq_to", ""); 881 DataItem to = new DefaultDataItem("wq_to", "wq_to", "");
883 DataItem step = new DefaultDataItem("wq_step", "wq_step", ""); 882 DataItem step = new DefaultDataItem("wq_step", "wq_step", "");
884 883
885 return new Data[] { 884 return new Data[] {
886 getDataMode(), 885 getDataMode(),
887 getQMode(), 886 getFree(),
888 getDataSelectionMode(), 887 getDataSelectionMode(),
889 getDataSingle(), 888 getDataSingle(),
890 new DefaultData( 889 new DefaultData(
891 "wq_from", 890 "wq_from",
892 null, 891 null,
912 protected Data[] getRangeData() { 911 protected Data[] getRangeData() {
913 DataItem item = new DefaultDataItem("wq_single", "wq_single", ""); 912 DataItem item = new DefaultDataItem("wq_single", "wq_single", "");
914 913
915 return new Data[] { 914 return new Data[] {
916 getDataMode(), 915 getDataMode(),
917 getQMode(), 916 getFree(),
918 getDataSelectionMode(), 917 getDataSelectionMode(),
919 getDataFrom(), 918 getDataFrom(),
920 getDataTo(), 919 getDataTo(),
921 getDataStep(), 920 getDataStep(),
922 new DefaultData( 921 new DefaultData(
934 */ 933 */
935 protected Data getDataMode() { 934 protected Data getDataMode() {
936 String wqMode = modes.getValueAsString(FIELD_WQ); 935 String wqMode = modes.getValueAsString(FIELD_WQ);
937 936
938 String value = null; 937 String value = null;
939 if (wqMode.equals(FIELD_WQ_Q) || wqMode.equals(FIELD_WQ_Q_GAUGE)) { 938 if (wqMode.equals(FIELD_WQ_Q_FREE) || wqMode.equals(FIELD_WQ_Q)) {
940 GWT.log("getData: FIELD_WQ_Q || FIELD_WQ_Q_GAUGE"); 939 GWT.log("getData: FIELD_WQ_Q || FIELD_WQ_Q_FREE");
941 value = FIELD_WQ_Q; 940 value = "true";
942 }
943 else if (wqMode.equals(FIELD_WQ_W_FREE)) {
944 GWT.log("getData: FIELD_WQ_W_FREE");
945 value = FIELD_WQ_W_FREE;
946 } 941 }
947 else { 942 else {
948 GWT.log("getData: FIELD_WQ_W"); 943 GWT.log("getData: FIELD_WQ_W");
949 value = FIELD_WQ_W; 944 value = "false";
950 } 945 }
951 946
952 DataItem item = new DefaultDataItem("wq_mode", "wq_mode", value); 947 DataItem item = new DefaultDataItem("wq_isq", "wq_isq", value);
953 return new DefaultData( 948 return new DefaultData(
954 "wq_mode", null, null, new DataItem[] { item }); 949 "wq_isq", null, null, new DataItem[] { item });
955 } 950 }
956 951
957 952
958 /** 953 /**
959 * Returns the Q mode. The Q mode can be "true" or "false". True means, the 954 * Returns the Q mode. The Q mode can be "true" or "false". True means, the
960 * calculation is not based on a gauge, false means the calculation should 955 * calculation is not based on a gauge, false means the calculation should
961 * be based on a gauge. 956 * be based on a gauge.
962 * 957 *
963 * @return the Data object for the 'wq_free' attribute. 958 * @return the Data object for the 'wq_free' attribute.
964 */ 959 */
965 protected Data getQMode() { 960 protected Data getFree() {
966 String value = isQFree() ? "true" : "false"; 961 String value = "";
967 962 if(!isWMode()) {
968 DataItem item = new DefaultDataItem("wq_free", "wq_free", value); 963 value = isQFree() ? "true" : "false";
964 }
965 else {
966 value = isWFree() ? "true" : "false";
967 }
968 DataItem item = new DefaultDataItem("wq_isfree", "wq_isfree", value);
969 return new DefaultData( 969 return new DefaultData(
970 "wq_free", null, null, new DataItem[] { item }); 970 "wq_isfree", null, null, new DataItem[] { item });
971 } 971 }
972 972
973 973
974 /** 974 /**
975 * Returns the Data object for the 'mode' attribute. 975 * Returns the Data object for the 'mode' attribute.
976 * 976 *
977 * @return the Data object for the 'mode' attribute. 977 * @return the Data object for the 'mode' attribute.
978 */ 978 */
979 protected Data getDataSelectionMode() { 979 protected Data getDataSelectionMode() {
980 String wqSelection = modes.getValueAsString(FIELD_MODE); 980 String wqSelection = modes.getValueAsString(FIELD_MODE);
981
982 String isRange = "true";
983 if (wqSelection.equals(FIELD_MODE_SINGLE)) {
984 isRange = "false";
985 }
981 DataItem item = new DefaultDataItem( 986 DataItem item = new DefaultDataItem(
982 "wq_selection", "wq_selection", wqSelection); 987 "wq_isrange", "wq_isrange", isRange);
983 988
984 return new DefaultData( 989 return new DefaultData(
985 "wq_selection", null, null, new DataItem[] { item }); 990 "wq_isrange", null, null, new DataItem[] { item });
986 } 991 }
987 992
988 993
989 /** 994 /**
990 * Returns the data object for the 'single' attribute. 995 * Returns the data object for the 'single' attribute.
1192 * 1197 *
1193 * @return true, if the W mode is activated. 1198 * @return true, if the W mode is activated.
1194 */ 1199 */
1195 public boolean isWMode() { 1200 public boolean isWMode() {
1196 String wq = modes.getValueAsString(FIELD_WQ); 1201 String wq = modes.getValueAsString(FIELD_WQ);
1197 return wq.equals(FIELD_WQ_W); 1202 return wq.contains("W");
1198 } 1203 }
1199 1204
1200 1205
1201 public boolean isQFree() { 1206 public boolean isQFree() {
1202 String wqMode = modes.getValueAsString(FIELD_WQ); 1207 String wqMode = modes.getValueAsString(FIELD_WQ);
1203 return wqMode.equals(FIELD_WQ_Q); 1208 return wqMode.equals(FIELD_WQ_Q_FREE);
1204 } 1209 }
1205 1210
1206 protected boolean isWFree() { 1211 protected boolean isWFree() {
1207 String wqMode = modes.getValueAsString(FIELD_WQ); 1212 String wqMode = modes.getValueAsString(FIELD_WQ);
1208 return wqMode.equals(FIELD_WQ_W_FREE); 1213 return wqMode.equals(FIELD_WQ_W_FREE);
1217 */ 1222 */
1218 public void onChange(ChangeEvent event) { 1223 public void onChange(ChangeEvent event) {
1219 DynamicForm form = event.getForm(); 1224 DynamicForm form = event.getForm();
1220 FormItem item = event.getItem(); 1225 FormItem item = event.getItem();
1221 1226
1222 String wqMode = null; 1227 boolean isQ = false;
1223 String inputMode = null; 1228 boolean isFree = false;
1229 boolean isRange = false;
1224 1230
1225 if (item.getFieldName().equals(FIELD_MODE)) { 1231 if (item.getFieldName().equals(FIELD_MODE)) {
1226 wqMode = form.getValueAsString(FIELD_WQ); 1232 String wq = form.getValueAsString(FIELD_WQ);
1227 inputMode = (String) event.getValue(); 1233 isQ = wq.contains("Q");
1228 } 1234 isFree = wq.contains("FREE");
1229 else { 1235 isRange = ((String) event.getValue()).equals(FIELD_MODE_RANGE);
1230 wqMode = (String) event.getValue(); 1236 }
1231 inputMode = form.getValueAsString(FIELD_MODE); 1237 else {
1232 } 1238 String wq = ((String) event.getValue());
1233 1239 isQ = wq.contains("Q");
1234 if (wqMode.equals("Q")) { 1240 isFree = wq.contains("FREE");
1241 isRange =
1242 form.getValueAsString(FIELD_MODE).equals(FIELD_MODE_RANGE);
1243 }
1244
1245 if (isQ && isFree) {
1235 qdTable.hideIconFields(); 1246 qdTable.hideIconFields();
1236 } 1247 }
1237 else { 1248 else {
1238 qdTable.showIconFields(); 1249 qdTable.showIconFields();
1239 } 1250 }
1240 1251
1241 updatePanels(wqMode, inputMode); 1252 updatePanels(isQ, isFree, isRange);
1242 } 1253 }
1243 1254
1244 1255
1245 protected void updatePanels(String wqMode, String inputMode) { 1256 protected void updatePanels(boolean isQ, boolean isFree, boolean isRange) {
1246 container.removeMembers(container.getMembers()); 1257 container.removeMembers(container.getMembers());
1247 1258
1248 if (wqMode.equals(FIELD_WQ_W) || wqMode.equals(FIELD_WQ_W_FREE)) { 1259 if (!isQ) {
1249 if (inputMode.equals(FIELD_MODE_SINGLE)) { 1260 if (!isRange) {
1250 // Single W mode 1261 // Single W mode
1251 double[] values = getSingleW(); 1262 double[] values = getSingleW();
1252 1263
1253 wArrayPanel = new DoubleArrayPanel( 1264 wArrayPanel = new DoubleArrayPanel(
1254 MESSAGE.unitWSingle(), values, this); 1265 MESSAGE.unitWSingle(), values, this);
1269 container.addMember(wRangePanel); 1280 container.addMember(wRangePanel);
1270 } 1281 }
1271 1282
1272 tabs.selectTab(0); 1283 tabs.selectTab(0);
1273 } 1284 }
1274 else if (wqMode.equals(FIELD_WQ_Q)) { 1285 else if (isQ && isFree) {
1275 if (inputMode.equals(FIELD_MODE_SINGLE)) { 1286 if (!isRange) {
1276 // Single Q mode 1287 // Single Q mode
1277 double[] values = getSingleQFree(); 1288 double[] values = getSingleQFree();
1278 1289
1279 qFreeArrayPanel = new DoubleArrayPanel( 1290 qFreeArrayPanel = new DoubleArrayPanel(
1280 MESSAGE.unitQSingle(), values, this); 1291 MESSAGE.unitQSingle(), values, this);
1295 } 1306 }
1296 1307
1297 tabs.selectTab(1); 1308 tabs.selectTab(1);
1298 } 1309 }
1299 else { 1310 else {
1300 if (inputMode.equals(FIELD_MODE_SINGLE)) { 1311 if (!isRange) {
1301 // Single Q mode 1312 // Single Q mode
1302 double[] values = getSingleQ(); 1313 double[] values = getSingleQ();
1303 1314
1304 qArrayPanel = new DoubleArrayPanel( 1315 qArrayPanel = new DoubleArrayPanel(
1305 MESSAGE.unitQSingle(), values, this); 1316 MESSAGE.unitQSingle(), values, this);
1653 1664
1654 addWQInfo(wqi); 1665 addWQInfo(wqi);
1655 1666
1656 String wq = (String) modes.getValue(FIELD_WQ); 1667 String wq = (String) modes.getValue(FIELD_WQ);
1657 String sr = (String) modes.getValue(FIELD_MODE); 1668 String sr = (String) modes.getValue(FIELD_MODE);
1658 updatePanels(wq, sr); 1669 GWT.log("sending: " + wq + ", " + sr);
1670 boolean isQ = wq.contains("Q");
1671 boolean isFree = wq.contains("FREE");
1672 boolean isRange = sr.equals(FIELD_MODE_RANGE);
1673
1674 updatePanels(isQ, isFree, isRange);
1659 } 1675 }
1660 } 1676 }
1661 ); 1677 );
1662 } 1678 }
1663 1679

http://dive4elements.wald.intevation.org