Mercurial > dive4elements > river
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 } |