annotate gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DatacagePairWidget.java @ 9227:84397da33d17

Allow to control specific behaviour in TwinDatacagePanel Implemented client logic of 'intelligent datacage filtering' for SINFO
author gernotbelger
date Wed, 04 Jul 2018 18:28:08 +0200
parents e3c2ae1887e8
children
rev   line source
5861
172338b1407f GWT client: Added copyright header.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
172338b1407f GWT client: Added copyright header.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
2 * Software engineering by Intevation GmbH
172338b1407f GWT client: Added copyright header.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
3 *
5993
ea9eef426962 Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5861
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
5861
172338b1407f GWT client: Added copyright header.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
5993
ea9eef426962 Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5861
diff changeset
6 * documentation coming with Dive4Elements River for details.
5861
172338b1407f GWT client: Added copyright header.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
7 */
172338b1407f GWT client: Added copyright header.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
8
5835
821a02bbfb4e Fixed internal java dependencies
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5834
diff changeset
9 package org.dive4elements.river.client.client.ui;
899
6e678b5d08a4 New widget for future use.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
10
9133
af73fdd96920 Title current/historical diff pair; limit on entries in diff'pair twin_panel
gernotbelger
parents: 8852
diff changeset
11 import org.dive4elements.river.client.client.FLYSConstants;
af73fdd96920 Title current/historical diff pair; limit on entries in diff'pair twin_panel
gernotbelger
parents: 8852
diff changeset
12 import org.dive4elements.river.client.shared.model.ToLoad;
af73fdd96920 Title current/historical diff pair; limit on entries in diff'pair twin_panel
gernotbelger
parents: 8852
diff changeset
13
899
6e678b5d08a4 New widget for future use.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
14 import com.google.gwt.core.client.GWT;
4567
5e6e89f19a37 flys/client: Exception catched and replaced by friendly warning (MINFO Sohlhoehendifferenz) #967/flys.
Christian Lins <christian.lins@intevation.de>
parents: 4183
diff changeset
15 import com.smartgwt.client.util.SC;
899
6e678b5d08a4 New widget for future use.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
16 import com.smartgwt.client.widgets.Button;
4567
5e6e89f19a37 flys/client: Exception catched and replaced by friendly warning (MINFO Sohlhoehendifferenz) #967/flys.
Christian Lins <christian.lins@intevation.de>
parents: 4183
diff changeset
17 import com.smartgwt.client.widgets.events.ClickEvent;
4182
ad2489b595d7 Fix for issue #967
Christian Lins <christian.lins@intevation.de>
parents: 3549
diff changeset
18 import com.smartgwt.client.widgets.events.ClickHandler;
899
6e678b5d08a4 New widget for future use.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
19 import com.smartgwt.client.widgets.grid.ListGrid;
4567
5e6e89f19a37 flys/client: Exception catched and replaced by friendly warning (MINFO Sohlhoehendifferenz) #967/flys.
Christian Lins <christian.lins@intevation.de>
parents: 4183
diff changeset
20 import com.smartgwt.client.widgets.layout.HLayout;
5e6e89f19a37 flys/client: Exception catched and replaced by friendly warning (MINFO Sohlhoehendifferenz) #967/flys.
Christian Lins <christian.lins@intevation.de>
parents: 4183
diff changeset
21 import com.smartgwt.client.widgets.layout.VLayout;
899
6e678b5d08a4 New widget for future use.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
22
914
39a39e9be5af Made DatacageTwinPanel somewhat usable.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 899
diff changeset
23 /**
3549
6a8f83c538e3 Merged revisions 5384 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3533
diff changeset
24 * Widget showing two Datacages and a add-this-button.
6a8f83c538e3 Merged revisions 5384 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3533
diff changeset
25 * Insert a record into a listgrid when add-this-button clicked.
914
39a39e9be5af Made DatacageTwinPanel somewhat usable.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 899
diff changeset
26 */
9133
af73fdd96920 Title current/historical diff pair; limit on entries in diff'pair twin_panel
gernotbelger
parents: 8852
diff changeset
27 public class DatacagePairWidget extends VLayout {
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
28
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
29 /**
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
30 * Allows for advanced controlling of the behavior of this pair widget.
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
31 */
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
32 public static interface IDatacagePairControler {
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
33 void setup(DatacageWidget leftWidget, DatacageWidget rightWidget, HLayout toolbarLayout);
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
34 }
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
35
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
36 /**
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
37 * {@link IDatacagePairControler} implementation that does nothing.
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
38 */
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
39 public static final IDatacagePairControler NIL_CONTROLER = new IDatacagePairControler() {
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
40 @Override
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
41 public void setup(final DatacageWidget leftWidget, final DatacageWidget rightWidget, final HLayout toolbarLayout) {
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
42 // does nothing
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
43 }
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
44 };
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
45
3549
6a8f83c538e3 Merged revisions 5384 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3533
diff changeset
46 /** i18n resource. */
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
47 private static final FLYSConstants MSG = GWT.create(FLYSConstants.class);
2905
51ed89b754ae FLYS client: Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1352
diff changeset
48
1284
cdb1505a32f1 Fix messed up indentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1283
diff changeset
49 /** The "remote" ListGrid to insert data to when add-button is clicked. */
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 9133
diff changeset
50 private final ListGrid grid;
2905
51ed89b754ae FLYS client: Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1352
diff changeset
51
1284
cdb1505a32f1 Fix messed up indentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1283
diff changeset
52 /** First (upper) DataCage Grid. */
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 9133
diff changeset
53 private final DatacageWidget firstDatacageWidget;
2905
51ed89b754ae FLYS client: Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1352
diff changeset
54
1284
cdb1505a32f1 Fix messed up indentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1283
diff changeset
55 /** Second (lower) DataCage Grid. */
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 9133
diff changeset
56 private final DatacageWidget secondDatacageWidget;
1298
b0ed67cb5197 Minor refactoring, improved displayed Strings in W-Diff branch.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1295
diff changeset
57
9133
af73fdd96920 Title current/historical diff pair; limit on entries in diff'pair twin_panel
gernotbelger
parents: 8852
diff changeset
58 /** Max number of recommendation pairs to be added */
af73fdd96920 Title current/historical diff pair; limit on entries in diff'pair twin_panel
gernotbelger
parents: 8852
diff changeset
59 private final int maxCount;
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 9133
diff changeset
60
9133
af73fdd96920 Title current/historical diff pair; limit on entries in diff'pair twin_panel
gernotbelger
parents: 8852
diff changeset
61 /** errorMsg maxCount */
af73fdd96920 Title current/historical diff pair; limit on entries in diff'pair twin_panel
gernotbelger
parents: 8852
diff changeset
62 private final String msgMaxCount;
2905
51ed89b754ae FLYS client: Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1352
diff changeset
63
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
64 public DatacagePairWidget(final IDatacagePairControler controler, final DatacageWidgetData leftData, final DatacageWidgetData rightData,
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
65 final ListGrid grid, final int maxCount, final String msgMaxCount) {
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
66
9133
af73fdd96920 Title current/historical diff pair; limit on entries in diff'pair twin_panel
gernotbelger
parents: 8852
diff changeset
67 this.msgMaxCount = msgMaxCount;
af73fdd96920 Title current/historical diff pair; limit on entries in diff'pair twin_panel
gernotbelger
parents: 8852
diff changeset
68 this.maxCount = maxCount;
899
6e678b5d08a4 New widget for future use.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
69 this.grid = grid;
6e678b5d08a4 New widget for future use.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
70
9133
af73fdd96920 Title current/historical diff pair; limit on entries in diff'pair twin_panel
gernotbelger
parents: 8852
diff changeset
71 final HLayout hLayout = new HLayout();
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 9133
diff changeset
72
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 9133
diff changeset
73 this.firstDatacageWidget = new DatacageWidget(leftData);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 9133
diff changeset
74 this.secondDatacageWidget = new DatacageWidget(rightData);
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 9133
diff changeset
75
9133
af73fdd96920 Title current/historical diff pair; limit on entries in diff'pair twin_panel
gernotbelger
parents: 8852
diff changeset
76 this.firstDatacageWidget.setIsMutliSelectable(false);
af73fdd96920 Title current/historical diff pair; limit on entries in diff'pair twin_panel
gernotbelger
parents: 8852
diff changeset
77 this.secondDatacageWidget.setIsMutliSelectable(false);
899
6e678b5d08a4 New widget for future use.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
78
9133
af73fdd96920 Title current/historical diff pair; limit on entries in diff'pair twin_panel
gernotbelger
parents: 8852
diff changeset
79 hLayout.addMember(this.firstDatacageWidget);
af73fdd96920 Title current/historical diff pair; limit on entries in diff'pair twin_panel
gernotbelger
parents: 8852
diff changeset
80 hLayout.addMember(this.secondDatacageWidget);
899
6e678b5d08a4 New widget for future use.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
81
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
82 final HLayout toolbarLayout = new HLayout();
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
83 toolbarLayout.setAutoHeight();
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
84
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
85 final Button plusBtn = new Button(MSG.datacage_add_pair());
3533
a4b2220e59a6 Change button title in DatacagePairWidget (#746).
Christian Lins <christian.lins@intevation.de>
parents: 2905
diff changeset
86 plusBtn.setAutoFit(true);
899
6e678b5d08a4 New widget for future use.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
87 plusBtn.addClickHandler(new ClickHandler() {
6e678b5d08a4 New widget for future use.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
88 @Override
9133
af73fdd96920 Title current/historical diff pair; limit on entries in diff'pair twin_panel
gernotbelger
parents: 8852
diff changeset
89 public void onClick(final ClickEvent event) {
899
6e678b5d08a4 New widget for future use.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
90 plusClicked();
6e678b5d08a4 New widget for future use.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
91 }
6e678b5d08a4 New widget for future use.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
92 });
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
93 toolbarLayout.addMember(plusBtn);
899
6e678b5d08a4 New widget for future use.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
94
6e678b5d08a4 New widget for future use.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
95 addMember(hLayout);
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
96 addMember(toolbarLayout);
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
97
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
98 controler.setup(this.firstDatacageWidget, this.secondDatacageWidget, toolbarLayout);
899
6e678b5d08a4 New widget for future use.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
99 }
6e678b5d08a4 New widget for future use.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
100
6e678b5d08a4 New widget for future use.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
101 /**
6e678b5d08a4 New widget for future use.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
102 * Callback for add-button.
6e678b5d08a4 New widget for future use.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
103 * Fires to load for every selected element and handler.
6e678b5d08a4 New widget for future use.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
104 */
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
105 protected final void plusClicked() {
9133
af73fdd96920 Title current/historical diff pair; limit on entries in diff'pair twin_panel
gernotbelger
parents: 8852
diff changeset
106 final ToLoad toLoad1 = this.firstDatacageWidget.getSelection();
af73fdd96920 Title current/historical diff pair; limit on entries in diff'pair twin_panel
gernotbelger
parents: 8852
diff changeset
107 final ToLoad toLoad2 = this.secondDatacageWidget.getSelection();
899
6e678b5d08a4 New widget for future use.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
108
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 9133
diff changeset
109 // FIXME: allows to select folders... but it should not
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 9133
diff changeset
110
9133
af73fdd96920 Title current/historical diff pair; limit on entries in diff'pair twin_panel
gernotbelger
parents: 8852
diff changeset
111 if (toLoad1 == null || toLoad2 == null || toLoad1.toRecommendations().isEmpty() || toLoad2.toRecommendations().isEmpty()) {
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 9220
diff changeset
112 SC.say(MSG.warning_select_two_values());
9133
af73fdd96920 Title current/historical diff pair; limit on entries in diff'pair twin_panel
gernotbelger
parents: 8852
diff changeset
113 return;
af73fdd96920 Title current/historical diff pair; limit on entries in diff'pair twin_panel
gernotbelger
parents: 8852
diff changeset
114 }
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 9133
diff changeset
115
9133
af73fdd96920 Title current/historical diff pair; limit on entries in diff'pair twin_panel
gernotbelger
parents: 8852
diff changeset
116 if (this.grid.getTotalRows() >= this.maxCount) {
af73fdd96920 Title current/historical diff pair; limit on entries in diff'pair twin_panel
gernotbelger
parents: 8852
diff changeset
117 SC.say(this.msgMaxCount);
899
6e678b5d08a4 New widget for future use.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
118 return;
6e678b5d08a4 New widget for future use.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
119 }
6e678b5d08a4 New widget for future use.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
120
9133
af73fdd96920 Title current/historical diff pair; limit on entries in diff'pair twin_panel
gernotbelger
parents: 8852
diff changeset
121 this.grid.addData(new RecommendationPairRecord(toLoad1.toRecommendations().get(0), toLoad2.toRecommendations().get(0)));
899
6e678b5d08a4 New widget for future use.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
122 }
9220
e3c2ae1887e8 Allow to filter contents of datacage on client side.
gernotbelger
parents: 9133
diff changeset
123 }

http://dive4elements.wald.intevation.org