Mercurial > dive4elements > river
comparison gwt-client/src/main/java/org/dive4elements/river/client/client/ui/AbstractSingleItemPanel.java @ 9079:aafae1ab25f0
epoch-panels, single-input-panels
author | gernotbelger |
---|---|
date | Wed, 23 May 2018 17:30:24 +0200 |
parents | fc02833dbcc1 |
children | 5a0e8d76582e |
comparison
equal
deleted
inserted
replaced
9078:fc02833dbcc1 | 9079:aafae1ab25f0 |
---|---|
19 import org.dive4elements.river.client.shared.model.DefaultData; | 19 import org.dive4elements.river.client.shared.model.DefaultData; |
20 import org.dive4elements.river.client.shared.model.DefaultDataItem; | 20 import org.dive4elements.river.client.shared.model.DefaultDataItem; |
21 | 21 |
22 import com.smartgwt.client.widgets.Canvas; | 22 import com.smartgwt.client.widgets.Canvas; |
23 import com.smartgwt.client.widgets.Label; | 23 import com.smartgwt.client.widgets.Label; |
24 import com.smartgwt.client.widgets.form.DynamicForm; | |
25 import com.smartgwt.client.widgets.form.fields.TextItem; | 24 import com.smartgwt.client.widgets.form.fields.TextItem; |
26 import com.smartgwt.client.widgets.form.validator.IsIntegerValidator; | |
27 import com.smartgwt.client.widgets.grid.ListGrid; | |
28 import com.smartgwt.client.widgets.layout.HLayout; | 25 import com.smartgwt.client.widgets.layout.HLayout; |
29 import com.smartgwt.client.widgets.layout.VLayout; | 26 import com.smartgwt.client.widgets.layout.VLayout; |
30 | 27 |
31 /** | 28 /** |
32 * @author Domenico Nardi Tironi | 29 * @author Domenico Nardi Tironi |
33 * | 30 * |
34 */ | 31 */ |
35 public abstract class AbstractSingleItemPanel extends AbstractUIProvider { | 32 public abstract class AbstractSingleItemPanel extends AbstractUIProvider { |
36 | 33 |
37 protected static final String FORM_ID = "FORM_ID"; | 34 private static final long serialVersionUID = 1L; |
38 | 35 |
39 protected TextItem inputItem; | 36 protected enum Type { |
40 | 37 single, multi // "SingleItem" (Klassenname) meint, dass es nur ein einziges Eingabefeld gibt (nicht from-to; epoch) |
41 protected List<String> validInputs = new ArrayList<String>(); | 38 // Type multi: append (year): es können mehrere Werte eingegeben werden; Leerzeichen-getrennt |
42 | 39 // Type single: append (year, sohlhöhendifferenz): nur ein Wert ist zulässig |
43 protected ListGrid table; | 40 } |
41 | |
42 private final Type type; | |
43 | |
44 private TextItem inputItem; | |
45 | |
46 private List<String> validInputs = new ArrayList<String>(); | |
44 | 47 |
45 protected abstract String getDatakey(); | 48 protected abstract String getDatakey(); |
46 | 49 |
47 protected abstract void appendValue(final String value); | 50 protected abstract Canvas createWidget(final DataList data); |
48 | 51 |
49 protected abstract boolean getTitleVisible(); | 52 public AbstractSingleItemPanel(final Type type) { |
50 | 53 this.type = type; |
51 protected abstract String errorForItemMsg(); | 54 } |
52 | 55 |
53 @Override | 56 @Override |
54 public Canvas create(final DataList data) { | 57 public final Canvas create(final DataList data) { |
55 final VLayout layout = new VLayout(); | 58 final VLayout layout = new VLayout(); |
56 final IColumnClickHandler fromHandler = new IColumnClickHandler() { // add to external class | 59 final IColumnClickHandler fromHandler = new IColumnClickHandler() { // add to external class |
57 | 60 |
58 @Override | 61 @Override |
59 public void columnClicked(final String value) { | 62 public void columnClicked(final String value) { |
74 layout.addMember(submit); | 77 layout.addMember(submit); |
75 | 78 |
76 return layout; | 79 return layout; |
77 } | 80 } |
78 | 81 |
79 public Canvas createWidget(final DataList data) { | 82 @Override |
80 final VLayout layout = new VLayout(); | 83 public final Canvas createOld(final DataList dataList) { |
81 | |
82 final Label title = new Label(data.get(0).getDescription()); | |
83 title.setHeight("25px"); | |
84 | |
85 final DynamicForm form = new DynamicForm(); | |
86 form.setID(FORM_ID); | |
87 form.setNumCols(4); | |
88 this.inputItem = new TextItem(this.MSG.years()); | |
89 this.inputItem.setShowTitle(getTitleVisible()); | |
90 this.inputItem.setValidators(new IsIntegerValidator()); // TODO: validator to be overriden... | |
91 form.setFields(this.inputItem); | |
92 | |
93 layout.addMember(title); | |
94 layout.addMember(form); | |
95 | |
96 return layout; | |
97 } | |
98 | |
99 @Override | |
100 public Canvas createOld(final DataList dataList) { | |
101 final List<Data> items = dataList.getAll(); | 84 final List<Data> items = dataList.getAll(); |
102 final Data years = getData(items, getDatakey()); | 85 final Data years = getData(items, getDatakey()); |
103 final DataItem[] yearsItems = years.getItems(); | 86 final DataItem[] yearsItems = years.getItems(); |
104 | 87 |
105 final String v1 = yearsItems[0].getStringValue().replace(" ", ", "); | 88 final String v1 = yearsItems[0].getStringValue().replace(" ", ", "); |
119 | 102 |
120 return layout; | 103 return layout; |
121 } | 104 } |
122 | 105 |
123 @Override | 106 @Override |
124 public List<String> validate() { | 107 protected final Data[] getData() { |
108 final List<String> errors = this.validate(); | |
109 if (errors.size() > 0) { | |
110 showErrors(errors); // TODO: do not allow advance state | |
111 // return null; | |
112 } | |
113 if (this.inputItem != null && !this.inputItem.getValueAsString().isEmpty()) { | |
114 final List<Data> data = new ArrayList<Data>(); | |
115 | |
116 final DataItem yearsdata = new DefaultDataItem(getDatakey(), getDatakey(), this.inputItem.getValueAsString().trim()); | |
117 data.add(new DefaultData(getDatakey(), null, null, new DataItem[] { yearsdata })); | |
118 | |
119 return data.toArray(new Data[data.size()]); | |
120 } | |
121 return new Data[0]; | |
122 } | |
123 | |
124 protected final TextItem createInputItem(final String title) { | |
125 this.inputItem = PanelHelper.createItem(title);// new TextItem(title); | |
126 return this.inputItem; | |
127 } | |
128 | |
129 private final List<String> checkForEmpty() { | |
125 final List<String> errors = new ArrayList<String>(); | 130 final List<String> errors = new ArrayList<String>(); |
126 | 131 |
127 if (this.inputItem.getValueAsString() == null || this.inputItem.getValueAsString().trim().isEmpty()) { | 132 if (this.inputItem.getValueAsString() == null || this.inputItem.getValueAsString().trim().isEmpty()) { |
128 errors.add(this.MSG.empty_filter()); | 133 errors.add(this.MSG.empty_filter()); |
129 return errors; | 134 return errors; |
130 } | 135 } |
131 final String sValue = this.inputItem.getValueAsString(); | 136 return errors; |
132 String filtered = ""; | 137 } |
133 int goodValues = 0; | 138 |
134 | 139 private final List<String> validateSingleInput(final String sValue) { |
135 int value = 0; | 140 final List<String> errors = new ArrayList<String>(); |
141 // String filtered = ""; | |
142 // int goodValues = 0; | |
143 | |
136 try { | 144 try { |
137 value = Integer.parseInt(sValue); | 145 Integer.parseInt(sValue); |
138 } | 146 } |
139 catch (final NumberFormatException e) { | 147 catch (final NumberFormatException e) { |
140 errors.add(this.MSG.wrongFormat() + ": " + sValue); | 148 errors.add(this.MSG.wrongFormat() + ": " + sValue); |
141 | 149 |
142 } | 150 } |
152 String tmp = errorForItemMsg(); | 160 String tmp = errorForItemMsg(); |
153 tmp = tmp.replace("$1", sValue); | 161 tmp = tmp.replace("$1", sValue); |
154 errors.add(tmp); | 162 errors.add(tmp); |
155 // continue; | 163 // continue; |
156 } | 164 } |
157 goodValues++; | 165 // goodValues++; |
158 if (goodValues > 1) { | 166 // if (goodValues > 1) { |
159 filtered += " " + Integer.toString(value); | 167 // filtered += " " + Integer.toString(value); |
160 } else { | 168 // } else { |
161 filtered = Integer.toString(value); | 169 // filtered = Integer.toString(value); |
162 } | 170 // } |
163 | |
164 return errors; | 171 return errors; |
165 } | 172 } |
166 | 173 |
167 @Override | 174 protected abstract String errorForItemMsg(); |
168 protected Data[] getData() { | 175 |
169 final List<String> errors = this.validate(); | 176 protected final void appendValue(final String value) { |
170 if (errors.size() > 0) { | 177 |
171 showErrors(errors); // TODO: do not allow advance state | 178 switch (this.type) { |
172 // return null; | 179 case multi: |
173 } | 180 // APPEND = ADD to existing -> MULTI YEAR |
174 if (this.inputItem != null && !this.inputItem.getValueAsString().isEmpty()) { | 181 final String oldYears = this.inputItem.getValueAsString(); |
175 final List<Data> data = new ArrayList<Data>(); | 182 if (oldYears != null && !oldYears.isEmpty()) |
176 | 183 this.inputItem.setValue(oldYears.trim() + " " + value); |
177 final DataItem yearsdata = new DefaultDataItem(getDatakey(), getDatakey(), this.inputItem.getValueAsString().trim()); | 184 else |
178 data.add(new DefaultData(getDatakey(), null, null, new DataItem[] { yearsdata })); | 185 this.inputItem.setValue(value); |
179 | 186 |
180 return data.toArray(new Data[data.size()]); | 187 break; |
181 } | 188 |
182 return new Data[0]; | 189 case single: |
183 } | 190 this.inputItem.setValue(value); |
184 | 191 break; |
192 | |
193 default: | |
194 throw new IllegalStateException(); | |
195 } | |
196 } | |
197 | |
198 @Override | |
199 public final List<String> validate() { | |
200 | |
201 final List<String> errors = new ArrayList<String>(); | |
202 errors.addAll(this.checkForEmpty()); | |
203 | |
204 final String sValue = this.inputItem.getValueAsString(); | |
205 | |
206 switch (this.type) { | |
207 case multi: | |
208 final String[] sValues = sValue.trim().split(" "); | |
209 for (final String value : sValues) { | |
210 errors.addAll(this.validateSingleInput(value)); | |
211 } | |
212 break; | |
213 | |
214 case single: | |
215 errors.addAll(this.validateSingleInput(sValue)); | |
216 break; | |
217 | |
218 default: | |
219 throw new IllegalStateException(); | |
220 } | |
221 | |
222 return errors; | |
223 } | |
185 } | 224 } |