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 }

http://dive4elements.wald.intevation.org