comparison flys-client/src/main/java/org/dive4elements/river/client/client/ui/GaugeTimeRangePanel.java @ 5834:f507086aa94b

Repaired internal references.
author Sascha L. Teichmann <teichmann@intevation.de>
date Thu, 25 Apr 2013 12:31:32 +0200
parents flys-client/src/main/java/de/intevation/flys/client/client/ui/GaugeTimeRangePanel.java@d449b502602b
children 821a02bbfb4e
comparison
equal deleted inserted replaced
5833:a2bdc0f524e8 5834:f507086aa94b
1 package de.intevation.flys.client.client.ui;
2
3 import com.google.gwt.core.client.GWT;
4 import com.google.gwt.i18n.client.DateTimeFormat;
5
6 import com.smartgwt.client.data.Record;
7 import com.smartgwt.client.types.ListGridFieldType;
8 import com.smartgwt.client.util.SC;
9 import com.smartgwt.client.widgets.Canvas;
10 import com.smartgwt.client.widgets.Label;
11 import com.smartgwt.client.widgets.form.DynamicForm;
12 import com.smartgwt.client.widgets.form.fields.DateRangeItem;
13 import com.smartgwt.client.widgets.grid.CellFormatter;
14 import com.smartgwt.client.widgets.grid.ListGrid;
15 import com.smartgwt.client.widgets.grid.ListGridField;
16 import com.smartgwt.client.widgets.grid.ListGridRecord;
17 import com.smartgwt.client.widgets.grid.events.RecordClickEvent;
18 import com.smartgwt.client.widgets.grid.events.RecordClickHandler;
19 import com.smartgwt.client.widgets.layout.HLayout;
20 import com.smartgwt.client.widgets.layout.VLayout;
21 import com.smartgwt.client.widgets.tab.Tab;
22 import com.smartgwt.client.widgets.tab.TabSet;
23
24 import de.intevation.flys.client.client.Config;
25 import de.intevation.flys.client.client.FLYSConstants;
26 import de.intevation.flys.client.client.ui.range.DischargeInfoDataSource;
27 import de.intevation.flys.client.client.widgets.DischargeTablesChart;
28 import de.intevation.flys.client.shared.model.ArtifactDescription;
29 import de.intevation.flys.client.shared.model.Data;
30 import de.intevation.flys.client.shared.model.DataItem;
31 import de.intevation.flys.client.shared.model.DataList;
32 import de.intevation.flys.client.shared.model.LongRangeData;
33 import de.intevation.flys.client.shared.model.RangeData;
34
35 import java.util.ArrayList;
36 import java.util.Date;
37 import java.util.List;
38
39 /**
40 * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
41 */
42 public class GaugeTimeRangePanel extends RangePanel {
43
44 private static final long serialVersionUID = -157571967010594739L;
45
46 /** The message class that provides i18n strings. */
47 protected FLYSConstants MESSAGES = GWT.create(FLYSConstants.class);
48
49 protected ListGrid yearTable;
50
51 protected DateRangeItem dateRange;
52
53 protected Long maxUpper;
54 protected Long maxLower;
55
56
57 public GaugeTimeRangePanel() {
58 GWT.log("Creating YearInputPanel");
59 yearTable = new ListGrid();
60 yearTable.setAutoFetchData(true);
61 yearTable.setShowHeaderContextMenu(false);
62 }
63
64 protected void setMaxUpper(DataList dataList) {
65 LongRangeData range = (LongRangeData) dataList.get(0);
66 setMaxUpper((Long) range.getUpper());
67 }
68
69 protected void setMaxUpper(Long maxUpper) {
70 this.maxUpper = maxUpper;
71 }
72
73 protected void setMaxLower(DataList dataList) {
74 LongRangeData range = (LongRangeData) dataList.get(0);
75 setMaxLower((Long) range.getLower());
76 }
77
78 protected void setMaxLower(Long maxLower) {
79 this.maxLower = maxLower;
80 }
81
82 @Override
83 public Canvas create(DataList data) {
84 setDataName(data);
85
86 VLayout root = new VLayout();
87
88 root.addMember(createLabel(data));
89 root.addMember(createForm(data));
90 root.addMember(getNextButton());
91
92 initDefaults(data);
93
94 initYearTable();
95
96 long gauge = getGaugeNumber();
97
98 Config config = Config.getInstance();
99 String url = config.getServerUrl();
100 yearTable.setDataSource(new DischargeInfoDataSource(url, gauge));
101
102 helperContainer.addMember(createHelperPanel());
103
104 setMaxUpper(data);
105 setMaxLower(data);
106
107 return root;
108 }
109
110
111 protected Canvas createHelperPanel() {
112 TabSet tabs = new TabSet();
113
114 Tab table = new Tab(MSG.discharge_timeranges());
115 Tab chart = new Tab(MSG.discharge_chart());
116
117 table.setPane(yearTable);
118 chart.setPane(new DischargeTablesChart(artifact));
119
120 tabs.addTab(table, 0);
121 tabs.addTab(chart, 1);
122
123 return tabs;
124 }
125
126
127 /** Put defaults in form. */
128 @Override
129 protected void initDefaults(DataList dataList) {
130 RangeData data = findRangeData(dataList);
131
132 if (data != null) {
133 dateRange.setFromDate(new Date((Long)data.getLower()));
134 }
135
136 dateRange.setToDate(new Date());
137 }
138
139
140 @Override
141 public Canvas createOld(DataList dataList) {
142 GWT.log("create old date.");
143 Data data = dataList.get(0);
144 HLayout layout = new HLayout();
145
146 Label label = new Label(dataList.getLabel());
147 label.setWidth(200);
148 label.setHeight(20);
149
150 Date dl = new Date((Long)((LongRangeData)data).getLower());
151 Date du = new Date((Long)((LongRangeData)data).getUpper());
152
153 @SuppressWarnings("deprecation")
154 DateTimeFormat dtf = DateTimeFormat.getMediumDateFormat();
155 Label value = new Label(dtf.format(dl) + " - " + dtf.format(du));
156 value.setHeight(20);
157
158 layout.addMember(label);
159 layout.addMember(value);
160 layout.addMember(getBackButton(dataList.getState()));
161
162 return layout;
163 }
164
165
166 @Override
167 protected Data[] getData() {
168 long lo = getLowerAsLong();
169 long up = getUpperAsLong();
170
171 return new Data[] { new LongRangeData(getDataName(), null, lo, up) };
172 }
173
174
175 @Override
176 protected Canvas createForm(DataList dataList) {
177 HLayout layout = new HLayout();
178 DynamicForm form = new DynamicForm();
179 dateRange = new DateRangeItem();
180 dateRange.setToTitle(MESSAGES.to());
181 dateRange.setFromTitle(MESSAGES.from());
182 dateRange.setShowTitle(false);
183 form.setFields(dateRange);
184
185 layout.addMember(form);
186 return layout;
187
188 }
189
190
191 @Override
192 public Object getMaxLower() {
193 return maxLower;
194 }
195
196
197 protected long getLowerAsLong() {
198 Date d = dateRange.getFromDate();
199 return d.getTime();
200 }
201
202
203 protected long getUpperAsLong() {
204 Date d = dateRange.getToDate();
205 return d.getTime();
206 }
207
208
209 @Override
210 public Object getMaxUpper() {
211 Date d = dateRange.getToDate();
212 return new Long(d.getTime());
213 }
214
215
216 @Override
217 public void setLower(String lower) {
218 try {
219 long value = Long.valueOf(lower);
220 dateRange.setFromDate(new Date(value));
221 }
222 catch (NumberFormatException nfe) {
223 GWT.log("could not parse lower date.");
224 SC.warn(MESSAGES.warning_cannot_parse_date());
225 }
226 }
227
228
229 @Override
230 public void setUpper(String upper) {
231 try {
232 long value = Long.valueOf(upper);
233 dateRange.setToDate(new Date(value));
234 }
235 catch (NumberFormatException nfe) {
236 GWT.log("could not parse upper date.");
237 SC.warn(MESSAGES.warning_cannot_parse_date());
238 }
239 }
240
241
242 protected String buildDateString(String raw) {
243 if (raw == null || raw.length() == 0) {
244 return "";
245 }
246
247 long value = Long.valueOf(raw);
248 Date date = new Date(value);
249 @SuppressWarnings("deprecation")
250 DateTimeFormat dtf = DateTimeFormat.getMediumDateFormat();
251
252 return dtf.format(date);
253 }
254
255
256 protected ListGrid initYearTable() {
257 String baseUrl = GWT.getHostPageBaseURL();
258
259 yearTable.setWidth100();
260 yearTable.setHeight100();
261 yearTable.setShowRecordComponents(true);
262 yearTable.setShowRecordComponentsByCell(true);
263 yearTable.setEmptyMessage(MESSAGES.empty_filter());
264 yearTable.setCanReorderFields(false);
265
266 CellFormatter cf = new CellFormatter() {
267 @Override
268 public String format(
269 Object value,
270 ListGridRecord record,
271 int rowNum, int colNum
272 ) {
273 if (value == null) {
274 return null;
275 }
276 else if (value.toString().equals("-1")) {
277 return "";
278 }
279 else if (colNum == 3 || colNum == 4) {
280 return buildDateString(value.toString());
281 }
282 else {
283 return value.toString();
284 }
285 }
286 };
287
288
289 ListGridField addstart = new ListGridField ("", MESSAGES.from());
290 addstart.setType (ListGridFieldType.ICON);
291 addstart.setWidth (20);
292 addstart.setCellIcon(baseUrl + MESSAGES.markerGreen());
293 addstart.addRecordClickHandler(new RecordClickHandler() {
294 @Override
295 public void onRecordClick(RecordClickEvent e) {
296 Record r = e.getRecord();
297 if (r.getAttribute("start").equals("-1")) {
298 return;
299 }
300 else {
301 setLower(r.getAttribute("start"));
302 }
303 }
304 });
305
306 ListGridField addend = new ListGridField ("", MESSAGES.to());
307 addend.setType (ListGridFieldType.ICON);
308 addend.setWidth (20);
309 addend.setCellIcon(baseUrl + MESSAGES.markerRed());
310 addend.addRecordClickHandler(new RecordClickHandler() {
311 @Override
312 public void onRecordClick(RecordClickEvent e) {
313 Record r = e.getRecord();
314 if (r.getAttribute("end").equals("-1")) {
315 return;
316 }
317 else {
318 setUpper(r.getAttribute("end"));
319 }
320 }
321 });
322
323 ListGridField desc =
324 new ListGridField("description", MESSAGES.discharge_curve_gaugeless());
325 desc.setType(ListGridFieldType.TEXT);
326 desc.setWidth("*");
327
328 ListGridField start =
329 new ListGridField("start", MESSAGES.start_year());
330 start.setType(ListGridFieldType.INTEGER);
331 start.setWidth(100);
332 start.setCellFormatter(cf);
333
334 ListGridField end =
335 new ListGridField("end", MESSAGES.end_year());
336 end.setType(ListGridFieldType.INTEGER);
337 end.setWidth(100);
338 end.setCellFormatter(cf);
339
340 yearTable.setFields(addstart, addend, desc, start, end);
341
342 return yearTable;
343 }
344
345
346 protected long getGaugeNumber() {
347 ArtifactDescription adescr = artifact.getArtifactDescription();
348 DataList[] data = adescr.getOldData();
349
350 String gauge = "";
351 if (data != null && data.length > 0) {
352 for (int i = 0; i < data.length; i++) {
353 DataList dl = data[i];
354 if (dl.getState().equals("state.winfo.historicalq.reference_gauge")) {
355 for (int j = 0; j < dl.size(); j++) {
356 Data d = dl.get(j);
357 DataItem[] di = d.getItems();
358 if (di != null && di.length == 1) {
359 gauge = d.getItems()[0].getStringValue();
360 }
361 }
362 }
363 }
364 }
365 try {
366 return Long.parseLong(gauge);
367 }
368 catch (NumberFormatException nfe) {
369 GWT.log("Error parsing gauge.");
370 return 0;
371 }
372 }
373
374
375 /** Return List of error messages, if not validated. */
376 @Override
377 public List<String> validate() {
378 List<String> errors = new ArrayList<String>();
379
380 Date from = dateRange.getFromDate();
381 Date to = dateRange.getToDate();
382
383 if (from == null || to == null) {
384 String msg = MSG.error_validate_date_range();
385 errors.add(msg);
386 }
387
388 long maxLow = (Long) getMaxLower();
389 long maxUpper = (Long) getMaxUpper();
390 long inLow = from.getTime();
391 long inUpper = to.getTime();
392
393 if (inLow < maxLow) {
394 errors.add(MSG.error_validate_date_range_invalid());
395 }
396 else if (inUpper > maxUpper) {
397 errors.add(MSG.error_validate_date_range_invalid());
398 }
399 else if (inLow > inUpper) {
400 errors.add(MSG.error_validate_date_range_invalid());
401 }
402
403 return errors;
404 }
405 }

http://dive4elements.wald.intevation.org