Mercurial > dive4elements > river
comparison gwt-client/src/main/java/org/dive4elements/river/client/client/ui/sinfo/FloodInfrastructurePanel.java @ 9624:02ca823ec9c6
zu Pos 20 Nachtrag; infrastructureChoice
author | dnt_bjoernsen <d.tironi@bjoernsen.de> |
---|---|
date | Fri, 11 Oct 2019 18:30:36 +0200 |
parents | 8ed6c45136fa |
children |
comparison
equal
deleted
inserted
replaced
9623:677ff7ed9a60 | 9624:02ca823ec9c6 |
---|---|
19 import org.dive4elements.river.client.shared.model.Data; | 19 import org.dive4elements.river.client.shared.model.Data; |
20 import org.dive4elements.river.client.shared.model.DataItem; | 20 import org.dive4elements.river.client.shared.model.DataItem; |
21 import org.dive4elements.river.client.shared.model.DataList; | 21 import org.dive4elements.river.client.shared.model.DataList; |
22 import org.dive4elements.river.client.shared.model.DefaultData; | 22 import org.dive4elements.river.client.shared.model.DefaultData; |
23 import org.dive4elements.river.client.shared.model.DefaultDataItem; | 23 import org.dive4elements.river.client.shared.model.DefaultDataItem; |
24 import org.dive4elements.river.client.shared.model.InfrastructureServerClientXChange; | |
25 import org.dive4elements.river.client.shared.model.InfrastructureServerClientXChange.Element; | |
24 import org.dive4elements.river.client.shared.model.User; | 26 import org.dive4elements.river.client.shared.model.User; |
25 import org.dive4elements.river.client.shared.model.VegetationZoneServerClientXChange; | |
26 | 27 |
27 import com.google.gwt.core.client.GWT; | 28 import com.google.gwt.core.client.GWT; |
28 import com.smartgwt.client.types.ListGridFieldType; | 29 import com.smartgwt.client.types.ListGridFieldType; |
29 import com.smartgwt.client.util.SC; | 30 import com.smartgwt.client.util.SC; |
30 import com.smartgwt.client.widgets.Button; | 31 import com.smartgwt.client.widgets.Button; |
31 import com.smartgwt.client.widgets.Canvas; | 32 import com.smartgwt.client.widgets.Canvas; |
32 import com.smartgwt.client.widgets.Label; | 33 import com.smartgwt.client.widgets.Label; |
33 import com.smartgwt.client.widgets.events.ClickEvent; | 34 import com.smartgwt.client.widgets.events.ClickEvent; |
34 import com.smartgwt.client.widgets.events.ClickHandler; | 35 import com.smartgwt.client.widgets.events.ClickHandler; |
35 import com.smartgwt.client.widgets.form.DynamicForm; | |
36 import com.smartgwt.client.widgets.form.fields.ColorItem; | |
37 import com.smartgwt.client.widgets.grid.ListGrid; | 36 import com.smartgwt.client.widgets.grid.ListGrid; |
38 import com.smartgwt.client.widgets.grid.ListGridField; | 37 import com.smartgwt.client.widgets.grid.ListGridField; |
39 import com.smartgwt.client.widgets.grid.ListGridRecord; | 38 import com.smartgwt.client.widgets.grid.ListGridRecord; |
40 import com.smartgwt.client.widgets.grid.events.CellSavedEvent; | |
41 import com.smartgwt.client.widgets.grid.events.CellSavedHandler; | |
42 import com.smartgwt.client.widgets.grid.events.RecordClickEvent; | 39 import com.smartgwt.client.widgets.grid.events.RecordClickEvent; |
43 import com.smartgwt.client.widgets.grid.events.RecordClickHandler; | 40 import com.smartgwt.client.widgets.grid.events.RecordClickHandler; |
44 import com.smartgwt.client.widgets.layout.HLayout; | 41 import com.smartgwt.client.widgets.layout.HLayout; |
45 import com.smartgwt.client.widgets.layout.Layout; | 42 import com.smartgwt.client.widgets.layout.Layout; |
46 import com.smartgwt.client.widgets.layout.VLayout; | 43 import com.smartgwt.client.widgets.layout.VLayout; |
52 */ | 49 */ |
53 public class FloodInfrastructurePanel extends AbstractUIProvider { | 50 public class FloodInfrastructurePanel extends AbstractUIProvider { |
54 private static final long serialVersionUID = 1L; | 51 private static final long serialVersionUID = 1L; |
55 | 52 |
56 private static final String datakey = "flood_infrastructure"; | 53 private static final String datakey = "flood_infrastructure"; |
57 final protected List<ListGridRecord> records = new ArrayList<ListGridRecord>(); | |
58 private ListGrid elements = new ListGrid(); | 54 private ListGrid elements = new ListGrid(); |
59 | 55 |
60 private final User m_user; | 56 private final User m_user; |
57 | |
58 private final InfrastructureServerClientXChange xchangeHelper = new InfrastructureServerClientXChange(); | |
59 | |
60 private Button submit; | |
61 | 61 |
62 public FloodInfrastructurePanel(final User user) { | 62 public FloodInfrastructurePanel(final User user) { |
63 this.m_user = user; | 63 this.m_user = user; |
64 } | 64 } |
65 | 65 |
66 protected final ListGrid createTable(final Layout root, final DataList data, final String width, final boolean editable) { | 66 protected final ListGrid createTable(final Layout root, final DataList data, final String width) { |
67 | 67 |
68 final Label title = new Label(data.get(0).getDescription()); | 68 final Label title = new Label(data.get(0).getDescription()); |
69 title.setHeight("35px"); | 69 title.setHeight("35px"); |
70 | 70 |
71 this.elements.setWidth(width); | 71 this.elements.setWidth(width); |
74 this.elements.setCanReorderFields(false); | 74 this.elements.setCanReorderFields(false); |
75 this.elements.setCanSort(true); | 75 this.elements.setCanSort(true); |
76 this.elements.setSortField("to"); | 76 this.elements.setSortField("to"); |
77 this.elements.setCanResizeFields(false); | 77 this.elements.setCanResizeFields(false); |
78 | 78 |
79 this.elements.setCanEdit(editable); | 79 this.elements.setCanEdit(false); |
80 | 80 |
81 final ListGridField internalNumber = new ListGridField("number", "number"); // valid only if no data is to be added | 81 final ListGridField groupIdField = new ListGridField("group_id", "groupId"); |
82 internalNumber.setCanSort(false); | 82 groupIdField.setHidden(true); |
83 internalNumber.setHidden(true); | 83 |
84 | 84 final ListGridField groupField = createField("group_label", "Infrastruktur BWaStr");// this.MSG.uinfo_vegetation_zones_label()); |
85 final ListGridField infrstrField = new ListGridField("infrstr", "Infrastruktur BWaStr");// this.MSG.uinfo_vegetation_zones_label()); | 85 |
86 infrstrField.setType(ListGridFieldType.TEXT); | 86 final ListGridField typeIdField = new ListGridField("type_id", "typeId"); |
87 infrstrField.setWidth("*"); // 245 | 87 typeIdField.setHidden(true); |
88 infrstrField.setCanSort(false); | 88 |
89 infrstrField.setCanDragResize(true); | 89 final ListGridField typeField = createField("type_label", "Typ/Bezeichnung");// this.MSG.uinfo_vegetation_zones_label()); |
90 infrstrField.setCanEdit(true); // neue Anforderung - doch nicht? ??? | |
91 | |
92 final ListGridField fromField = new ListGridField("type", "Typ/Bezeichnung"); // VegZonePanelHelper.createIntTableField("from", | |
93 // this.MSG.uinfo_vegetation_zones_from(), true, | |
94 // getNormalizer(), getValidator() | |
95 // ); | |
96 fromField.addCellSavedHandler(new CellSavedHandler() { | |
97 @Override | |
98 public void onCellSaved(final CellSavedEvent event) { | |
99 // updateValidationMsgLabel(); | |
100 } | |
101 }); | |
102 | |
103 fromField.setCanEdit(false); | |
104 | 90 |
105 final ListGridField removeField = PanelHelper.createRemoveField(this.elements, GWT.getHostPageBaseURL() + this.MSG.removeFeature()); | 91 final ListGridField removeField = PanelHelper.createRemoveField(this.elements, GWT.getHostPageBaseURL() + this.MSG.removeFeature()); |
106 this.elements.addRecordClickHandler(new RecordClickHandler() { // adding another custom record-Remove-Handler which is not included in the | 92 this.elements.addRecordClickHandler(new RecordClickHandler() { // adding another custom record-Remove-Handler which is not included in the |
107 // Panelhelper TODO: MERGE WITH SupraRegionalPanel!! | |
108 @Override | 93 @Override |
109 public void onRecordClick(final RecordClickEvent event) { | 94 public void onRecordClick(final RecordClickEvent event) { |
110 if (event.getField().getName().equals(removeField.getName())) { | 95 if (event.getField().getName().equals(removeField.getName())) { |
111 // updateValidationMsgLabel(); | 96 final ListGridRecord r = event.getRecord(); |
97 final Element infrastr = new Element(r.getAttribute("group_id"), r.getAttribute("group_label"), r.getAttribute("type_id"), | |
98 r.getAttribute("type_label")); | |
99 FloodInfrastructurePanel.this.xchangeHelper.removeObject(infrastr); | |
100 | |
101 validateInput(); | |
112 } | 102 } |
113 } | 103 } |
114 }); | 104 }); |
115 this.elements.setFields(infrstrField, fromField, removeField); | 105 this.elements.setFields(groupIdField, groupField, typeIdField, typeField, removeField); |
116 | 106 |
117 root.setWidth(width); | 107 root.setWidth(width); |
118 root.addMember(title); | 108 root.addMember(title); |
119 root.addMember(this.elements); | 109 root.addMember(this.elements); |
120 root.addMember(PanelHelper.getSpacer(3)); | 110 root.addMember(PanelHelper.getSpacer(3)); |
121 root.addMember(PanelHelper.getSpacer(3)); | 111 root.addMember(PanelHelper.getSpacer(3)); |
122 return this.elements; | 112 return this.elements; |
123 | 113 } |
114 | |
115 private ListGridField createField(final String id, final String label) { | |
116 final ListGridField field = new ListGridField(id, label);// this.MSG.uinfo_vegetation_zones_label()); | |
117 field.setType(ListGridFieldType.TEXT); | |
118 field.setWidth("*"); // 245 | |
119 field.setCanSort(false); | |
120 field.setCanDragResize(true); | |
121 field.setCanEdit(false); | |
122 return field; | |
124 } | 123 } |
125 | 124 |
126 @Override | 125 @Override |
127 public final VLayout create(final DataList data) { | 126 public final VLayout create(final DataList data) { |
128 final VLayout layout = new VLayout(); | 127 final VLayout layout = new VLayout(); |
129 | 128 |
129 final List<Data> items = data.getAll(); | |
130 final Data str = getData(items, datakey); | |
131 final DataItem[] strItems = str.getItems(); | |
132 if (strItems.length > 0) | |
133 this.xchangeHelper.parseAndAdd(strItems[0].getStringValue()); | |
134 | |
130 final Canvas helper = createHelper(data); | 135 final Canvas helper = createHelper(data); |
131 if (helper != null) | 136 if (helper != null) |
132 this.helperContainer.addMember(helper); | 137 this.helperContainer.addMember(helper); |
133 | 138 |
134 final Canvas submit = getNextButton(); | 139 this.submit = (Button) getNextButton(); |
135 | 140 |
136 final VLayout root = new VLayout(); | 141 final VLayout root = new VLayout(); |
137 root.setWidth(450); | 142 root.setWidth(450); |
138 createWidget(root, data); | 143 createWidget(root, data); |
139 | 144 |
140 layout.addMember(root); | 145 layout.addMember(root); |
141 layout.addMember(submit); | 146 layout.addMember(this.submit); |
142 | |
143 // updateValidationMsgLabel();// init Text | |
144 | 147 |
145 return layout; | 148 return layout; |
146 } | 149 } |
147 | 150 |
148 protected Canvas createHelper(final DataList dataList) { | 151 private void validateInput() { |
149 | 152 if (this.xchangeHelper.getItems().size() > 0) |
150 final DatacageWidgetData data = new DatacageWidgetData(this.artifact, this.m_user, "uinfo.inundation_duration.vegZoneSelect", "load-system:true", | 153 this.submit.enable(); |
151 false); | 154 else |
155 this.submit.disable(); | |
156 } | |
157 | |
158 private Canvas createHelper(final DataList dataList) { | |
159 | |
160 final DatacageWidgetData data = new DatacageWidgetData(this.artifact, this.m_user, "sinfo_floodduration_infrastructures", "load-system:true", false); | |
152 | 161 |
153 final DatacageWidget datacage = new DatacageWidget(data); | 162 final DatacageWidget datacage = new DatacageWidget(data); |
154 | 163 |
155 final Button plusBtn = new Button("Hinzufügen"); // this.MSG.uinfo_inundation_duration_set_vegetation_zone() | 164 final Button plusBtn = new Button("Hinzufügen"); // this.MSG.uinfo_inundation_duration_set_vegetation_zone() |
156 plusBtn.addClickHandler(new ClickHandler() { | 165 plusBtn.addClickHandler(new ClickHandler() { |
168 } | 177 } |
169 | 178 |
170 private void handlePlusClicked(final DatacageWidget datacage) { | 179 private void handlePlusClicked(final DatacageWidget datacage) { |
171 final List<TreeNode> selection = datacage.getPlainSelection(); | 180 final List<TreeNode> selection = datacage.getPlainSelection(); |
172 if (selection == null || selection.isEmpty()) { | 181 if (selection == null || selection.isEmpty()) { |
173 SC.say("VegetationzonesTablePanel.this.MSG.warning()"); | 182 SC.say(FloodInfrastructurePanel.this.MSG.warning()); |
174 return; | 183 return; |
175 } | 184 } |
176 | 185 |
177 final TreeNode selectedNode = selection.get(0); | 186 for (final TreeNode selectedNode : selection) { |
178 | 187 final String groupId = selectedNode.getAttribute("group_id"); // node-names from meta-data.xml |
179 /* | 188 final String groupLabel = selectedNode.getAttribute("group_label"); |
180 * the encoded veg-zones is either in 'data' or 'ids'. We need both, because we have the cases of stadnard vegzones and | 189 final String typeId = selectedNode.getAttribute("type_id"); |
181 * user-defined vegzones. | 190 final String typeLabel = selectedNode.getAttribute("type_label"); |
182 */ | 191 |
183 final String dataAttribute = selectedNode.getAttribute("data"); | 192 if (isEmpty(groupId) || isEmpty(groupLabel) || isEmpty(typeId) || isEmpty(typeLabel)) |
184 final String idsAttribute = selectedNode.getAttribute("ids"); | 193 continue; |
185 final String vegZoneData = (dataAttribute == null || dataAttribute.trim().length() == 0) ? idsAttribute : dataAttribute; | 194 |
186 | 195 final InfrastructureServerClientXChange.Element infrastr = new InfrastructureServerClientXChange.Element(groupId, groupLabel, typeId, typeLabel); |
187 // for (final ListGridRecord r : this.elements.getRecords()) { | 196 if (this.xchangeHelper.containsObject(infrastr)) |
188 // this.elements.removeData(r); | 197 continue; |
189 // } | 198 |
190 // final List<VegetationZoneServerClientXChange> rows = VegetationZoneServerClientXChange.parse(data); | 199 this.xchangeHelper.addObject(infrastr); |
191 // for (final VegetationZoneServerClientXChange row : rows) { | 200 |
192 // this.elements.addData(createEntry(row)); | 201 this.elements.addData(createEntry(infrastr)); |
193 // } | 202 } |
194 | 203 validateInput(); |
195 } | 204 } |
196 | 205 |
197 public final ListGridRecord createEntry(final VegetationZoneServerClientXChange row) { | 206 private boolean isEmpty(final String test) { |
198 | 207 if (test == null) |
199 final String vegzone = row.getZoneName(); | 208 return true; |
200 final Integer from = row.getMin_day_overflow(); | 209 if (test.trim().equals("")) |
201 final Integer to = row.getMax_day_overflow(); | 210 return true; |
202 final String colorStr = row.getHexColor(); | 211 return false; |
203 | 212 } |
204 if (vegzone == null) | 213 |
205 return null; | 214 public final ListGridRecord createEntry(final InfrastructureServerClientXChange.Element row) { |
206 | |
207 final ListGridRecord r = new ListGridRecord(); | 215 final ListGridRecord r = new ListGridRecord(); |
208 r.setAttribute("vegzone", vegzone); | 216 r.setAttribute("group_id", row.getGroupId()); |
209 r.setAttribute("from", from); | 217 r.setAttribute("group_label", row.getGroupLabel()); |
210 r.setAttribute("to", to); | 218 r.setAttribute("type_id", row.getTypeId()); |
211 r.setAttribute("color", colorStr); | 219 r.setAttribute("type_label", row.getTypeLabel()); |
212 r.setAttribute("number", this.records.size()); | |
213 this.records.add(r); | |
214 return r; | 220 return r; |
215 | |
216 } | 221 } |
217 | 222 |
218 public void createWidget(final Layout root, final DataList data) { | 223 public void createWidget(final Layout root, final DataList data) { |
219 | 224 |
220 this.elements = createTable(root, data, "420", true); | 225 this.elements = createTable(root, data, "420"); |
221 | 226 |
222 // this.vegzone = PanelHelper.createItem("uinfo_vegetation_zone_label", this.MSG.uinfo_vegetation_zone_label(), "*"); | 227 for (final Element item : this.xchangeHelper.getItems()) |
223 // this.vegzone.setColSpan(4); | 228 this.elements.addData(createEntry(item)); |
224 // this.start = PanelHelper.createIntegerItem("uinfo_vegetation_zones_from", this.MSG.uinfo_vegetation_zones_from(), | 229 validateInput(); |
225 // "*"); | |
226 // this.end = PanelHelper.createIntegerItem("uinfo_vegetation_zones_to", this.MSG.uinfo_vegetation_zones_to(), "*"); | |
227 final VLayout fields = new VLayout(); | |
228 | |
229 final ColorItem colorPicker = new ColorItem(); | |
230 colorPicker.setTitle(this.MSG.uinfo_vegetation_zone_color()); | |
231 | |
232 colorPicker.setShowTitle(true); | |
233 colorPicker.setShowValueIconOnly(false); | |
234 colorPicker.setShowPickerIcon(true); | |
235 colorPicker.setColSpan(2); | |
236 colorPicker.setWidth(110); | |
237 | |
238 final Button add = new Button(this.MSG.add_date()); // TODO: make key more generic or change to more specific | |
239 | |
240 final DynamicForm form1 = new DynamicForm(); | |
241 | |
242 form1.setNumCols(5); // für Layout untereinander muss 2 eingestellt werden | |
243 // form1.setFields(this.vegzone, this.start, this.end, colorPicker); | |
244 | |
245 fields.addMember(form1); | |
246 root.addMember(fields); | |
247 root.addMember(PanelHelper.getSpacer(10)); | |
248 } | 230 } |
249 | 231 |
250 @Override | 232 @Override |
251 public Canvas createOld(final DataList dataList) { | 233 public Canvas createOld(final DataList dataList) { |
252 final HLayout layout = new HLayout(); | 234 final HLayout layout = new HLayout(); |
259 | 241 |
260 final List<Data> items = dataList.getAll(); | 242 final List<Data> items = dataList.getAll(); |
261 final Data str = getData(items, datakey); | 243 final Data str = getData(items, datakey); |
262 final DataItem[] strItems = str.getItems(); | 244 final DataItem[] strItems = str.getItems(); |
263 | 245 |
264 // for (final VegetationZoneServerClientXChange entry : entries) { | 246 final List<Element> items1 = InfrastructureServerClientXChange.parse(strItems[0].getStringValue()); |
265 final Label dateLabel = new Label("zone ( asfd - asdf )"); | 247 |
248 final StringBuilder builder = new StringBuilder(); | |
249 | |
250 for (final Element infrastr : items1) { | |
251 builder.append(infrastr.getGroupLabel()).append(" - ").append(infrastr.getTypeLabel()).append("; "); | |
252 } | |
253 if (builder.length() > 1) | |
254 builder.deleteCharAt(builder.length() - 2); | |
255 else | |
256 builder.append(" - keine Auswahl - (will never appear because the workflow is being disabled when the table is empty) "); | |
257 final Label dateLabel = new Label(builder.toString()); | |
266 dateLabel.setHeight("20px"); | 258 dateLabel.setHeight("20px"); |
267 vLayout.addMember(dateLabel); | 259 vLayout.addMember(dateLabel); |
268 | 260 |
269 final Canvas back = getBackButton(dataList.getState()); | 261 final Canvas back = getBackButton(dataList.getState()); |
270 layout.addMember(label); | 262 layout.addMember(label); |
278 protected final Data[] getData() { | 270 protected final Data[] getData() { |
279 final List<Data> data = new ArrayList<Data>(); | 271 final List<Data> data = new ArrayList<Data>(); |
280 | 272 |
281 final ListGridRecord[] lgr = this.elements.getRecords(); | 273 final ListGridRecord[] lgr = this.elements.getRecords(); |
282 if (lgr.length == 0) { | 274 if (lgr.length == 0) { |
283 // return new Data[0]; // TODO: Klären, ob Vegetationszonen-Auswahl Pflicht ist, ob es ein Fallback geben soll usw. | 275 } |
284 } | 276 final String dataStr = this.xchangeHelper.parseListToDataString(); |
285 | 277 |
286 final DataItem item = new DefaultDataItem(datakey, null, "VegetationZoneServerClientXChange.parseListToDataString(getZones(lgr))"); // DATA-key | 278 final DataItem item = new DefaultDataItem(datakey, null, |
279 dataStr.equals("") ? "Non-Empty Value -> createOld would be called (not necessary, because workflow is disabled when table is empty)" | |
280 : dataStr); | |
287 data.add(new DefaultData(datakey, null, null, new DataItem[] { item })); | 281 data.add(new DefaultData(datakey, null, null, new DataItem[] { item })); |
288 return data.toArray(new Data[data.size()]); | 282 return data.toArray(new Data[data.size()]); |
289 } | 283 } |
290 | 284 |
291 } | 285 } |