comparison gwt-client/src/main/java/org/dive4elements/river/client/client/ui/AbstractSingleItemPanel.java @ 9256:6c24c857ccf9

fixation refactoring and inputItem behaviour to interfaces
author gernotbelger
date Fri, 13 Jul 2018 12:04:21 +0200
parents cbe393451ab0
children b570b6fcc052
comparison
equal deleted inserted replaced
9255:9be51f776798 9256:6c24c857ccf9
10 package org.dive4elements.river.client.client.ui; 10 package org.dive4elements.river.client.client.ui;
11 11
12 import java.util.ArrayList; 12 import java.util.ArrayList;
13 import java.util.List; 13 import java.util.List;
14 14
15 import org.dive4elements.river.client.client.FLYSConstants;
15 import org.dive4elements.river.client.client.ui.FromToTableHelperPanel.IColumnClickHandler; 16 import org.dive4elements.river.client.client.ui.FromToTableHelperPanel.IColumnClickHandler;
16 import org.dive4elements.river.client.shared.model.Data; 17 import org.dive4elements.river.client.shared.model.Data;
17 import org.dive4elements.river.client.shared.model.DataItem; 18 import org.dive4elements.river.client.shared.model.DataItem;
18 import org.dive4elements.river.client.shared.model.DataList; 19 import org.dive4elements.river.client.shared.model.DataList;
19 import org.dive4elements.river.client.shared.model.DefaultData; 20 import org.dive4elements.river.client.shared.model.DefaultData;
20 import org.dive4elements.river.client.shared.model.DefaultDataItem; 21 import org.dive4elements.river.client.shared.model.DefaultDataItem;
21 22
22 import com.smartgwt.client.util.SC;
23 import com.smartgwt.client.widgets.Canvas; 23 import com.smartgwt.client.widgets.Canvas;
24 import com.smartgwt.client.widgets.Label; 24 import com.smartgwt.client.widgets.Label;
25 import com.smartgwt.client.widgets.form.fields.TextItem; 25 import com.smartgwt.client.widgets.form.fields.TextItem;
26 import com.smartgwt.client.widgets.layout.HLayout; 26 import com.smartgwt.client.widgets.layout.HLayout;
27 import com.smartgwt.client.widgets.layout.VLayout; 27 import com.smartgwt.client.widgets.layout.VLayout;
32 */ 32 */
33 public abstract class AbstractSingleItemPanel extends AbstractUIProvider { 33 public abstract class AbstractSingleItemPanel extends AbstractUIProvider {
34 34
35 private static final long serialVersionUID = 1L; 35 private static final long serialVersionUID = 1L;
36 36
37 public enum Type { 37 public interface IMultiSingleBehaviour {
38 single, multi, limit5 // "SingleItem" (Klassenname) meint, dass es nur ein einziges Eingabefeld gibt (nicht from-to; epoch) 38 void appendValue(final TextItem inputItem, final String value);
39 // Type multi: append (year): es können mehrere Werte eingegeben werden; Leerzeichen-getrennt 39
40 // Type single: append (year, sohlhöhendifferenz): nur ein Wert ist zulässig 40 List<String> validate(List<String> errors, String sValue);
41 // Type limit5 TODO: generalize, if needed 41
42 void setValidInputs(List<String> validInputs);
43
44 void setErrorForItemMsg(String errorForItemMsg);
45
46 void setMSG(FLYSConstants msg);
42 } 47 }
43
44 private final Type type;
45 48
46 private TextItem inputItem; 49 private TextItem inputItem;
47 50
48 private List<String> validInputs = new ArrayList<String>(); 51 private List<String> validInputs = new ArrayList<String>();
49 52
53 private final IMultiSingleBehaviour behaviour;
54
50 protected abstract String getDatakey(); 55 protected abstract String getDatakey();
51 56
52 protected abstract Canvas createWidget(final DataList data); 57 protected abstract Canvas createWidget(final DataList data);
53 58
54 public AbstractSingleItemPanel(final Type type) { 59 public AbstractSingleItemPanel(final IMultiSingleBehaviour behaviour) {
55 this.type = type; 60 this.behaviour = behaviour;
56 } 61 }
57 62
58 @Override 63 @Override
59 public final Canvas create(final DataList data) { 64 public final Canvas create(final DataList data) {
60 final VLayout layout = new VLayout(); 65 final VLayout layout = new VLayout();
67 }; 72 };
68 73
69 final FromToTableHelperPanel helper = new FromToTableHelperPanel(data, getDatakey(), this.MSG, fromHandler, null); 74 final FromToTableHelperPanel helper = new FromToTableHelperPanel(data, getDatakey(), this.MSG, fromHandler, null);
70 final Canvas table = helper.getTable(); 75 final Canvas table = helper.getTable();
71 this.validInputs = helper.getKeycolEntries(); 76 this.validInputs = helper.getKeycolEntries();
77 this.behaviour.setValidInputs(this.validInputs);
78 this.behaviour.setErrorForItemMsg(this.errorForItemMsg());
79 this.behaviour.setMSG(this.MSG);
72 80
73 this.helperContainer.addMember(table); 81 this.helperContainer.addMember(table);
74 82
75 final Canvas submit = getNextButton(); 83 final Canvas submit = getNextButton();
76 final Canvas widget = createWidget(data); 84 final Canvas widget = createWidget(data);
136 return errors; 144 return errors;
137 } 145 }
138 return errors; 146 return errors;
139 } 147 }
140 148
141 private final List<String> validateSingleInput(final String sValue) {
142 final List<String> errors = new ArrayList<String>();
143 // String filtered = "";
144 // int goodValues = 0;
145 errors.addAll(validateNumber(sValue));
146 boolean isGood = false;
147 for (final String validYear : this.validInputs) {
148 /* No list contains for strings? */
149 if (sValue.equals(validYear)) {
150 isGood = true;
151 break;
152 }
153 }
154 if (!isGood) {
155 String tmp = errorForItemMsg();
156 tmp = tmp.replace("$1", sValue);
157 errors.add(tmp);
158 // continue;
159 }
160
161 return errors;
162 }
163
164 private final List<String> validateNumber(final String sValue) {
165 final List<String> errors = new ArrayList<String>();
166
167 try {
168 Integer.parseInt(sValue);
169 }
170 catch (final NumberFormatException e) {
171 errors.add(this.MSG.wrongFormat() + ": " + sValue);
172
173 }
174 return errors;
175 }
176
177 protected abstract String errorForItemMsg(); 149 protected abstract String errorForItemMsg();
178 150
179 protected final void appendValue(final String value) { 151 protected final void appendValue(final String value) {
180 152 this.behaviour.appendValue(this.inputItem, value);
181 switch (this.type) {
182 case multi:
183 // APPEND = ADD to existing -> MULTI YEAR
184 final String oldYears = this.inputItem.getValueAsString();
185 if (oldYears != null && !oldYears.isEmpty())
186 this.inputItem.setValue(oldYears.trim() + " " + value);
187 else
188 this.inputItem.setValue(value);
189
190 break;
191
192 case limit5:
193 // APPEND = ADD to existing -> MULTI YEAR
194 final String oldValues = this.inputItem.getValueAsString();
195 if (oldValues != null && !oldValues.isEmpty()) {
196 final String[] oldVals = oldValues.split(" ");
197 if (oldVals.length < 5)// TODO: generalize, if needed
198 this.inputItem.setValue(oldValues.trim() + " " + value);
199 else {
200 // msg TODO: generalize, if needed
201 SC.warn(this.MSG.error_limit_exceeded_salix());
202 }
203 }
204
205 else
206 this.inputItem.setValue(value);
207
208 break;
209
210 case single:
211 this.inputItem.setValue(value);
212 break;
213
214 default:
215 throw new IllegalStateException();
216 }
217 } 153 }
218 154
219 @Override 155 @Override
220 public final List<String> validate() { 156 public final List<String> validate() {
221
222 final List<String> errors = new ArrayList<String>(); 157 final List<String> errors = new ArrayList<String>();
223 errors.addAll(this.checkForEmpty()); 158 errors.addAll(this.checkForEmpty());
224
225 final String sValue = this.inputItem.getValueAsString(); 159 final String sValue = this.inputItem.getValueAsString();
226 160 return this.behaviour.validate(errors, sValue);
227 switch (this.type) {
228 case multi:
229 if (sValue != null) {
230 final String[] sValues = sValue.trim().split(" ");
231 for (final String value : sValues) {
232 errors.addAll(this.validateSingleInput(value));
233 }
234 }
235 break;
236 case limit5:
237 if (sValue != null) {
238 final String[] values = sValue.trim().split(" ");
239 if (values.length > 5) {
240 errors.add(this.MSG.error_limit_exceeded_salix());// TODO generalize if needed
241 }
242 for (int i = 0; i < values.length; i++) {
243 if (i < 5)
244 errors.addAll(this.validateNumber(values[i]));
245 }
246 }
247 break;
248 case single:
249 errors.addAll(this.validateSingleInput(sValue));
250 break;
251
252 default:
253 throw new IllegalStateException();
254 }
255
256 return errors;
257 } 161 }
258 } 162 }

http://dive4elements.wald.intevation.org