annotate gwt-client/src/main/java/org/dive4elements/river/client/client/ui/TableHelper.java @ 9075:89740fe82196

Extract Table from Panel
author gernotbelger
date Fri, 18 May 2018 17:42:34 +0200
parents 766890addcb2
children
rev   line source
9074
766890addcb2 state To client communication;
gernotbelger
parents:
diff changeset
1 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
766890addcb2 state To client communication;
gernotbelger
parents:
diff changeset
2 * Software engineering by
766890addcb2 state To client communication;
gernotbelger
parents:
diff changeset
3 * Björnsen Beratende Ingenieure GmbH
766890addcb2 state To client communication;
gernotbelger
parents:
diff changeset
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
766890addcb2 state To client communication;
gernotbelger
parents:
diff changeset
5 *
766890addcb2 state To client communication;
gernotbelger
parents:
diff changeset
6 * This file is Free Software under the GNU AGPL (>=v3)
766890addcb2 state To client communication;
gernotbelger
parents:
diff changeset
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the
766890addcb2 state To client communication;
gernotbelger
parents:
diff changeset
8 * documentation coming with Dive4Elements River for details.
766890addcb2 state To client communication;
gernotbelger
parents:
diff changeset
9 */
766890addcb2 state To client communication;
gernotbelger
parents:
diff changeset
10 package org.dive4elements.river.client.client.ui;
766890addcb2 state To client communication;
gernotbelger
parents:
diff changeset
11
9075
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
12 import java.util.ArrayList;
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
13 import java.util.List;
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
14 import java.util.Map;
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
15 import java.util.Map.Entry;
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
16 import java.util.SortedMap;
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
17 import java.util.TreeMap;
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
18
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
19 import org.dive4elements.river.client.client.FLYSConstants;
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
20 import org.dive4elements.river.client.shared.model.Data;
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
21 import org.dive4elements.river.client.shared.model.DataItem;
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
22 import org.dive4elements.river.client.shared.model.DataList;
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
23 import org.dive4elements.river.client.shared.model.MultiAttributeData;
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
24 import org.dive4elements.river.client.shared.model.MultiDataItem;
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
25
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
26 import com.google.gwt.core.client.GWT;
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
27 import com.smartgwt.client.data.Record;
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
28 import com.smartgwt.client.types.Alignment;
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
29 import com.smartgwt.client.types.ListGridFieldType;
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
30 import com.smartgwt.client.widgets.Canvas;
9074
766890addcb2 state To client communication;
gernotbelger
parents:
diff changeset
31 import com.smartgwt.client.widgets.grid.ListGrid;
9075
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
32 import com.smartgwt.client.widgets.grid.ListGridField;
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
33 import com.smartgwt.client.widgets.grid.events.RecordClickEvent;
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
34 import com.smartgwt.client.widgets.grid.events.RecordClickHandler;
9074
766890addcb2 state To client communication;
gernotbelger
parents:
diff changeset
35
766890addcb2 state To client communication;
gernotbelger
parents:
diff changeset
36 /**
766890addcb2 state To client communication;
gernotbelger
parents:
diff changeset
37 * @author Domenico Nardi Tironi
766890addcb2 state To client communication;
gernotbelger
parents:
diff changeset
38 *
766890addcb2 state To client communication;
gernotbelger
parents:
diff changeset
39 */
766890addcb2 state To client communication;
gernotbelger
parents:
diff changeset
40 public class TableHelper {
766890addcb2 state To client communication;
gernotbelger
parents:
diff changeset
41
9075
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
42 public interface IColumnClickHandler {
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
43 void columnClicked(String value);
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
44 }
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
45
9074
766890addcb2 state To client communication;
gernotbelger
parents:
diff changeset
46 private enum PinType {
766890addcb2 state To client communication;
gernotbelger
parents:
diff changeset
47 none, from, to
766890addcb2 state To client communication;
gernotbelger
parents:
diff changeset
48 }
766890addcb2 state To client communication;
gernotbelger
parents:
diff changeset
49
9075
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
50 private final ListGrid table;
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
51 private final DataList dataList;
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
52 final FLYSConstants flys;
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
53 private final List<String> keyColEntries = new ArrayList<String>();
9074
766890addcb2 state To client communication;
gernotbelger
parents:
diff changeset
54
9075
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
55 public TableHelper(final DataList dataList, final String definitionStr, final FLYSConstants flys, final IColumnClickHandler fromHandler) {
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
56 this.flys = flys;
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
57 this.dataList = dataList;
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
58 this.table = new ListGrid();
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
59 this.table.setShowHeaderContextMenu(false);
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
60 this.table.setWidth100();
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
61 this.table.setShowRecordComponents(true);
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
62 this.table.setShowRecordComponentsByCell(true);
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
63 this.table.setHeight100();
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
64 this.table.setEmptyMessage(flys.empty_table());
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
65 this.table.setCanReorderFields(false);
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
66
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
67 final MultiAttributeData mData = findDefinition(definitionStr);
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
68 final Map<String, Map<String, String>> meta = mData.getMeta();
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
69
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
70 final Map<String, String> tableInfo = meta.get("meta_tableinfo");
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
71 final String keyColumnName = tableInfo.get("keycol");
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
72
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
73 final SortedMap<Integer, ListGridField> fields = new TreeMap<Integer, ListGridField>();
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
74
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
75 for (final Entry<String, Map<String, String>> entry : meta.entrySet()) {
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
76
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
77 final String colName = entry.getKey();
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
78 if (colName.startsWith("meta_"))
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
79 continue;
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
80
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
81 final Map<String, String> values = entry.getValue();
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
82
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
83 final int order = Integer.parseInt(values.get("order"));
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
84
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
85 final ListGridField field = createField(colName, keyColumnName, values, fromHandler);
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
86
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
87 fields.put(order, field);
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
88 }
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
89
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
90 for (final DataItem dataItem : mData.opts) {
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
91 final MultiDataItem item = (MultiDataItem) dataItem;
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
92
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
93 final Map<String, String> valueMap = item.getValue();
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
94 // final String columnName = mData.getLabel();
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
95 final Record newRecord = new Record();
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
96 for (final Entry<String, String> entry : valueMap.entrySet()) {
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
97 final String key = entry.getKey();
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
98 final String value = entry.getValue();
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
99 newRecord.setAttribute(key, value);
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
100
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
101 if (key.equals(keyColumnName))
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
102 this.keyColEntries.add(value);
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
103 }
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
104
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
105 this.table.addData(newRecord);
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
106 }
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
107
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
108 this.table.setFields(fields.values().toArray(new ListGridField[fields.size()]));
9074
766890addcb2 state To client communication;
gernotbelger
parents:
diff changeset
109
766890addcb2 state To client communication;
gernotbelger
parents:
diff changeset
110 }
766890addcb2 state To client communication;
gernotbelger
parents:
diff changeset
111
9075
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
112 public Canvas getTable() {
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
113 return this.table;
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
114 }
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
115
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
116 private MultiAttributeData findDefinition(final String paranemterName) {
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
117
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
118 for (final Data data : this.dataList.getAll()) {
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
119
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
120 final String label = data.getLabel();
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
121 if (label.equals(paranemterName) && data instanceof MultiAttributeData)
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
122 return (MultiAttributeData) data;
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
123 }
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
124
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
125 return null;
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
126 }
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
127
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
128 private ListGridField createField(final String colName, final String keyColumnName, final Map<String, String> values,
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
129 final IColumnClickHandler fromHandler) {
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
130
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
131 final String translation = getMeta(values, "translation", colName);
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
132
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
133 final ListGridField field = new ListGridField(colName, translation);
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
134
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
135 final String width = getMeta(values, "width", "99");
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
136 field.setWidth(width);
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
137
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
138 final ListGridFieldType type = getMeta(values, "type", ListGridFieldType.TEXT, ListGridFieldType.class);
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
139 field.setType(type);
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
140
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
141 final Alignment alignment = getMeta(values, "alignment", Alignment.LEFT, Alignment.class);
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
142 field.setAlign(alignment);
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
143
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
144 final PinType pinType = getMeta(values, "pin", PinType.none, PinType.class);
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
145 switch (pinType) {
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
146 case from: {
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
147 final String baseUrl = GWT.getHostPageBaseURL();
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
148 field.setCellIcon(baseUrl + this.flys.markerGreen());
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
149 field.addRecordClickHandler(new RecordClickHandler() {
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
150 @Override
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
151 public void onRecordClick(final RecordClickEvent e) {
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
152 final Record r = e.getRecord();
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
153 fromHandler.columnClicked(r.getAttribute(keyColumnName));
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
154 }
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
155 });
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
156 }
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
157 break;
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
158
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
159 case to:
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
160 break;
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
161
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
162 case none:
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
163 default:
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
164 break;
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
165 }
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
166
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
167 return field;
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
168 }
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
169
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
170 private String getMeta(final Map<String, String> values, final String key, final String defaultValue) {
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
171
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
172 final String value = values.get(key);
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
173 if (value == null || value.isEmpty())
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
174 return defaultValue;
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
175
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
176 return value;
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
177 }
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
178
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
179 private <TYPE extends Enum<TYPE>> TYPE getMeta(final Map<String, String> values, final String key, final TYPE defaultValue, final Class<TYPE> enumType) {
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
180
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
181 final String value = values.get(key);
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
182 if (value == null || value.isEmpty())
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
183 return defaultValue;
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
184
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
185 try {
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
186 return Enum.valueOf(enumType, value);
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
187 }
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
188 catch (final Exception e) {
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
189 e.printStackTrace();
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
190 return defaultValue;
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
191 }
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
192 }
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
193
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
194 public List<String> getKeycolEntries() {
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
195
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
196 return this.keyColEntries;
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
197 }
89740fe82196 Extract Table from Panel
gernotbelger
parents: 9074
diff changeset
198
9074
766890addcb2 state To client communication;
gernotbelger
parents:
diff changeset
199 }

http://dive4elements.wald.intevation.org