Mercurial > dive4elements > river
comparison gwt-client/src/main/java/org/dive4elements/river/client/client/ui/sinfo/CollisionLoadYearPanel.java @ 9075:89740fe82196
Extract Table from Panel
author | gernotbelger |
---|---|
date | Fri, 18 May 2018 17:42:34 +0200 |
parents | 766890addcb2 |
children | 22d8928895a1 |
comparison
equal
deleted
inserted
replaced
9074:766890addcb2 | 9075:89740fe82196 |
---|---|
7 */ | 7 */ |
8 | 8 |
9 package org.dive4elements.river.client.client.ui.sinfo; | 9 package org.dive4elements.river.client.client.ui.sinfo; |
10 | 10 |
11 import java.util.ArrayList; | 11 import java.util.ArrayList; |
12 import java.util.HashMap; | |
13 import java.util.List; | 12 import java.util.List; |
14 import java.util.Map; | |
15 import java.util.Map.Entry; | |
16 import java.util.SortedMap; | |
17 import java.util.TreeMap; | |
18 | 13 |
19 import org.dive4elements.river.client.client.FLYSConstants; | 14 import org.dive4elements.river.client.client.FLYSConstants; |
20 import org.dive4elements.river.client.client.ui.AbstractUIProvider; | 15 import org.dive4elements.river.client.client.ui.AbstractUIProvider; |
21 import org.dive4elements.river.client.client.ui.ParameterMatrix.Column; | 16 import org.dive4elements.river.client.client.ui.TableHelper; |
17 import org.dive4elements.river.client.client.ui.TableHelper.IColumnClickHandler; | |
22 import org.dive4elements.river.client.shared.model.Data; | 18 import org.dive4elements.river.client.shared.model.Data; |
23 import org.dive4elements.river.client.shared.model.DataItem; | 19 import org.dive4elements.river.client.shared.model.DataItem; |
24 import org.dive4elements.river.client.shared.model.DataList; | 20 import org.dive4elements.river.client.shared.model.DataList; |
25 import org.dive4elements.river.client.shared.model.DefaultData; | 21 import org.dive4elements.river.client.shared.model.DefaultData; |
26 import org.dive4elements.river.client.shared.model.DefaultDataItem; | 22 import org.dive4elements.river.client.shared.model.DefaultDataItem; |
27 import org.dive4elements.river.client.shared.model.MultiAttributeData; | |
28 import org.dive4elements.river.client.shared.model.MultiDataItem; | |
29 | 23 |
30 import com.google.gwt.core.client.GWT; | 24 import com.google.gwt.core.client.GWT; |
31 import com.google.gwt.i18n.client.NumberFormat; | 25 import com.google.gwt.i18n.client.NumberFormat; |
32 import com.smartgwt.client.data.Record; | |
33 import com.smartgwt.client.types.Alignment; | |
34 import com.smartgwt.client.types.ListGridFieldType; | |
35 import com.smartgwt.client.widgets.Canvas; | 26 import com.smartgwt.client.widgets.Canvas; |
36 import com.smartgwt.client.widgets.Label; | 27 import com.smartgwt.client.widgets.Label; |
37 import com.smartgwt.client.widgets.form.DynamicForm; | 28 import com.smartgwt.client.widgets.form.DynamicForm; |
38 import com.smartgwt.client.widgets.form.fields.TextItem; | 29 import com.smartgwt.client.widgets.form.fields.TextItem; |
39 import com.smartgwt.client.widgets.form.validator.IsIntegerValidator; | 30 import com.smartgwt.client.widgets.form.validator.IsIntegerValidator; |
40 import com.smartgwt.client.widgets.grid.ListGrid; | 31 import com.smartgwt.client.widgets.grid.ListGrid; |
41 import com.smartgwt.client.widgets.grid.ListGridField; | |
42 import com.smartgwt.client.widgets.grid.events.RecordClickEvent; | |
43 import com.smartgwt.client.widgets.grid.events.RecordClickHandler; | |
44 import com.smartgwt.client.widgets.layout.HLayout; | 32 import com.smartgwt.client.widgets.layout.HLayout; |
45 import com.smartgwt.client.widgets.layout.VLayout; | 33 import com.smartgwt.client.widgets.layout.VLayout; |
46 | 34 |
47 public class CollisionLoadYearPanel extends AbstractUIProvider { | 35 public class CollisionLoadYearPanel extends AbstractUIProvider { |
48 | 36 |
49 public interface IColumnClickHandler { | |
50 void columnClicked(String value); | |
51 } | |
52 | |
53 private enum PinType { | |
54 none, from, to | |
55 } | |
56 | |
57 private final FLYSConstants MESSAGES = GWT.create(FLYSConstants.class); | 37 private final FLYSConstants MESSAGES = GWT.create(FLYSConstants.class); |
58 | 38 |
59 private TextItem yearsItem; | 39 private TextItem yearsItem; |
60 | 40 |
61 private final List<String> validYears = new ArrayList<String>(); | 41 private List<String> validYears = new ArrayList<String>(); |
62 | 42 |
63 private ListGrid table; | 43 private ListGrid table; |
64 | 44 |
65 public CollisionLoadYearPanel() { | 45 public CollisionLoadYearPanel() { |
66 } | 46 } |
95 } | 75 } |
96 | 76 |
97 @Override | 77 @Override |
98 public Canvas create(final DataList data) { | 78 public Canvas create(final DataList data) { |
99 final VLayout layout = new VLayout(); | 79 final VLayout layout = new VLayout(); |
80 final IColumnClickHandler fromHandler = new IColumnClickHandler() { // add to external class | |
100 | 81 |
101 final Canvas helper = createHelper(data); | 82 @Override |
83 public void columnClicked(final String value) { | |
84 appendYear(value); | |
85 } | |
86 }; | |
102 | 87 |
103 this.helperContainer.addMember(helper); | 88 final TableHelper helper = new TableHelper(data, "years", this.MSG, fromHandler); |
89 final Canvas table = helper.getTable(); | |
90 this.validYears = helper.getKeycolEntries(); | |
91 | |
92 this.helperContainer.addMember(table); | |
104 | 93 |
105 final Canvas submit = getNextButton(); | 94 final Canvas submit = getNextButton(); |
106 final Canvas widget = createWidget(data); | 95 final Canvas widget = createWidget(data); |
107 | 96 |
108 layout.addMember(widget); | 97 layout.addMember(widget); |
109 layout.addMember(submit); | 98 layout.addMember(submit); |
110 | 99 |
111 return layout; | 100 return layout; |
112 } | |
113 | |
114 private Canvas createHelper(final DataList dataList) { | |
115 this.table = new ListGrid(); | |
116 this.table.setShowHeaderContextMenu(false); | |
117 this.table.setWidth100(); | |
118 this.table.setShowRecordComponents(true); | |
119 this.table.setShowRecordComponentsByCell(true); | |
120 this.table.setHeight100(); | |
121 this.table.setEmptyMessage(this.MSG.empty_table()); | |
122 this.table.setCanReorderFields(false); | |
123 | |
124 final MultiAttributeData mData = findDefinition(dataList, "years"); | |
125 final Map<String, Map<String, String>> meta = mData.getMeta(); | |
126 | |
127 final Map<String, String> tableInfo = meta.get("meta_tableinfo"); | |
128 final String keyColumnName = tableInfo.get("keycol"); | |
129 | |
130 final IColumnClickHandler fromHandler = new IColumnClickHandler() { // add to external class | |
131 | |
132 @Override | |
133 public void columnClicked(final String value) { | |
134 appendYear(value); | |
135 } | |
136 }; | |
137 | |
138 final SortedMap<Integer, ListGridField> fields = new TreeMap<Integer, ListGridField>(); | |
139 | |
140 for (final Entry<String, Map<String, String>> entry : meta.entrySet()) { | |
141 | |
142 final String colName = entry.getKey(); | |
143 if (colName.startsWith("meta_")) | |
144 continue; | |
145 | |
146 final Map<String, String> values = entry.getValue(); | |
147 | |
148 final int order = Integer.parseInt(values.get("order")); | |
149 | |
150 final ListGridField field = createField(colName, keyColumnName, values, fromHandler); | |
151 | |
152 fields.put(order, field); | |
153 } | |
154 | |
155 for (final DataItem dataItem : mData.opts) { | |
156 final MultiDataItem item = (MultiDataItem) dataItem; | |
157 | |
158 final Map<String, String> valueMap = item.getValue(); | |
159 // final String columnName = mData.getLabel(); | |
160 final Record newRecord = new Record(); | |
161 for (final Entry<String, String> entry : valueMap.entrySet()) { | |
162 final String key = entry.getKey(); | |
163 final String value = entry.getValue(); | |
164 newRecord.setAttribute(key, value); | |
165 | |
166 if (key.equals(keyColumnName)) | |
167 this.validYears.add(value); | |
168 } | |
169 | |
170 this.table.addData(newRecord); | |
171 } | |
172 | |
173 this.table.setFields(fields.values().toArray(new ListGridField[fields.size()])); | |
174 | |
175 return this.table; | |
176 } | |
177 | |
178 private MultiAttributeData findDefinition(final DataList dataList, final String paranemterName) { | |
179 | |
180 for (final Data data : dataList.getAll()) { | |
181 | |
182 final String label = data.getLabel(); | |
183 if (label.equals(paranemterName) && data instanceof MultiAttributeData) | |
184 return (MultiAttributeData) data; | |
185 } | |
186 | |
187 return null; | |
188 } | |
189 | |
190 private ListGridField createField(final String colName, final String keyColumnName, final Map<String, String> values, | |
191 final IColumnClickHandler fromHandler) { | |
192 | |
193 final String translation = getMeta(values, "translation", colName); | |
194 | |
195 final ListGridField field = new ListGridField(colName, translation); | |
196 | |
197 final String width = getMeta(values, "width", "99"); | |
198 field.setWidth(width); | |
199 | |
200 final ListGridFieldType type = getMeta(values, "type", ListGridFieldType.TEXT, ListGridFieldType.class); | |
201 field.setType(type); | |
202 | |
203 final Alignment alignment = getMeta(values, "alignment", Alignment.LEFT, Alignment.class); | |
204 field.setAlign(alignment); | |
205 | |
206 final PinType pinType = getMeta(values, "pin", PinType.none, PinType.class); | |
207 switch (pinType) { | |
208 case from: { | |
209 final String baseUrl = GWT.getHostPageBaseURL(); | |
210 field.setCellIcon(baseUrl + this.MESSAGES.markerGreen()); | |
211 field.addRecordClickHandler(new RecordClickHandler() { | |
212 @Override | |
213 public void onRecordClick(final RecordClickEvent e) { | |
214 final Record r = e.getRecord(); | |
215 fromHandler.columnClicked(r.getAttribute(keyColumnName)); | |
216 } | |
217 }); | |
218 } | |
219 break; | |
220 | |
221 case to: | |
222 break; | |
223 | |
224 case none: | |
225 default: | |
226 break; | |
227 } | |
228 | |
229 return field; | |
230 } | |
231 | |
232 private String getMeta(final Map<String, String> values, final String key, final String defaultValue) { | |
233 | |
234 final String value = values.get(key); | |
235 if (value == null || value.isEmpty()) | |
236 return defaultValue; | |
237 | |
238 return value; | |
239 } | |
240 | |
241 private <TYPE extends Enum<TYPE>> TYPE getMeta(final Map<String, String> values, final String key, final TYPE defaultValue, final Class<TYPE> enumType) { | |
242 | |
243 final String value = values.get(key); | |
244 if (value == null || value.isEmpty()) | |
245 return defaultValue; | |
246 | |
247 try { | |
248 return Enum.valueOf(enumType, value); | |
249 } | |
250 catch (final Exception e) { | |
251 e.printStackTrace(); | |
252 return defaultValue; | |
253 } | |
254 } | |
255 | |
256 private Map<String, Column> columns; | |
257 private List<String> columnNames; | |
258 private List<String> valueNames; | |
259 private Map<String, List<String>> attributes; | |
260 private Map<String, List<String>> selected; | |
261 | |
262 public void addColumn(final MultiAttributeData options) { | |
263 GWT.log("Add Columns for MultiAttribute data"); | |
264 | |
265 this.columns = new HashMap<String, Column>(); | |
266 this.columnNames = new ArrayList<String>(); | |
267 this.valueNames = new ArrayList<String>(); | |
268 this.selected = new HashMap<String, List<String>>(); | |
269 this.attributes = new HashMap<String, List<String>>(); | |
270 | |
271 final String groupTitle = options.getLabel(); | |
272 | |
273 final Column col = new Column(groupTitle); | |
274 final DataItem[] items = options.getItems(); | |
275 | |
276 if (items == null) { | |
277 GWT.log("No items found in StringOptionsData '" + groupTitle + "'"); | |
278 return; | |
279 } | |
280 | |
281 final MultiDataItem mItem = (MultiDataItem) items[0]; | |
282 for (final Map.Entry<String, String> entry : mItem.getValue().entrySet()) { | |
283 if (entry.getKey().equals("art:value") || entry.getKey().equals("art:label")) { | |
284 continue; | |
285 } | |
286 this.attributes.put(entry.getKey(), new ArrayList<String>()); | |
287 } | |
288 for (final DataItem item : items) { | |
289 GWT.log("multidataitem: " + item.getLabel()); | |
290 final String title = item.getLabel(); | |
291 | |
292 if (this.valueNames.indexOf(title) < 0) { | |
293 this.valueNames.add(title); | |
294 } | |
295 final MultiDataItem mi = (MultiDataItem) item; | |
296 final Map<String, String> vs = mi.getValue(); | |
297 for (final Map.Entry<String, String> e : vs.entrySet()) { | |
298 if (e.getKey().equals("art:value") || e.getKey().equals("art:label")) { | |
299 continue; | |
300 } | |
301 final List<String> data = this.attributes.get(e.getKey()); | |
302 data.add(e.getValue()); | |
303 } | |
304 col.addValue(item.getLabel(), mi.getValue().get("art:value")); | |
305 } | |
306 | |
307 this.columnNames.add(groupTitle); | |
308 this.columns.put(groupTitle, col); | |
309 } | 101 } |
310 | 102 |
311 public Canvas createWidget(final DataList data) { | 103 public Canvas createWidget(final DataList data) { |
312 final VLayout layout = new VLayout(); | 104 final VLayout layout = new VLayout(); |
313 | 105 |