comparison gwt-client/src/main/java/org/dive4elements/river/client/client/ui/AbstractWQAdaptedInputPanel.java @ 9404:bc9a45d2b1fa

common time range for gauges incl. error messages
author gernotbelger
date Wed, 15 Aug 2018 13:59:09 +0200
parents 6174daaf5e56
children 43c975f8ab92
comparison
equal deleted inserted replaced
9403:e2da9c8a7c57 9404:bc9a45d2b1fa
11 import java.util.ArrayList; 11 import java.util.ArrayList;
12 import java.util.HashMap; 12 import java.util.HashMap;
13 import java.util.List; 13 import java.util.List;
14 import java.util.Map; 14 import java.util.Map;
15 15
16 import org.dive4elements.river.client.client.Config;
17 import org.dive4elements.river.client.client.FLYSConstants; 16 import org.dive4elements.river.client.client.FLYSConstants;
18 import org.dive4elements.river.client.client.ui.wq.QDTable; 17 import org.dive4elements.river.client.client.ui.wq.QDTable;
19 import org.dive4elements.river.client.client.ui.wq.WTable; 18 import org.dive4elements.river.client.client.ui.wq.WTable;
20 import org.dive4elements.river.client.shared.model.ArtifactDescription; 19 import org.dive4elements.river.client.shared.model.ArtifactDescription;
21 import org.dive4elements.river.client.shared.model.Data; 20 import org.dive4elements.river.client.shared.model.Data;
22 import org.dive4elements.river.client.shared.model.DataItem; 21 import org.dive4elements.river.client.shared.model.DataItem;
23 import org.dive4elements.river.client.shared.model.DataList; 22 import org.dive4elements.river.client.shared.model.DataList;
24 import org.dive4elements.river.client.shared.model.DefaultData; 23 import org.dive4elements.river.client.shared.model.DefaultData;
25 import org.dive4elements.river.client.shared.model.DefaultDataItem; 24 import org.dive4elements.river.client.shared.model.DefaultDataItem;
25 import org.dive4elements.river.client.shared.model.GaugeInfoObject;
26 import org.dive4elements.river.client.shared.model.WQDataItem; 26 import org.dive4elements.river.client.shared.model.WQDataItem;
27 import org.dive4elements.river.client.shared.model.WQInfoObject; 27 import org.dive4elements.river.client.shared.model.WQInfoObject;
28 import org.dive4elements.river.client.shared.model.WQInfoRecord; 28 import org.dive4elements.river.client.shared.model.WQInfoRecord;
29 29
30 import com.google.gwt.core.client.GWT; 30 import com.google.gwt.core.client.GWT;
31 import com.google.gwt.user.client.rpc.AsyncCallback;
32 import com.smartgwt.client.data.Record; 31 import com.smartgwt.client.data.Record;
33 import com.smartgwt.client.util.SC; 32 import com.smartgwt.client.util.SC;
34 import com.smartgwt.client.widgets.Canvas; 33 import com.smartgwt.client.widgets.Canvas;
35 import com.smartgwt.client.widgets.Label; 34 import com.smartgwt.client.widgets.Label;
36 import com.smartgwt.client.widgets.form.DynamicForm; 35 import com.smartgwt.client.widgets.form.DynamicForm;
83 protected List<WTable> wTables; 82 protected List<WTable> wTables;
84 83
85 /** Tabs in inputhelper area. */ 84 /** Tabs in inputhelper area. */
86 protected TabSet tabs; 85 protected TabSet tabs;
87 86
87 private Canvas submit;
88
89 private final List<String> gaugeNames = new ArrayList<String>();
90 private final Map<String, Double[]> gaugeNamesRange = new HashMap<String, Double[]>();
91
88 public AbstractWQAdaptedInputPanel() { 92 public AbstractWQAdaptedInputPanel() {
89 this.wqranges = new HashMap<String, DoubleArrayPanel>(); 93 this.wqranges = new HashMap<String, DoubleArrayPanel>();
90 this.qranges = new HashMap<String, double[]>(); 94 this.qranges = new HashMap<String, double[]>();
91 this.wTables = new ArrayList<WTable>(); 95 this.wTables = new ArrayList<WTable>();
92 this.qdTables = new ArrayList<QDTable>(); 96 this.qdTables = new ArrayList<QDTable>();
97 }
98
99 protected final Map<String, Double[]> getGaugeNamesRange() {
100 return this.gaugeNamesRange;
101 }
102
103 protected final String[] getGaugeNames() {
104 return this.gaugeNames.toArray(new String[this.gaugeNames.size()]);
93 } 105 }
94 106
95 /** Inits the helper panel. */ 107 /** Inits the helper panel. */
96 // TODO duplicate in WQInputPanel 108 // TODO duplicate in WQInputPanel
97 protected void initHelperPanel() { 109 protected void initHelperPanel() {
111 beforeCreate(data); 123 beforeCreate(data);
112 124
113 readGaugeRanges(data); 125 readGaugeRanges(data);
114 initHelperPanel(); 126 initHelperPanel();
115 127
116 final Canvas submit = getNextButton(); 128 this.submit = getNextButton();
117 final Canvas widget = createWidget(data); 129 final Canvas widget = createWidget(data);
118 final Label label = new Label(this.MSG.wqadaptedTitle()); 130 final Label label = new Label(this.MSG.wqadaptedTitle());
119 131
120 label.setHeight(25); 132 label.setHeight(25);
121 133
123 layout.setMembersMargin(10); 135 layout.setMembersMargin(10);
124 layout.setWidth(350); 136 layout.setWidth(350);
125 137
126 layout.addMember(label); 138 layout.addMember(label);
127 layout.addMember(widget); 139 layout.addMember(widget);
128 layout.addMember(submit); 140 layout.addMember(this.submit);
129 141
130 fetchWQData(); 142 fetchWQData();
131 143
132 initTableListeners(); 144 initTableListeners();
133 145
134 afterCreate(); 146 afterCreate();
135 147
136 return layout; 148 return layout;
149 }
150
151 protected final Canvas getSubmitBtn() {
152 return this.submit;
137 } 153 }
138 154
139 protected abstract void createTabs(); 155 protected abstract void createTabs();
140 156
141 protected abstract void beforeCreate(final DataList data); 157 protected abstract void beforeCreate(final DataList data);
357 for (final DataItem item : items) { 373 for (final DataItem item : items) {
358 if (item instanceof WQDataItem) { 374 if (item instanceof WQDataItem) {
359 final String[] startEndKm = item.getLabel().split(";"); 375 final String[] startEndKm = item.getLabel().split(";");
360 final Double[] kvp = new Double[] { Double.parseDouble(startEndKm[0]), Double.parseDouble(startEndKm[1]) }; 376 final Double[] kvp = new Double[] { Double.parseDouble(startEndKm[0]), Double.parseDouble(startEndKm[1]) };
361 this.gaugeRanges.add(kvp); 377 this.gaugeRanges.add(kvp);
378 final String gaugeName = item.getStringValue();
379 this.gaugeNames.add(gaugeName);
380 this.gaugeNamesRange.put(gaugeName, kvp);
362 } 381 }
363 } 382 }
364 } 383 }
365 384
366 /** Get items which are not WQ_MODE. */ 385 /** Get items which are not WQ_MODE. */
431 final DoubleArrayPanel dap = (DoubleArrayPanel) event.getForm(); 450 final DoubleArrayPanel dap = (DoubleArrayPanel) event.getForm();
432 dap.validateForm(event.getItem()); 451 dap.validateForm(event.getItem());
433 } 452 }
434 453
435 /** Get the WQD data from service and stuck them up that tables. */ 454 /** Get the WQD data from service and stuck them up that tables. */
436 protected void fetchWQData() { 455 protected abstract void fetchWQData();
437 final Config config = Config.getInstance(); 456
438 final String locale = config.getLocale(); 457 // protected abstract void callMainValuesService(String locale, String river, double start, double end,
439 458 // AsyncCallback<WQInfoObject[]> cb);
440 final ArtifactDescription adescr = this.artifact.getArtifactDescription();
441 final DataList[] data = adescr.getOldData();
442
443 final String river = getRiverName(data);
444
445 int i = 0;
446
447 // Get Data for respective gauge.
448 for (final Double[] range : this.gaugeRanges) {
449 // Gauge ranges overlap, move start and end a bit closer
450 // to each other.
451 final double rDiff = (range[1] - range[0]) / 10d;
452 final int fi = i;
453
454 final AsyncCallback<WQInfoObject[]> cb = new AsyncCallback<WQInfoObject[]>() {
455 @Override
456 public void onFailure(final Throwable caught) {
457 GWT.log("Could not recieve wq informations.");
458 SC.warn(caught.getMessage());
459 }
460
461 @Override
462 public void onSuccess(final WQInfoObject[] wqi) {
463 final int num = wqi != null ? wqi.length : 0;
464 GWT.log("Received " + num + " wq informations (" + fi + ".");
465
466 if (num == 0) {
467 return;
468 }
469
470 addWQInfo(wqi, fi);
471 }
472 };
473
474 callMainValuesService(locale, river, range[0] + rDiff, range[1] - rDiff, cb);
475
476 i++;
477 }
478 }
479
480 protected abstract void callMainValuesService(String locale, String river, double start, double end, AsyncCallback<WQInfoObject[]> cb);
481 459
482 /** Add Info to helper table for gauge at index gaugeIdx. */ 460 /** Add Info to helper table for gauge at index gaugeIdx. */
483 private void addWQInfo(final WQInfoObject[] wqi, final int gaugeIdx) { 461 public void addWQInfo(final WQInfoObject[] wqi, final int gaugeIdx, final GaugeInfoObject gauge) {
484 for (final WQInfoObject wi : wqi) { 462 if (wqi == null) {
485 final WQInfoRecord rec = new WQInfoRecord(wi); 463 // this.wTables.get(gaugeIdx).setLoadingDataMessage(""); (keine W-tables vorhanden - wo W-Table benutzt werden, gibt es
486 464 // ein Popup)
487 if (wi.getType().equals("W")) { 465 final String emptyMsg = gauge.getErrorMessage();
488 if (gaugeIdx < this.wTables.size()) 466 final QDTable table = this.qdTables.get(gaugeIdx);
489 this.wTables.get(gaugeIdx).addData(rec); 467 table.setEmptyMessage(emptyMsg == null ? "" : emptyMsg);
490 } else { // Q,D,- alle gehören hier rein! 468 table.redraw();
491 if (gaugeIdx < this.qdTables.size()) 469 } else {
492 this.qdTables.get(gaugeIdx).addData(rec); 470 for (final WQInfoObject wi : wqi) {
493 } 471 final WQInfoRecord rec = new WQInfoRecord(wi);
472
473 if (wi.getType().equals("W")) {
474 if (gaugeIdx < this.wTables.size())
475 this.wTables.get(gaugeIdx).addData(rec);
476 } else { // Q,D,- alle gehören hier rein!
477 if (gaugeIdx < this.qdTables.size())
478 this.qdTables.get(gaugeIdx).addData(rec);
479 }
480 }
481 }
482 if (gauge != null)
483 AbstractWQAdaptedInputPanel.this.doubleArrayPanels.get(gaugeIdx).setError(gauge.getErrorMessage());
484 }
485
486 public void resetLoadingMessageOfQTable(final String msg) {
487 for (final QDTable table : this.qdTables) {
488 table.setEmptyMessage(msg);
489 table.redraw();
494 } 490 }
495 } 491 }
496 492
497 /** 493 /**
498 * Returns the name of the selected river. 494 * Returns the name of the selected river.

http://dive4elements.wald.intevation.org