Mercurial > dive4elements > river
annotate gwt-client/src/main/java/org/dive4elements/river/client/client/ui/sinfo/WaterlevelSoundingSelectionController.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 | |
children | 082e8e808902 |
rev | line source |
---|---|
9227
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
1 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
2 * Software engineering by |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
3 * Björnsen Beratende Ingenieure GmbH |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
5 * |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
6 * This file is Free Software under the GNU AGPL (>=v3) |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
8 * documentation coming with Dive4Elements River for details. |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
9 */ |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
10 package org.dive4elements.river.client.client.ui.sinfo; |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
11 |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
12 import java.util.List; |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
13 |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
14 import org.dive4elements.river.client.client.FLYSConstants; |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
15 import org.dive4elements.river.client.client.ui.DatacagePairWidget.IDatacagePairControler; |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
16 import org.dive4elements.river.client.client.ui.DatacageWidget; |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
17 |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
18 import com.smartgwt.client.data.DataSource; |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
19 import com.smartgwt.client.data.DataSourceField; |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
20 import com.smartgwt.client.types.Alignment; |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
21 import com.smartgwt.client.types.FieldType; |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
22 import com.smartgwt.client.types.TitleOrientation; |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
23 import com.smartgwt.client.widgets.form.DynamicForm; |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
24 import com.smartgwt.client.widgets.form.events.ItemChangedEvent; |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
25 import com.smartgwt.client.widgets.form.events.ItemChangedHandler; |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
26 import com.smartgwt.client.widgets.grid.events.SelectionUpdatedEvent; |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
27 import com.smartgwt.client.widgets.grid.events.SelectionUpdatedHandler; |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
28 import com.smartgwt.client.widgets.layout.HLayout; |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
29 import com.smartgwt.client.widgets.tree.TreeNode; |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
30 |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
31 /** |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
32 * Implements special behavior when selecting soundings and waterlevels: datacage of waterlevels depends on selection of |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
33 * sounding. |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
34 * |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
35 * @author Gernot Belger |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
36 */ |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
37 final class WaterlevelSoundingSelectionController implements IDatacagePairControler { |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
38 |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
39 private static final String FIELD_INTELLIGENCE = "field_intelligence"; |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
40 |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
41 static final String ATTRIBUTE_YEAR = "year"; |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
42 |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
43 private final FLYSConstants msg; |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
44 |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
45 private boolean turnFilterOff; |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
46 |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
47 public WaterlevelSoundingSelectionController(final FLYSConstants msg) { |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
48 this.msg = msg; |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
49 } |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
50 |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
51 @Override |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
52 public void setup(final DatacageWidget soundingWidget, final DatacageWidget waterlevelWidget, final HLayout toolbarLayout) { |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
53 |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
54 soundingWidget.getTreeGrid().addSelectionUpdatedHandler(new SelectionUpdatedHandler() { |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
55 |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
56 @Override |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
57 public void onSelectionUpdated(final SelectionUpdatedEvent event) { |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
58 final List<TreeNode> selection = soundingWidget.getPlainSelection(); |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
59 handleSoundingChanged(waterlevelWidget, selection); |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
60 } |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
61 }); |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
62 |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
63 final DynamicForm form = createIntelligenCheckbox(); |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
64 toolbarLayout.addMember(form); |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
65 form.addItemChangedHandler(new ItemChangedHandler() { |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
66 |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
67 @Override |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
68 public void onItemChanged(final ItemChangedEvent event) { |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
69 final Boolean value = (Boolean) form.getValue(FIELD_INTELLIGENCE); |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
70 checkboxToggled(value); |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
71 handleSoundingChanged(waterlevelWidget, soundingWidget.getPlainSelection()); |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
72 } |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
73 }); |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
74 |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
75 /* init to current selection */ |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
76 handleSoundingChanged(waterlevelWidget, soundingWidget.getPlainSelection()); |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
77 } |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
78 |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
79 private DynamicForm createIntelligenCheckbox() { |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
80 |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
81 final DynamicForm form = new DynamicForm(); |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
82 form.setTitlePrefix(""); |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
83 form.setTitleSuffix(": "); |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
84 form.setTitleAlign(Alignment.LEFT); |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
85 form.setTitleOrientation(TitleOrientation.LEFT); |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
86 |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
87 final DataSourceField item = new DataSourceField(FIELD_INTELLIGENCE, FieldType.BOOLEAN); |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
88 item.setTitle(this.msg.sinfo_deactivate_intelligent_datacord()); |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
89 |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
90 final DataSource source = new DataSource(); |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
91 source.setFields(item); |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
92 form.setDataSource(source); |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
93 |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
94 form.setValue(FIELD_INTELLIGENCE, false); |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
95 |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
96 return form; |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
97 } |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
98 |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
99 protected final void checkboxToggled(final Boolean selected) { |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
100 this.turnFilterOff = selected == null ? false : selected; |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
101 } |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
102 |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
103 protected final void handleSoundingChanged(final DatacageWidget waterlevelWidget, final List<TreeNode> selection) { |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
104 |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
105 if (this.turnFilterOff) { |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
106 waterlevelWidget.setFilter(DatacageWidget.ACCEPT_ALL_FILTER); |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
107 waterlevelWidget.getTreeGrid().setEmptyMessage(this.msg.databasket_loading()); |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
108 return; |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
109 } |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
110 |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
111 // more than one should never happen, as the have single selection |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
112 final TreeNode soundingNode = selection.isEmpty() ? null : selection.get(0); |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
113 |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
114 if (soundingNode == null || soundingNode.getAttribute("factory") == null) { |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
115 waterlevelWidget.setFilter(DatacageWidget.ACCEPT_NONE_FILTER); |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
116 waterlevelWidget.getTreeGrid().setEmptyMessage(this.msg.sinfo_sounding_waterlevel_select_waterlevel()); |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
117 return; |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
118 } |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
119 |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
120 final Integer soundingYear = getYear(soundingNode); |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
121 |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
122 if (soundingYear == null) { |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
123 // should never happen, as we should only show soundings that actually have a year |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
124 waterlevelWidget.setFilter(DatacageWidget.ACCEPT_NONE_FILTER); |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
125 waterlevelWidget.getTreeGrid().setEmptyMessage("Der gewählte Wassrspiegel hat keine Informations zum Jahr"); |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
126 } else |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
127 waterlevelWidget.setFilter(new WaterlevelSoundingYearFilter(soundingYear)); |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
128 } |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
129 |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
130 private static Integer getYear(final TreeNode soundingNode) { |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
131 final String year = soundingNode.getAttribute(ATTRIBUTE_YEAR); |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
132 if (year == null || year.trim().isEmpty()) |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
133 return null; |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
134 |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
135 try { |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
136 return Integer.valueOf(year); |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
137 } |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
138 catch (final NumberFormatException e) { |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
139 e.printStackTrace(); |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
140 return null; |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
141 } |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
142 } |
84397da33d17
Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents:
diff
changeset
|
143 } |