comparison gwt-client/src/main/java/org/dive4elements/river/client/client/ui/sinfo/CollisionLoadYearPanel.java @ 9077:2b13de1b0897

moved single_year/multi_year common code to AbstractPanel
author gernotbelger
date Tue, 22 May 2018 15:32:00 +0200
parents 22d8928895a1
children fc02833dbcc1
comparison
equal deleted inserted replaced
9076:22d8928895a1 9077:2b13de1b0897
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.sinfo; 9 package org.dive4elements.river.client.client.ui.sinfo;
10 10
11 import java.util.ArrayList; 11 import org.dive4elements.river.client.client.ui.AbstractPanel;
12 import java.util.List;
13 12
14 import org.dive4elements.river.client.client.FLYSConstants; 13 public class CollisionLoadYearPanel extends AbstractPanel {
15 import org.dive4elements.river.client.client.ui.AbstractUIProvider;
16 import org.dive4elements.river.client.client.ui.FromToTableHelperPanel;
17 import org.dive4elements.river.client.client.ui.FromToTableHelperPanel.IColumnClickHandler;
18 import org.dive4elements.river.client.shared.model.Data;
19 import org.dive4elements.river.client.shared.model.DataItem;
20 import org.dive4elements.river.client.shared.model.DataList;
21 import org.dive4elements.river.client.shared.model.DefaultData;
22 import org.dive4elements.river.client.shared.model.DefaultDataItem;
23 14
24 import com.google.gwt.core.client.GWT; 15 @Override
25 import com.google.gwt.i18n.client.NumberFormat; 16 protected String getDatakey() {
26 import com.smartgwt.client.widgets.Canvas; 17 return "years"; // MULTIPLE; get From server (sinfo.xml data for state)
27 import com.smartgwt.client.widgets.Label; 18 }
28 import com.smartgwt.client.widgets.form.DynamicForm;
29 import com.smartgwt.client.widgets.form.fields.TextItem;
30 import com.smartgwt.client.widgets.form.validator.IsIntegerValidator;
31 import com.smartgwt.client.widgets.grid.ListGrid;
32 import com.smartgwt.client.widgets.layout.HLayout;
33 import com.smartgwt.client.widgets.layout.VLayout;
34
35 public class CollisionLoadYearPanel extends AbstractUIProvider {
36
37 private final FLYSConstants MESSAGES = GWT.create(FLYSConstants.class);
38
39 private TextItem yearsItem;
40
41 private List<String> validYears = new ArrayList<String>();
42
43 private ListGrid table;
44 19
45 public CollisionLoadYearPanel() { 20 public CollisionLoadYearPanel() {
46 } 21 }
47 22
48 @Override 23 @Override
49 public Canvas createOld(final DataList dataList) { 24 protected final void appendValue(final String value) { // APPEND = ADD to existing -> MULTI YEAR
50 final List<Data> items = dataList.getAll(); 25 final String oldYears = super.inputItem.getValueAsString();
51 final Data years = getData(items, "years");
52 final DataItem[] yearsItems = years.getItems();
53
54 final String v1 = yearsItems[0].getStringValue().replace(" ", ", ");
55
56 final Label old = new Label(v1);
57 final HLayout layout = new HLayout();
58 layout.setWidth("400px");
59
60 final Label label = new Label(dataList.getLabel());
61 label.setWidth("200px");
62
63 final Canvas back = getBackButton(dataList.getState());
64
65 layout.addMember(label);
66 layout.addMember(old);
67 layout.addMember(back);
68
69 return layout;
70 }
71
72 @Override
73 public List<String> validate() {
74 return validateYears();
75 }
76
77 @Override
78 public Canvas create(final DataList data) {
79 final VLayout layout = new VLayout();
80 final IColumnClickHandler fromHandler = new IColumnClickHandler() { // add to external class
81
82 @Override
83 public void columnClicked(final String value) {
84 appendYear(value);
85 }
86 };
87
88 final FromToTableHelperPanel helper = new FromToTableHelperPanel(data, "years", this.MSG, fromHandler, null);
89 final Canvas table = helper.getTable();
90 this.validYears = helper.getKeycolEntries();
91
92 this.helperContainer.addMember(table);
93
94 final Canvas submit = getNextButton();
95 final Canvas widget = createWidget(data);
96
97 layout.addMember(widget);
98 layout.addMember(submit);
99
100 return layout;
101 }
102
103 public Canvas createWidget(final DataList data) {
104 final VLayout layout = new VLayout();
105
106 final Label title = new Label(data.get(0).getDescription());
107 title.setHeight("25px");
108
109 final DynamicForm form = new DynamicForm();
110 form.setNumCols(4);
111 this.yearsItem = new TextItem(this.MSG.years());
112 this.yearsItem.setValidators(new IsIntegerValidator());
113 form.setFields(this.yearsItem); // TODO: move to helper
114
115 layout.addMember(title);
116 layout.addMember(form);
117
118 return layout;
119 }
120
121 @Override
122 protected Data[] getData() {
123 validateYears();
124 if (this.yearsItem != null && !this.yearsItem.getValueAsString().isEmpty()) {
125 final List<Data> data = new ArrayList<Data>();
126
127 final DataItem yearsdata = new DefaultDataItem("years", "years", this.yearsItem.getValueAsString().trim());
128 data.add(new DefaultData("years", null, null, new DataItem[] { yearsdata }));
129
130 return data.toArray(new Data[data.size()]);
131 }
132 return new Data[0];
133 }
134
135 private List<String> validateYears() {
136 final List<String> errors = new ArrayList<String>();
137 final NumberFormat nf = NumberFormat.getDecimalFormat();
138
139 if (this.yearsItem.getValueAsString() == null || this.yearsItem.getValueAsString().trim().isEmpty()) {
140 errors.add(this.MESSAGES.empty_filter());
141 return errors;
142 }
143
144 final String[] sValues = this.yearsItem.getValueAsString().trim().split(" ");
145 String filtered = "";
146 int goodValues = 0;
147 for (final String sValue : sValues) {
148 int value;
149 try {
150 value = Integer.parseInt(sValue);
151 }
152 catch (final NumberFormatException e) {
153 errors.add(this.MESSAGES.wrongFormat() + ": " + sValue);
154 continue;
155 }
156 boolean isGood = false;
157 for (final String validYear : this.validYears) {
158 /* No list contains for strings? */
159 if (sValue.equals(validYear)) {
160 isGood = true;
161 break;
162 }
163 }
164 if (!isGood) {
165 String tmp = this.MESSAGES.no_data_for_year();
166 tmp = tmp.replace("$1", sValue);
167 errors.add(tmp);
168 continue;
169 }
170 goodValues++;
171 if (goodValues > 1) {
172 filtered += " " + Integer.toString(value);
173 } else {
174 filtered = Integer.toString(value);
175 }
176 }
177
178 return errors;
179 }
180
181 protected final void appendYear(final String year) {
182 final String oldYears = this.yearsItem.getValueAsString();
183 if (oldYears != null && !oldYears.isEmpty()) { 26 if (oldYears != null && !oldYears.isEmpty()) {
184 this.yearsItem.setValue(oldYears.trim() + " " + year); 27 super.inputItem.setValue(oldYears.trim() + " " + value);
185 } else { 28 } else {
186 this.yearsItem.setValue(year); 29 super.inputItem.setValue(value);
187 } 30 }
188 } 31 }
189 } 32 }

http://dive4elements.wald.intevation.org