Mercurial > dive4elements > river
comparison gwt-client/src/main/java/org/dive4elements/river/client/client/ui/ParameterMatrixPanel.java @ 9390:f575ff573cbb
"Name der Peilung" columname minfo.
author | gernotbelger |
---|---|
date | Thu, 09 Aug 2018 15:22:31 +0200 |
parents | 5e38e2924c07 |
children | 2da486c7c05f |
comparison
equal
deleted
inserted
replaced
9389:63c086139391 | 9390:f575ff573cbb |
---|---|
6 * documentation coming with Dive4Elements River for details. | 6 * documentation coming with Dive4Elements River for details. |
7 */ | 7 */ |
8 | 8 |
9 package org.dive4elements.river.client.client.ui; | 9 package org.dive4elements.river.client.client.ui; |
10 | 10 |
11 import com.google.gwt.core.client.GWT; | 11 import java.util.ArrayList; |
12 | 12 import java.util.List; |
13 import com.smartgwt.client.widgets.Canvas; | 13 import java.util.Map; |
14 import com.smartgwt.client.widgets.Label; | 14 import java.util.Set; |
15 import com.smartgwt.client.widgets.layout.HLayout; | |
16 import com.smartgwt.client.widgets.layout.VLayout; | |
17 import com.smartgwt.client.widgets.layout.LayoutSpacer; | |
18 | 15 |
19 import org.dive4elements.river.client.client.FLYSConstants; | 16 import org.dive4elements.river.client.client.FLYSConstants; |
20 import org.dive4elements.river.client.shared.model.Data; | 17 import org.dive4elements.river.client.shared.model.Data; |
21 import org.dive4elements.river.client.shared.model.DataItem; | 18 import org.dive4elements.river.client.shared.model.DataItem; |
22 import org.dive4elements.river.client.shared.model.DataList; | 19 import org.dive4elements.river.client.shared.model.DataList; |
24 import org.dive4elements.river.client.shared.model.DefaultDataItem; | 21 import org.dive4elements.river.client.shared.model.DefaultDataItem; |
25 import org.dive4elements.river.client.shared.model.IntegerOptionsData; | 22 import org.dive4elements.river.client.shared.model.IntegerOptionsData; |
26 import org.dive4elements.river.client.shared.model.MultiAttributeData; | 23 import org.dive4elements.river.client.shared.model.MultiAttributeData; |
27 import org.dive4elements.river.client.shared.model.StringOptionsData; | 24 import org.dive4elements.river.client.shared.model.StringOptionsData; |
28 | 25 |
29 import java.util.ArrayList; | 26 import com.google.gwt.core.client.GWT; |
30 import java.util.List; | 27 import com.smartgwt.client.widgets.Canvas; |
31 import java.util.Map; | 28 import com.smartgwt.client.widgets.Label; |
32 import java.util.Set; | 29 import com.smartgwt.client.widgets.layout.HLayout; |
30 import com.smartgwt.client.widgets.layout.LayoutSpacer; | |
31 import com.smartgwt.client.widgets.layout.VLayout; | |
33 | 32 |
34 /** | 33 /** |
35 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> | 34 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> |
36 */ | 35 */ |
37 public class ParameterMatrixPanel extends AbstractUIProvider { | 36 public class ParameterMatrixPanel extends AbstractUIProvider { |
40 | 39 |
41 /** The message class that provides i18n strings. */ | 40 /** The message class that provides i18n strings. */ |
42 protected FLYSConstants MESSAGES = GWT.create(FLYSConstants.class); | 41 protected FLYSConstants MESSAGES = GWT.create(FLYSConstants.class); |
43 | 42 |
44 private ParameterMatrix matrix; | 43 private ParameterMatrix matrix; |
44 private final String itemnameColTitle; | |
45 | |
46 public ParameterMatrixPanel(final String itemNameColTitle) { | |
47 this.itemnameColTitle = itemNameColTitle; | |
48 } | |
45 | 49 |
46 @Override | 50 @Override |
47 protected Data[] getData() { | 51 protected Data[] getData() { |
48 Map<String, List<String>> selection = matrix.getSelection(); | 52 final Map<String, List<String>> selection = this.matrix.getSelection(); |
49 Set<Map.Entry<String, List<String>>> entries = selection.entrySet(); | 53 final Set<Map.Entry<String, List<String>>> entries = selection.entrySet(); |
50 | 54 |
51 Data[] list = new Data[matrix.getColumnNames().size()]; | 55 final Data[] list = new Data[this.matrix.getColumnNames().size()]; |
52 | 56 |
53 int i = 0; | 57 int i = 0; |
54 | 58 |
55 for (Map.Entry<String, List<String>> entry: entries) { | 59 for (final Map.Entry<String, List<String>> entry : entries) { |
56 String value = buildValueString(entry.getValue()); | 60 final String value = buildValueString(entry.getValue()); |
57 | 61 |
58 DataItem item = new DefaultDataItem( | 62 final DataItem item = new DefaultDataItem(entry.getKey(), null, value); |
59 entry.getKey(), | 63 |
60 null, | 64 list[i++] = new DefaultData(entry.getKey(), null, null, new DataItem[] { item }); |
61 value); | |
62 | |
63 list[i++] = new DefaultData( | |
64 entry.getKey(), null, null, new DataItem[] { item }); | |
65 } | 65 } |
66 | 66 |
67 // To delete old values already given, construct empty ones | 67 // To delete old values already given, construct empty ones |
68 // for all not-specified options. | 68 // for all not-specified options. |
69 for (String colName : matrix.getColumnNames()) { | 69 for (final String colName : this.matrix.getColumnNames()) { |
70 boolean found = false; | 70 boolean found = false; |
71 for (Data data : list) { | 71 for (final Data data : list) { |
72 if (data != null && data.getLabel().equals(colName)) { | 72 if (data != null && data.getLabel().equals(colName)) { |
73 found = true; | 73 found = true; |
74 break; | 74 break; |
75 } | 75 } |
76 } | 76 } |
77 if (!found) { | 77 if (!found) { |
78 // Add an empty data for this. | 78 // Add an empty data for this. |
79 list[i++] = new DefaultData( | 79 list[i++] = new DefaultData(colName, null, null, new DataItem[] {}); |
80 colName, null, null, new DataItem[] { }); | |
81 } | 80 } |
82 } | 81 } |
83 | 82 |
84 return list; | 83 return list; |
85 } | 84 } |
86 | 85 |
87 | 86 protected String buildValueString(final List<String> values) { |
88 protected String buildValueString(List<String> values) { | 87 final StringBuilder sb = new StringBuilder(); |
89 StringBuilder sb = new StringBuilder(); | |
90 | 88 |
91 boolean first = true; | 89 boolean first = true; |
92 | 90 |
93 for (String value: values) { | 91 for (final String value : values) { |
94 if (!first) { | 92 if (!first) { |
95 sb.append(";"); | 93 sb.append(";"); |
96 } | 94 } |
97 | 95 |
98 sb.append(value); | 96 sb.append(value); |
101 } | 99 } |
102 | 100 |
103 return sb.toString(); | 101 return sb.toString(); |
104 } | 102 } |
105 | 103 |
106 | |
107 /** Canvas to show in non-edit mode. */ | 104 /** Canvas to show in non-edit mode. */ |
108 @Override | 105 @Override |
109 public Canvas createOld(DataList dataList) { | 106 public Canvas createOld(final DataList dataList) { |
110 HLayout layout = new HLayout(); | 107 final HLayout layout = new HLayout(); |
111 VLayout vLayout = new VLayout(); | 108 final VLayout vLayout = new VLayout(); |
112 | 109 |
113 layout.setWidth(300); | 110 layout.setWidth(300); |
114 vLayout.setWidth(280); | 111 vLayout.setWidth(280); |
115 | 112 |
116 for (int i = 0, n = dataList.size(); i < n; i++) { | 113 for (int i = 0, n = dataList.size(); i < n; i++) { |
117 HLayout row = new HLayout(); | 114 final HLayout row = new HLayout(); |
118 VLayout cols = new VLayout(); | 115 final VLayout cols = new VLayout(); |
119 | 116 |
120 row.setWidth(300); | 117 row.setWidth(300); |
121 cols.setWidth(100); | 118 cols.setWidth(100); |
122 | 119 |
123 Data data = dataList.get(i); | 120 final Data data = dataList.get(i); |
124 DataItem[] items = data.getItems(); | 121 final DataItem[] items = data.getItems(); |
125 | 122 |
126 Label parameter = new Label(data.getDescription()); | 123 final Label parameter = new Label(data.getDescription()); |
127 parameter.setWidth(200); | 124 parameter.setWidth(200); |
128 | 125 |
129 for (int j = 0, m = items.length; j < m; j++) { | 126 for (final DataItem item : items) { |
130 DataItem item = items[j]; | 127 final Label value = new Label(item.getLabel()); |
131 Label value = new Label(item.getLabel()); | 128 |
132 | 129 value.setValign(com.smartgwt.client.types.VerticalAlignment.TOP); |
133 value.setValign( | |
134 com.smartgwt.client.types.VerticalAlignment.TOP); | |
135 value.setWidth(130); | 130 value.setWidth(130); |
136 value.setHeight(15); | 131 value.setHeight(15); |
137 | 132 |
138 cols.addMember(value); | 133 cols.addMember(value); |
139 LayoutSpacer spacer = new LayoutSpacer(); | 134 final LayoutSpacer spacer = new LayoutSpacer(); |
140 spacer.setHeight(5); | 135 spacer.setHeight(5); |
141 cols.addMember(spacer); | 136 cols.addMember(spacer); |
142 } | 137 } |
143 | 138 |
144 row.addMember(parameter); | 139 row.addMember(parameter); |
145 row.addMember(cols); | 140 row.addMember(cols); |
146 | 141 |
147 vLayout.addMember(row); | 142 vLayout.addMember(row); |
148 } | 143 } |
149 | 144 |
150 Canvas back = getBackButton(dataList.getState()); | 145 final Canvas back = getBackButton(dataList.getState()); |
151 | 146 |
152 layout.addMember(vLayout); | 147 layout.addMember(vLayout); |
153 layout.addMember(back); | 148 layout.addMember(back); |
154 | 149 |
155 return layout; | 150 return layout; |
156 } | 151 } |
157 | 152 |
158 | |
159 /** Create the main canvas in the "editing" mode. */ | 153 /** Create the main canvas in the "editing" mode. */ |
160 @Override | 154 @Override |
161 public Canvas create(DataList dataList) { | 155 public Canvas create(final DataList dataList) { |
162 VLayout v = new VLayout(); | 156 final VLayout v = new VLayout(); |
163 v.addMember(createTitle(dataList)); | 157 v.addMember(createTitle(dataList)); |
164 | 158 |
165 matrix = new ParameterMatrix(); | 159 this.matrix = new ParameterMatrix(this.itemnameColTitle); |
166 | 160 |
167 for (Data data: dataList.getAll()) { | 161 for (final Data data : dataList.getAll()) { |
168 if (data instanceof IntegerOptionsData) { | 162 if (data instanceof IntegerOptionsData) { |
169 matrix.addColumn((IntegerOptionsData) data); | 163 this.matrix.addColumn((IntegerOptionsData) data); |
170 } | 164 } else if (data instanceof StringOptionsData) { |
171 else if (data instanceof StringOptionsData) { | 165 this.matrix.addColumn((StringOptionsData) data); |
172 matrix.addColumn((StringOptionsData) data); | 166 } else if (data instanceof MultiAttributeData) { |
173 } | 167 this.matrix.addColumn((MultiAttributeData) data); |
174 else if (data instanceof MultiAttributeData) { | |
175 matrix.addColumn((MultiAttributeData)data); | |
176 } | 168 } |
177 } | 169 } |
178 | 170 |
179 // If too many items are shown, show it in the helper Panel. | 171 // If too many items are shown, show it in the helper Panel. |
180 // TODO its not about the datalist, but about the "rows" in the data. | 172 // TODO its not about the datalist, but about the "rows" in the data. |
181 if (dataList.getAll().size() > 5) { | 173 if (dataList.getAll().size() > 5) { |
182 v.addMember(matrix.create(false)); | 174 v.addMember(this.matrix.create(false)); |
183 } | 175 } else { |
184 else { | 176 this.helperContainer.addMember(this.matrix.create(true)); |
185 helperContainer.addMember(matrix.create(true)); | |
186 } | 177 } |
187 v.addMember(getNextButton()); | 178 v.addMember(getNextButton()); |
188 | 179 |
189 return v; | 180 return v; |
190 } | 181 } |
191 | 182 |
192 | |
193 /** Reaturns a label with description of first Data. */ | 183 /** Reaturns a label with description of first Data. */ |
194 protected Canvas createTitle(DataList dataList) { | 184 protected Canvas createTitle(final DataList dataList) { |
195 Data data = dataList.get(0); | 185 final Data data = dataList.get(0); |
196 Label label = new Label(data.getDescription()); | 186 final Label label = new Label(data.getDescription()); |
197 label.setHeight(35); | 187 label.setHeight(35); |
198 | 188 |
199 return label; | 189 return label; |
200 } | 190 } |
201 | 191 |
202 | |
203 /** Selection shall not be empty. */ | 192 /** Selection shall not be empty. */ |
204 @Override | 193 @Override |
205 public List<String> validate() { | 194 public List<String> validate() { |
206 GWT.log ("validation. validation. validation. "); | 195 GWT.log("validation. validation. validation. "); |
207 List<String> errors = new ArrayList<String>(); | 196 final List<String> errors = new ArrayList<String>(); |
208 // Early stop on one (only) error. | 197 // Early stop on one (only) error. |
209 boolean ok = false; | 198 boolean ok = false; |
210 for (Map.Entry<String, List<String>> entry: | 199 for (final Map.Entry<String, List<String>> entry : this.matrix.getSelection().entrySet()) { |
211 matrix.getSelection().entrySet() | 200 /* |
212 ) { | 201 * single entries are allowed!! |
213 /* single entries are allowed!! | 202 * if (entry.getValue() == null || entry.getValue().size() == 0) { |
214 if (entry.getValue() == null || entry.getValue().size() == 0) { | 203 * errors.add(MESSAGES.error_values_needed()); |
215 errors.add(MESSAGES.error_values_needed()); | 204 * return errors; |
216 return errors; | 205 * } |
217 } | 206 */ |
218 */ | |
219 if (entry.getValue() != null && entry.getValue().size() > 0) { | 207 if (entry.getValue() != null && entry.getValue().size() > 0) { |
220 ok = true; | 208 ok = true; |
221 } | 209 } |
222 } | 210 } |
223 if (!ok) { | 211 if (!ok) { |
224 errors.add(MESSAGES.error_values_needed()); | 212 errors.add(this.MESSAGES.error_values_needed()); |
225 } | 213 } |
226 return errors; | 214 return errors; |
227 } | 215 } |
228 } | 216 } |
229 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : | 217 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |