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 }

http://dive4elements.wald.intevation.org