Mercurial > dive4elements > river
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. |