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 }

http://dive4elements.wald.intevation.org