comparison gwt-client/src/main/java/org/dive4elements/river/client/client/ui/uinfo/AbstractVegZonesTablePanel.java @ 9118:431f1c269be5

Veg-Zone Table improved, State change data recovery;
author gernotbelger
date Mon, 04 Jun 2018 19:38:59 +0200
parents 31b3cae5de0d
children 36c80c7fd02f
comparison
equal deleted inserted replaced
9117:623b51bf03d7 9118:431f1c269be5
17 import org.dive4elements.river.client.shared.model.Data; 17 import org.dive4elements.river.client.shared.model.Data;
18 import org.dive4elements.river.client.shared.model.DataItem; 18 import org.dive4elements.river.client.shared.model.DataItem;
19 import org.dive4elements.river.client.shared.model.DataList; 19 import org.dive4elements.river.client.shared.model.DataList;
20 import org.dive4elements.river.client.shared.model.DefaultData; 20 import org.dive4elements.river.client.shared.model.DefaultData;
21 import org.dive4elements.river.client.shared.model.DefaultDataItem; 21 import org.dive4elements.river.client.shared.model.DefaultDataItem;
22 import org.dive4elements.river.client.shared.model.VegetationZone;
22 23
23 import com.google.gwt.core.client.GWT; 24 import com.google.gwt.core.client.GWT;
24 import com.smartgwt.client.data.Record; 25 import com.smartgwt.client.data.Record;
25 import com.smartgwt.client.types.Alignment; 26 import com.smartgwt.client.types.Alignment;
26 import com.smartgwt.client.types.ListGridFieldType; 27 import com.smartgwt.client.types.ListGridFieldType;
42 * 43 *
43 */ 44 */
44 public abstract class AbstractVegZonesTablePanel extends AbstractUIProvider { 45 public abstract class AbstractVegZonesTablePanel extends AbstractUIProvider {
45 private static final long serialVersionUID = 1L; 46 private static final long serialVersionUID = 1L;
46 47
47 private static final String TABLE_CELL_SEPARATOR = "TABLE_CELL_SEPARATOR";
48
49 private static final String TABLE_ROW_SEPARATOR = "TABLE_ROW_SEPARATOR";
50
51 private static final String datakey = "vegzones"; 48 private static final String datakey = "vegzones";
52 49
53 private final ListGrid elements = new ListGrid(); 50 private final ListGrid elements = new ListGrid();
54 51
55 // private final HLayout input = new HLayout(); 52 protected final ListGrid createTable(final Layout root, final DataList data, final String width, final boolean editable) {
56
57 protected final ListGrid createTable(final Layout root, final DataList data, final int width, final boolean editable) {
58 data.add(VegetationzonesTablePanel.getDummyData()); // TODO: GET REAL DATA!
59 53
60 final Label title = new Label(data.get(0).getDescription()); 54 final Label title = new Label(data.get(0).getDescription());
61 title.setHeight("35px"); // orig:25 55 title.setHeight("35px"); // orig:25
62 56
63 this.elements.setWidth(width); // 185 57 this.elements.setWidth(width); // 185
64 this.elements.setHeight(300); // 58 this.elements.setHeight(300); //
65 this.elements.setShowHeaderContextMenu(false); 59 this.elements.setShowHeaderContextMenu(false);
66 this.elements.setCanReorderFields(false); 60 this.elements.setCanReorderFields(false);
67 // this.elements.setCanSort(true); 61 this.elements.setCanSort(true);
62 this.elements.setSortField(1);
63 this.elements.setCanResizeFields(false);
68 64
69 this.elements.setCanEdit(editable); 65 this.elements.setCanEdit(editable);
70 66
71 final ListGridField vegzoneField = new ListGridField("vegzone", this.MSG.uinfo_vegetation_zones_label()); 67 final ListGridField vegzoneField = new ListGridField("vegzone", this.MSG.uinfo_vegetation_zones_label());
72 vegzoneField.setType(ListGridFieldType.TEXT); 68 vegzoneField.setType(ListGridFieldType.TEXT);
73 vegzoneField.setWidth(245); 69 vegzoneField.setWidth("*"); // 245
70 vegzoneField.setCanSort(false);
71 vegzoneField.setCanDragResize(true);
72
73 final ListGridField fromField = createIntTableField("from", this.MSG.uinfo_vegetation_zones_from(), true);
74
75 final ListGridField toField = createIntTableField("to", this.MSG.uinfo_vegetation_zones_to(), false);// nicht sortierbar nach "ÜFDauer bis"
76
77 if (editable) {
78 final ListGridField removeField = createRemoveField();
79 this.elements.setFields(vegzoneField, fromField, toField, removeField);
80 } else {
81 this.elements.setFields(vegzoneField, fromField, toField);
82 }
83
84 addDataInit(data);
85 root.setWidth(width);
86 root.addMember(title);
87 root.addMember(this.elements);
88 root.addMember(PanelHelper.getSpacer(10));
89
90 return this.elements;
91 }
92
93 private IntegerRangeValidator getValidator() {
94 final IntegerRangeValidator validator = new IntegerRangeValidator();
95 validator.setMin(0);
96 validator.setMax(365);
97 validator.setErrorMessage(this.MSG.uinfo_vegetation_zones_validation_range());
98 return validator;
99 }
100
101 private SortNormalizer getNormalizer() {
74 final SortNormalizer normalizer = new SortNormalizer() { 102 final SortNormalizer normalizer = new SortNormalizer() {
75 103
76 @Override 104 @Override
77 public Object normalize(final ListGridRecord record, final String fieldName) { 105 public Object normalize(final ListGridRecord record, final String fieldName) {
78 final String number = record.getAttribute(fieldName); 106 final String number = record.getAttribute(fieldName);
79 // String.format("%03d", number);// format.format(Integer.valueOf(number)); funktioniert hier leider nicht 107 // String.format("%03d", number);// format.format(Integer.valueOf(number)); funktioniert hier leider nicht
80 final String numberFormat = "000" + number; 108 final String numberFormat = "000" + number;
81 return numberFormat.substring(numberFormat.length() - 3); 109 return numberFormat.substring(numberFormat.length() - 3);
82 } 110 }
83 }; 111 };
84 final IntegerRangeValidator validator = new IntegerRangeValidator(); 112 return normalizer;
85 validator.setMin(0); 113 }
86 validator.setMax(365); 114
87 validator.setErrorMessage(this.MSG.uinfo_vegetation_zones_validation_range()); 115 private ListGridField createIntTableField(final String key, final String msg, final boolean canSort) {
88 116 final ListGridField intField = new ListGridField(key, msg);
89 final ListGridField fromField = new ListGridField("from", this.MSG.uinfo_vegetation_zones_from()); 117 intField.setType(ListGridFieldType.INTEGER);
90 fromField.setType(ListGridFieldType.INTEGER); 118 intField.setValidators(getValidator());
91 fromField.setCanSort(true); 119 intField.setWidth(90);
92 fromField.setSortNormalizer(normalizer); 120 intField.setAlign(Alignment.RIGHT);
93 fromField.setValidators(validator); 121 intField.setSortNormalizer(getNormalizer());
94 fromField.setWidth(80); 122 intField.setCanSort(canSort);
95 fromField.setAlign(Alignment.RIGHT); 123 intField.setCanDragResize(false);
96 124
97 final ListGridField toField = new ListGridField("to", this.MSG.uinfo_vegetation_zones_to()); 125 return intField;
98 toField.setType(ListGridFieldType.INTEGER);
99 toField.setValidators(validator);
100 toField.setWidth(80);
101 toField.setAlign(Alignment.RIGHT);
102 toField.setSortNormalizer(normalizer);
103
104 if (editable)
105
106 {
107 final ListGridField removeField = createRemoveField();
108 this.elements.setFields(vegzoneField, fromField, toField, removeField);
109
110 } else {
111 this.elements.setFields(vegzoneField, fromField, toField);
112 }
113
114 addDataInit(data);
115
116 root.addMember(title);
117 root.addMember(this.elements);
118 root.addMember(PanelHelper.getSpacer(10));
119
120 return this.elements;
121 } 126 }
122 127
123 private ListGridField createRemoveField() { 128 private ListGridField createRemoveField() {
124 129
125 final ListGridField removeField = new ListGridField("_removeRecord", "Remove Record") { 130 final ListGridField removeField = new ListGridField("_removeRecord", "Remove Record") {
130 setCanFilter(false); 135 setCanFilter(false);
131 setCanSort(false); 136 setCanSort(false);
132 setCanGroupBy(false); 137 setCanGroupBy(false);
133 setCanFreeze(false); 138 setCanFreeze(false);
134 setWidth(25); 139 setWidth(25);
140 setCanDragResize(false);
141 super.setCanToggle(false);
135 } 142 }
136 }; 143 };
137 144
138 this.elements.addRecordClickHandler(new RecordClickHandler() { 145 this.elements.addRecordClickHandler(new RecordClickHandler() {
139 @Override 146 @Override
153 160
154 private final void addDataInit(final DataList data) { 161 private final void addDataInit(final DataList data) {
155 for (final Data dataItemContainer : data.getAll()) { 162 for (final Data dataItemContainer : data.getAll()) {
156 if (dataItemContainer.getItems() != null) { 163 if (dataItemContainer.getItems() != null) {
157 for (final DataItem dataItem : dataItemContainer.getItems()) { 164 for (final DataItem dataItem : dataItemContainer.getItems()) {
158 if (dataItem.getStringValue() != null && dataItem.getStringValue().contains(TABLE_ROW_SEPARATOR)) { 165 if (dataItem.getStringValue() != null) {
159 166
160 final String[] rows = dataItem.getStringValue().split(TABLE_ROW_SEPARATOR); 167 final List<VegetationZone> rows = VegetationZone.parse(dataItem.getStringValue());
161 for (final String row : rows) { 168 for (final VegetationZone row : rows) {
162 this.elements.addData(createEntry(row)); 169 this.elements.addData(createEntry(row));
163 } 170 }
164 } 171 }
165 } 172 }
166 } 173 }
175 // this.helperContainer.addMember(helper); 182 // this.helperContainer.addMember(helper);
176 183
177 final Canvas submit = getNextButton(); 184 final Canvas submit = getNextButton();
178 185
179 final VLayout root = new VLayout(); 186 final VLayout root = new VLayout();
187 root.setWidth(450);
180 createWidget(root, data); 188 createWidget(root, data);
181 189
182 layout.addMember(root); 190 layout.addMember(root);
183 layout.addMember(submit); 191 layout.addMember(submit);
184 192
197 205
198 final List<Data> items = dataList.getAll(); 206 final List<Data> items = dataList.getAll();
199 final Data str = getData(items, datakey); 207 final Data str = getData(items, datakey);
200 final DataItem[] strItems = str.getItems(); 208 final DataItem[] strItems = str.getItems();
201 209
202 final String[] entries = strItems[0].getLabel().split(AbstractVegZonesTablePanel.TABLE_ROW_SEPARATOR); 210 final List<VegetationZone> entries = VegetationZone.parse(strItems[0].getLabel());
203 for (final String entry : entries) { 211
204 final String[] vals = entry.split(AbstractVegZonesTablePanel.TABLE_CELL_SEPARATOR); 212 for (final VegetationZone entry : entries) {
205 final Label dateLabel = new Label(vals[0] + " (" + vals[1] + "-" + vals[2] + ")"); 213 final Label dateLabel = new Label(entry.getZoneName() + " (" + entry.getMin_day_overflow() + "-" + entry.getMax_day_overflow() + ")");
206 dateLabel.setHeight(20); 214 dateLabel.setHeight(20);
207 vLayout.addMember(dateLabel); 215 vLayout.addMember(dateLabel);
208 } 216 }
209 final Canvas back = getBackButton(dataList.getState()); 217 final Canvas back = getBackButton(dataList.getState());
210 layout.addMember(label); 218 layout.addMember(label);
212 layout.addMember(back); 220 layout.addMember(back);
213 221
214 return layout; 222 return layout;
215 } 223 }
216 224
217 protected static final Data[] getDummyData() { 225 // protected static final Data[] getDataToAdd(final List<VegetationZone> list) {
218 final List<Data> data = new ArrayList<Data>(); 226 // final List<Data> data = new ArrayList<Data>();
219 227 // final String d = VegetationZone.parseListToDataString(list);
220 // TODO: move to messages 228 //
221 final String d = "Zonaler Wald" + TABLE_CELL_SEPARATOR + "0" + TABLE_CELL_SEPARATOR + "5" + TABLE_ROW_SEPARATOR// 229 // final DataItem item = new DefaultDataItem(datakey, "entryDescription", d);
222 + "Hartholzaue, trocken" + TABLE_CELL_SEPARATOR + "5" + TABLE_CELL_SEPARATOR + "40" + TABLE_ROW_SEPARATOR// 230 // data.add(new DefaultData(datakey, null, null, new DataItem[] { item }));
223 + "Hartholzaue, feucht" + TABLE_CELL_SEPARATOR + "40" + TABLE_CELL_SEPARATOR + "80" + TABLE_ROW_SEPARATOR// 231 // return data.toArray(new Data[data.size()]);
224 + "Silberweidenwald" + TABLE_CELL_SEPARATOR + "80" + TABLE_CELL_SEPARATOR + "140" + TABLE_ROW_SEPARATOR// 232 // }
225 + "Weidengebüsch" + TABLE_CELL_SEPARATOR + "140" + TABLE_CELL_SEPARATOR + "200" + TABLE_ROW_SEPARATOR//
226 + "Uferröhricht" + TABLE_CELL_SEPARATOR + "200" + TABLE_CELL_SEPARATOR + "260" + TABLE_ROW_SEPARATOR//
227 + "Uferpioniere" + TABLE_CELL_SEPARATOR + "260" + TABLE_CELL_SEPARATOR + "320" + TABLE_ROW_SEPARATOR//
228 + "Vegetationslos" + TABLE_CELL_SEPARATOR + "320" + TABLE_CELL_SEPARATOR + "365" + TABLE_ROW_SEPARATOR//
229 + "Wasserfläche" + TABLE_CELL_SEPARATOR + "365" + TABLE_CELL_SEPARATOR + "365" + TABLE_ROW_SEPARATOR;//
230
231 final DataItem item = new DefaultDataItem(datakey, "entryDescription", d); // DATA-key
232 data.add(new DefaultData(datakey, null, null, new DataItem[] { item }));
233 return data.toArray(new Data[data.size()]);
234 }
235 233
236 @Override 234 @Override
237 protected final Data[] getData() { 235 protected final Data[] getData() {
238 final List<Data> data = new ArrayList<Data>(); 236 final List<Data> data = new ArrayList<Data>();
239 237
240 final ListGridRecord[] lgr = this.elements.getRecords(); 238 final ListGridRecord[] lgr = this.elements.getRecords();
241 if (lgr.length == 0) { 239 if (lgr.length == 0) {
242 return getDummyData();// new Data[0]; // return getDummyData(); 240 return null; // getDataToAdd(VegetationZone.getStandardList());// new Data[0]; //SHOULD NOT HAPPEN
243 } 241 }
244 String d = ""; 242 final List<VegetationZone> zoneList = new ArrayList<VegetationZone>();
245 for (final ListGridRecord element : lgr) { 243 for (final ListGridRecord element : lgr) {
246 final Record r = element; 244 final Record r = element;
247 d += r.getAttribute("vegzone") + AbstractVegZonesTablePanel.TABLE_CELL_SEPARATOR + r.getAttribute("from") 245 final VegetationZone zone = VegetationZone.createFromTableEntry(r.getAttribute("vegzone"), r.getAttribute("from"), r.getAttribute("to"));
248 + AbstractVegZonesTablePanel.TABLE_CELL_SEPARATOR + r.getAttribute("to"); 246 zoneList.add(zone);
249 d += AbstractVegZonesTablePanel.TABLE_ROW_SEPARATOR; 247 }
250 } 248
251 249 final DataItem item = new DefaultDataItem(datakey, null, VegetationZone.parseListToDataString(zoneList)); // DATA-key
252 final DataItem item = new DefaultDataItem(datakey, null, d); // DATA-key
253 data.add(new DefaultData(datakey, null, null, new DataItem[] { item })); 250 data.add(new DefaultData(datakey, null, null, new DataItem[] { item }));
254 return data.toArray(new Data[data.size()]); 251 return data.toArray(new Data[data.size()]);
255 } 252 }
256 253
257 public final ListGridRecord createEntry(final String row) { 254 public final ListGridRecord createEntry(final VegetationZone row) {
258 255
259 if (row.contains(TABLE_CELL_SEPARATOR)) { 256 final String vegzone = row.getZoneName();
260 257 final Integer from = row.getMin_day_overflow();
261 final String[] vals = row.split(TABLE_CELL_SEPARATOR); 258 final Integer to = row.getMax_day_overflow();
262 if (vals.length == 3) { 259
263 final String vegzone = vals[0]; 260 if (vegzone == null || from == null || to == null) {
264 final String from = vals[1]; 261 return null;
265 final String to = vals[2]; 262 }
266 263
267 if (vegzone == null || from == null || to == null) { 264 final ListGridRecord r = new ListGridRecord();
268 return null; 265 r.setAttribute("vegzone", vegzone);
269 } 266 r.setAttribute("from", from);
270 267 r.setAttribute("to", to);
271 final ListGridRecord r = new ListGridRecord(); 268 return r;
272 r.setAttribute("vegzone", vegzone); 269
273 r.setAttribute("from", from);
274 r.setAttribute("to", to);
275 return r;
276
277 }
278
279 }
280 return null;
281 } 270 }
282 } 271 }

http://dive4elements.wald.intevation.org