Mercurial > dive4elements > river
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 } |