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 :

http://dive4elements.wald.intevation.org