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 }

http://dive4elements.wald.intevation.org