Mercurial > dive4elements > river
comparison gwt-client/src/main/java/org/dive4elements/river/client/client/ui/uinfo/LoadSingleYearPanel.java @ 9063:b6919e3c2d86
work on uinfo-inundation_duration states
author | gernotbelger |
---|---|
date | Tue, 08 May 2018 15:21:23 +0200 |
parents | |
children | b5d7a9d79837 |
comparison
equal
deleted
inserted
replaced
9062:5198066492a9 | 9063:b6919e3c2d86 |
---|---|
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.uinfo; | |
10 | |
11 import java.util.ArrayList; | |
12 import java.util.List; | |
13 | |
14 import com.google.gwt.core.client.GWT; | |
15 import com.google.gwt.i18n.client.NumberFormat; | |
16 import com.google.gwt.user.client.rpc.AsyncCallback; | |
17 import com.smartgwt.client.data.Record; | |
18 import com.smartgwt.client.types.ListGridFieldType; | |
19 import com.smartgwt.client.util.SC; | |
20 import com.smartgwt.client.widgets.Canvas; | |
21 import com.smartgwt.client.widgets.Label; | |
22 import com.smartgwt.client.widgets.form.DynamicForm; | |
23 import com.smartgwt.client.widgets.form.fields.TextItem; | |
24 import com.smartgwt.client.widgets.form.validator.IsIntegerValidator; | |
25 import com.smartgwt.client.widgets.grid.ListGrid; | |
26 import com.smartgwt.client.widgets.grid.ListGridField; | |
27 import com.smartgwt.client.widgets.layout.HLayout; | |
28 import com.smartgwt.client.widgets.layout.VLayout; | |
29 import com.smartgwt.client.widgets.grid.events.RecordClickHandler; | |
30 import com.smartgwt.client.widgets.grid.events.RecordClickEvent; | |
31 | |
32 import org.dive4elements.river.client.client.Config; | |
33 import org.dive4elements.river.client.client.FLYSConstants; | |
34 import org.dive4elements.river.client.client.services.SedimentLoadInfoService; | |
35 import org.dive4elements.river.client.client.services.SedimentLoadInfoServiceAsync; | |
36 import org.dive4elements.river.client.client.ui.AbstractUIProvider; | |
37 import org.dive4elements.river.client.shared.model.ArtifactDescription; | |
38 import org.dive4elements.river.client.shared.model.Data; | |
39 import org.dive4elements.river.client.shared.model.DataItem; | |
40 import org.dive4elements.river.client.shared.model.DataList; | |
41 import org.dive4elements.river.client.shared.model.DefaultData; | |
42 import org.dive4elements.river.client.shared.model.DefaultDataItem; | |
43 import org.dive4elements.river.client.shared.model.SedimentLoadInfoObject; | |
44 import org.dive4elements.river.client.shared.model.SedimentLoadInfoRecord; | |
45 | |
46 | |
47 public class LoadSingleYearPanel | |
48 extends AbstractUIProvider | |
49 { | |
50 protected SedimentLoadInfoServiceAsync sedLoadInfoService = | |
51 GWT.create(SedimentLoadInfoService.class); | |
52 | |
53 protected FLYSConstants MESSAGES = GWT.create(FLYSConstants.class); | |
54 | |
55 private TextItem yearsItem; | |
56 | |
57 private ListGrid sedLoadTable; | |
58 | |
59 protected List<String> validYears; | |
60 | |
61 public LoadSingleYearPanel () { | |
62 } | |
63 | |
64 @Override | |
65 public Canvas createOld(DataList dataList) { | |
66 List<Data> items = dataList.getAll(); | |
67 Data years = getData(items, "years"); | |
68 DataItem[] yearsItems = years.getItems(); | |
69 | |
70 String v1 = yearsItems[0].getStringValue().replace(" ", ", "); | |
71 | |
72 Label old = new Label(v1); | |
73 HLayout layout = new HLayout(); | |
74 layout.setWidth("400px"); | |
75 | |
76 Label label = new Label(dataList.getLabel()); | |
77 label.setWidth("200px"); | |
78 | |
79 Canvas back = getBackButton(dataList.getState()); | |
80 | |
81 layout.addMember(label); | |
82 layout.addMember(old); | |
83 layout.addMember(back); | |
84 | |
85 return layout; | |
86 } | |
87 | |
88 @Override | |
89 public List<String> validate() { | |
90 return validateYears(); | |
91 } | |
92 | |
93 @Override | |
94 public Canvas create(DataList data) { | |
95 VLayout layout = new VLayout(); | |
96 | |
97 Canvas helper = createHelper(); | |
98 this.helperContainer.addMember(helper); | |
99 | |
100 Canvas submit = getNextButton(); | |
101 Canvas widget = createWidget(data); | |
102 | |
103 layout.addMember(widget); | |
104 layout.addMember(submit); | |
105 | |
106 fetchSedimentLoadData(); | |
107 | |
108 return layout; | |
109 } | |
110 | |
111 private Canvas createHelper() { | |
112 sedLoadTable = new ListGrid(); | |
113 sedLoadTable.setShowHeaderContextMenu(false); | |
114 sedLoadTable.setWidth100(); | |
115 sedLoadTable.setShowRecordComponents(true); | |
116 sedLoadTable.setShowRecordComponentsByCell(true); | |
117 sedLoadTable.setHeight100(); | |
118 sedLoadTable.setEmptyMessage(MSG.empty_table()); | |
119 sedLoadTable.setCanReorderFields(false); | |
120 | |
121 ListGridField date = new ListGridField("date", MSG.year()); | |
122 date.setType(ListGridFieldType.TEXT); | |
123 date.setWidth(100); | |
124 | |
125 ListGridField descr = | |
126 new ListGridField("description", MSG.description()); | |
127 descr.setType(ListGridFieldType.TEXT); | |
128 descr.setWidth("*"); | |
129 | |
130 String baseUrl = GWT.getHostPageBaseURL(); | |
131 ListGridField pinFrom = new ListGridField( | |
132 "fromIcon", MESSAGES.selection()); | |
133 pinFrom.setWidth (60); | |
134 pinFrom.setType (ListGridFieldType.ICON); | |
135 pinFrom.setCellIcon(baseUrl + MESSAGES.markerGreen()); | |
136 | |
137 pinFrom.addRecordClickHandler (new RecordClickHandler () { | |
138 @Override | |
139 public void onRecordClick (RecordClickEvent e) { | |
140 Record r = e.getRecord(); | |
141 appendYear(r.getAttribute("date")); | |
142 } | |
143 }); | |
144 | |
145 sedLoadTable.setFields(pinFrom, date, descr); | |
146 return sedLoadTable; | |
147 } | |
148 | |
149 public Canvas createWidget(DataList data) { | |
150 VLayout layout = new VLayout(); | |
151 | |
152 Label title = new Label(data.get(0).getDescription()); | |
153 title.setHeight("25px"); | |
154 | |
155 DynamicForm form = new DynamicForm(); | |
156 form.setNumCols(4); | |
157 yearsItem = new TextItem(MSG.years()); | |
158 yearsItem.setValidators(new IsIntegerValidator()); | |
159 form.setFields(yearsItem); | |
160 | |
161 layout.addMember(title); | |
162 layout.addMember(form); | |
163 | |
164 return layout; | |
165 } | |
166 | |
167 @Override | |
168 protected Data[] getData() { | |
169 validateYears(); | |
170 if (yearsItem != null && !yearsItem.getValueAsString().isEmpty()) { | |
171 List<Data> data = new ArrayList<Data>(); | |
172 | |
173 DataItem yearsdata = new DefaultDataItem( | |
174 "years", "years", yearsItem.getValueAsString().trim()); | |
175 data.add(new DefaultData( | |
176 "years", | |
177 null, | |
178 null, | |
179 new DataItem[] { yearsdata })); | |
180 | |
181 return data.toArray(new Data[data.size()]); | |
182 } | |
183 return new Data[0]; | |
184 } | |
185 | |
186 protected List<String> validateYears() { | |
187 List<String> errors = new ArrayList<String>(); | |
188 NumberFormat nf = NumberFormat.getDecimalFormat(); | |
189 | |
190 if (yearsItem.getValueAsString() == null || | |
191 yearsItem.getValueAsString().trim().isEmpty()) { | |
192 errors.add(MESSAGES.empty_filter()); | |
193 return errors; | |
194 } | |
195 | |
196 String [] sValues = yearsItem.getValueAsString().trim().split(" "); | |
197 String filtered = ""; | |
198 int goodValues = 0; | |
199 for (String sValue: sValues) { | |
200 int value; | |
201 try { | |
202 value = Integer.parseInt(sValue); | |
203 } catch (NumberFormatException e) { | |
204 errors.add(MESSAGES.wrongFormat() + ": " + sValue); | |
205 continue; | |
206 } | |
207 boolean isGood = false; | |
208 for (String validYear: validYears) { | |
209 /* No list contains for strings? */ | |
210 if (sValue.equals(validYear)) { | |
211 isGood = true; | |
212 break; | |
213 } | |
214 } | |
215 if (!isGood) { | |
216 String tmp = MESSAGES.no_data_for_year(); | |
217 tmp = tmp.replace("$1", sValue); | |
218 errors.add(tmp); | |
219 continue; | |
220 } | |
221 goodValues++; | |
222 if (goodValues > 1) { | |
223 filtered += " " + Integer.toString(value); | |
224 } else { | |
225 filtered = Integer.toString(value); | |
226 } | |
227 } | |
228 | |
229 return errors; | |
230 } | |
231 | |
232 protected void fetchSedimentLoadData() { | |
233 Config config = Config.getInstance(); | |
234 String locale = config.getLocale (); | |
235 | |
236 ArtifactDescription adescr = artifact.getArtifactDescription(); | |
237 DataList[] data = adescr.getOldData(); | |
238 | |
239 double[] km = artifact.getArtifactDescription().getKMRange(); | |
240 String river = artifact.getArtifactDescription().getRiver(); | |
241 | |
242 String sq_ti_id = ""; | |
243 validYears = new ArrayList<String>(data.length); | |
244 for (int i = 0; i < data.length; i++) { | |
245 Data str = getData(data[i].getAll(), "sq_ti_id"); | |
246 if (str != null) { | |
247 DataItem[] strItems = str.getItems(); | |
248 sq_ti_id = strItems[0].getStringValue(); | |
249 break; | |
250 } | |
251 } | |
252 | |
253 if (sq_ti_id.isEmpty()){ | |
254 GWT.log("Failed to find sq time interval id in data."); | |
255 } | |
256 | |
257 sedLoadInfoService.getSedimentLoadInfo( | |
258 locale, river, "single", km[0], km[1], sq_ti_id, | |
259 new AsyncCallback<SedimentLoadInfoObject[]>() { | |
260 public void onFailure(Throwable caught) { | |
261 GWT.log("Could not recieve sediment load informations."); | |
262 SC.warn(MSG.getString(caught.getMessage())); | |
263 } | |
264 | |
265 public void onSuccess(SedimentLoadInfoObject[] sedLoad) { | |
266 int num = sedLoad != null ? sedLoad.length :0; | |
267 GWT.log("Recieved " + num + " sediment load informations."); | |
268 | |
269 if (num == 0) { | |
270 return; | |
271 } | |
272 | |
273 addSedimentLoadInfo(sedLoad); | |
274 } | |
275 } | |
276 ); | |
277 } | |
278 | |
279 | |
280 protected void addSedimentLoadInfo (SedimentLoadInfoObject[] sedLoad) { | |
281 for(SedimentLoadInfoObject sl: sedLoad) { | |
282 SedimentLoadInfoRecord rec = new SedimentLoadInfoRecord(sl); | |
283 sedLoadTable.addData(rec); | |
284 validYears.add(rec.getDate()); | |
285 } | |
286 } | |
287 | |
288 protected void appendYear (String year) { | |
289 String oldYears = yearsItem.getValueAsString(); | |
290 if (oldYears != null && !oldYears.isEmpty()) { | |
291 yearsItem.setValue(oldYears.trim() + " " + year); | |
292 } else { | |
293 yearsItem.setValue(year); | |
294 } | |
295 } | |
296 } |