comparison gwt-client/src/main/java/org/dive4elements/river/client/client/ui/sinfo/WaterlevelSoundingSelectionController.java @ 9231:082e8e808902

Finetuning intelligent waterlevel-sounding select. Soundings without year are never shown. All involed datacage elements are assumed to have a 'year' attribute
author gernotbelger
date Fri, 06 Jul 2018 13:09:25 +0200
parents 84397da33d17
children 83ef08b5e1ac
comparison
equal deleted inserted replaced
9230:6a1580b38e7d 9231:082e8e808902
12 import java.util.List; 12 import java.util.List;
13 13
14 import org.dive4elements.river.client.client.FLYSConstants; 14 import org.dive4elements.river.client.client.FLYSConstants;
15 import org.dive4elements.river.client.client.ui.DatacagePairWidget.IDatacagePairControler; 15 import org.dive4elements.river.client.client.ui.DatacagePairWidget.IDatacagePairControler;
16 import org.dive4elements.river.client.client.ui.DatacageWidget; 16 import org.dive4elements.river.client.client.ui.DatacageWidget;
17 import org.dive4elements.river.client.client.ui.DatacageWidget.DatacageFilter;
18 import org.dive4elements.river.client.shared.model.AttrList;
19 import org.dive4elements.river.client.shared.model.DataCageNode;
17 20
18 import com.smartgwt.client.data.DataSource; 21 import com.smartgwt.client.data.DataSource;
19 import com.smartgwt.client.data.DataSourceField; 22 import com.smartgwt.client.data.DataSourceField;
20 import com.smartgwt.client.types.Alignment; 23 import com.smartgwt.client.types.Alignment;
21 import com.smartgwt.client.types.FieldType; 24 import com.smartgwt.client.types.FieldType;
49 } 52 }
50 53
51 @Override 54 @Override
52 public void setup(final DatacageWidget soundingWidget, final DatacageWidget waterlevelWidget, final HLayout toolbarLayout) { 55 public void setup(final DatacageWidget soundingWidget, final DatacageWidget waterlevelWidget, final HLayout toolbarLayout) {
53 56
57 /* do not show ever any soundings that do not have a year */
58 soundingWidget.setFilter(new DatacageFilter() {
59 @Override
60 public boolean accept(final DataCageNode node) {
61
62 final AttrList attributes = node.getAttributes();
63 if (WaterlevelSoundingYearFilter.isFolder(attributes))
64 return true;
65
66 final String year = attributes.getValue(WaterlevelSoundingSelectionController.ATTRIBUTE_YEAR);
67
68 final Integer waterlevelYear = WaterlevelSoundingYearFilter.parseYear(year);
69 if (waterlevelYear == null) {
70 // should never happen, we should only show waterlevels that have a year
71 return false;
72 }
73
74 return true;
75 }
76 });
77
78 /* react to selections of a sounding */
54 soundingWidget.getTreeGrid().addSelectionUpdatedHandler(new SelectionUpdatedHandler() { 79 soundingWidget.getTreeGrid().addSelectionUpdatedHandler(new SelectionUpdatedHandler() {
55 80
56 @Override 81 @Override
57 public void onSelectionUpdated(final SelectionUpdatedEvent event) { 82 public void onSelectionUpdated(final SelectionUpdatedEvent event) {
58 final List<TreeNode> selection = soundingWidget.getPlainSelection(); 83 final List<TreeNode> selection = soundingWidget.getPlainSelection();
59 handleSoundingChanged(waterlevelWidget, selection); 84 handleSoundingChanged(waterlevelWidget, selection);
60 } 85 }
61 }); 86 });
62 87
88 /* check box to deactivate intellicence */
63 final DynamicForm form = createIntelligenCheckbox(); 89 final DynamicForm form = createIntelligenCheckbox();
64 toolbarLayout.addMember(form); 90 toolbarLayout.addMember(form);
65 form.addItemChangedHandler(new ItemChangedHandler() { 91 form.addItemChangedHandler(new ItemChangedHandler() {
66 92
67 @Override 93 @Override
70 checkboxToggled(value); 96 checkboxToggled(value);
71 handleSoundingChanged(waterlevelWidget, soundingWidget.getPlainSelection()); 97 handleSoundingChanged(waterlevelWidget, soundingWidget.getPlainSelection());
72 } 98 }
73 }); 99 });
74 100
75 /* init to current selection */ 101 /* initialize by applying the current selection */
76 handleSoundingChanged(waterlevelWidget, soundingWidget.getPlainSelection()); 102 handleSoundingChanged(waterlevelWidget, soundingWidget.getPlainSelection());
77 } 103 }
78 104
79 private DynamicForm createIntelligenCheckbox() { 105 private DynamicForm createIntelligenCheckbox() {
80 106
102 128
103 protected final void handleSoundingChanged(final DatacageWidget waterlevelWidget, final List<TreeNode> selection) { 129 protected final void handleSoundingChanged(final DatacageWidget waterlevelWidget, final List<TreeNode> selection) {
104 130
105 if (this.turnFilterOff) { 131 if (this.turnFilterOff) {
106 waterlevelWidget.setFilter(DatacageWidget.ACCEPT_ALL_FILTER); 132 waterlevelWidget.setFilter(DatacageWidget.ACCEPT_ALL_FILTER);
107 waterlevelWidget.getTreeGrid().setEmptyMessage(this.msg.databasket_loading()); 133 waterlevelWidget.getTreeGrid().setEmptyMessage(this.msg.databasket_empty());
108 return; 134 return;
109 } 135 }
110 136
111 // more than one should never happen, as the have single selection 137 // more than one should never happen, as the bedhhave single selection
112 final TreeNode soundingNode = selection.isEmpty() ? null : selection.get(0); 138 final TreeNode soundingNode = selection.isEmpty() ? null : selection.get(0);
113 139
114 if (soundingNode == null || soundingNode.getAttribute("factory") == null) { 140 if (soundingNode == null || soundingNode.getAttribute("factory") == null) {
115 waterlevelWidget.setFilter(DatacageWidget.ACCEPT_NONE_FILTER); 141 waterlevelWidget.setFilter(DatacageWidget.ACCEPT_NONE_FILTER);
116 waterlevelWidget.getTreeGrid().setEmptyMessage(this.msg.sinfo_sounding_waterlevel_select_waterlevel()); 142 waterlevelWidget.getTreeGrid().setEmptyMessage(this.msg.sinfo_sounding_waterlevel_select_waterlevel());
117 return; 143 return;
118 } 144 }
119 145
120 final Integer soundingYear = getYear(soundingNode); 146 final Integer soundingYear = WaterlevelSoundingYearFilter.parseYear(soundingNode.getAttribute(ATTRIBUTE_YEAR));
121 147
122 if (soundingYear == null) { 148 if (soundingYear == null) {
123 // should never happen, as we should only show soundings that actually have a year 149 // should never happen, as we should only show soundings that actually have a year
124 waterlevelWidget.setFilter(DatacageWidget.ACCEPT_NONE_FILTER); 150 waterlevelWidget.setFilter(DatacageWidget.ACCEPT_NONE_FILTER);
125 waterlevelWidget.getTreeGrid().setEmptyMessage("Der gewählte Wassrspiegel hat keine Informations zum Jahr"); 151 waterlevelWidget.getTreeGrid().setEmptyMessage("Die gewählte Peilung hat keine Informations zum Jahr");
126 } else 152 } else {
127 waterlevelWidget.setFilter(new WaterlevelSoundingYearFilter(soundingYear)); 153 waterlevelWidget.setFilter(new WaterlevelSoundingYearFilter(soundingYear));
128 } 154 waterlevelWidget.getTreeGrid().setEmptyMessage(this.msg.databasket_empty());
129
130 private static Integer getYear(final TreeNode soundingNode) {
131 final String year = soundingNode.getAttribute(ATTRIBUTE_YEAR);
132 if (year == null || year.trim().isEmpty())
133 return null;
134
135 try {
136 return Integer.valueOf(year);
137 }
138 catch (final NumberFormatException e) {
139 e.printStackTrace();
140 return null;
141 } 155 }
142 } 156 }
143 } 157 }

http://dive4elements.wald.intevation.org