9074
|
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde |
|
2 * Software engineering by Intevation GmbH |
|
3 * |
|
4 * This file is Free Software under the GNU AGPL (>=v3) |
|
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the |
|
6 * documentation coming with Dive4Elements River for details. |
|
7 */ |
|
8 |
|
9 package org.dive4elements.river.client.client.ui.sinfo; |
|
10 |
|
11 import java.util.ArrayList; |
|
12 import java.util.List; |
|
13 |
|
14 import org.dive4elements.river.client.client.FLYSConstants; |
|
15 import org.dive4elements.river.client.client.ui.AbstractUIProvider; |
9076
|
16 import org.dive4elements.river.client.client.ui.FromToTableHelperPanel; |
|
17 import org.dive4elements.river.client.client.ui.FromToTableHelperPanel.IColumnClickHandler; |
9074
|
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 |
|
24 import com.google.gwt.core.client.GWT; |
|
25 import com.google.gwt.i18n.client.NumberFormat; |
|
26 import com.smartgwt.client.widgets.Canvas; |
|
27 import com.smartgwt.client.widgets.Label; |
|
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 |
9075
|
41 private List<String> validYears = new ArrayList<String>(); |
9074
|
42 |
|
43 private ListGrid table; |
|
44 |
|
45 public CollisionLoadYearPanel() { |
|
46 } |
|
47 |
|
48 @Override |
|
49 public Canvas createOld(final DataList dataList) { |
|
50 final List<Data> items = dataList.getAll(); |
|
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 |
9076
|
88 final FromToTableHelperPanel helper = new FromToTableHelperPanel(data, "years", this.MSG, fromHandler, null); |
9075
|
89 final Canvas table = helper.getTable(); |
|
90 this.validYears = helper.getKeycolEntries(); |
9074
|
91 |
9075
|
92 this.helperContainer.addMember(table); |
9074
|
93 |
9075
|
94 final Canvas submit = getNextButton(); |
|
95 final Canvas widget = createWidget(data); |
9074
|
96 |
9075
|
97 layout.addMember(widget); |
|
98 layout.addMember(submit); |
9074
|
99 |
9075
|
100 return layout; |
9074
|
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()); |
9076
|
113 form.setFields(this.yearsItem); // TODO: move to helper |
9074
|
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()) { |
|
184 this.yearsItem.setValue(oldYears.trim() + " " + year); |
|
185 } else { |
|
186 this.yearsItem.setValue(year); |
|
187 } |
|
188 } |
|
189 } |