Mercurial > dive4elements > river
comparison gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DistancePanel.java @ 9064:28c50f5efceb
work on uinfo-vegetation-zones table
author | gernotbelger |
---|---|
date | Wed, 09 May 2018 16:31:12 +0200 |
parents | 5e38e2924c07 |
children | 8c0d1542c1d8 |
comparison
equal
deleted
inserted
replaced
9063:b6919e3c2d86 | 9064:28c50f5efceb |
---|---|
6 * documentation coming with Dive4Elements River for details. | 6 * documentation coming with Dive4Elements River for details. |
7 */ | 7 */ |
8 | 8 |
9 package org.dive4elements.river.client.client.ui; | 9 package org.dive4elements.river.client.client.ui; |
10 | 10 |
11 import java.util.ArrayList; | |
12 import java.util.LinkedHashMap; | |
13 import java.util.List; | |
14 | |
15 import org.dive4elements.river.client.client.Config; | |
16 import org.dive4elements.river.client.client.FLYSConstants; | |
17 import org.dive4elements.river.client.client.event.FilterHandler; | |
18 import org.dive4elements.river.client.client.event.RangeFilterEvent; | |
19 import org.dive4elements.river.client.client.event.StringFilterEvent; | |
20 import org.dive4elements.river.client.client.ui.range.DistanceInfoDataSource; | |
21 import org.dive4elements.river.client.client.ui.range.LocationsTable; | |
22 import org.dive4elements.river.client.client.ui.range.RangeTable; | |
23 import org.dive4elements.river.client.shared.model.ArtifactDescription; | |
24 import org.dive4elements.river.client.shared.model.Data; | |
25 import org.dive4elements.river.client.shared.model.DataItem; | |
26 import org.dive4elements.river.client.shared.model.DataList; | |
27 import org.dive4elements.river.client.shared.model.DefaultData; | |
28 import org.dive4elements.river.client.shared.model.DefaultDataItem; | |
29 | |
11 import com.google.gwt.core.client.GWT; | 30 import com.google.gwt.core.client.GWT; |
12 import com.google.gwt.i18n.client.NumberFormat; | 31 import com.google.gwt.i18n.client.NumberFormat; |
13 | |
14 import com.smartgwt.client.data.AdvancedCriteria; | 32 import com.smartgwt.client.data.AdvancedCriteria; |
15 import com.smartgwt.client.data.Criteria; | 33 import com.smartgwt.client.data.Criteria; |
16 import com.smartgwt.client.data.Criterion; | 34 import com.smartgwt.client.data.Criterion; |
17 import com.smartgwt.client.data.Record; | 35 import com.smartgwt.client.data.Record; |
18 import com.smartgwt.client.types.Alignment; | 36 import com.smartgwt.client.types.Alignment; |
35 import com.smartgwt.client.widgets.tab.Tab; | 53 import com.smartgwt.client.widgets.tab.Tab; |
36 import com.smartgwt.client.widgets.tab.TabSet; | 54 import com.smartgwt.client.widgets.tab.TabSet; |
37 import com.smartgwt.client.widgets.tab.events.TabSelectedEvent; | 55 import com.smartgwt.client.widgets.tab.events.TabSelectedEvent; |
38 import com.smartgwt.client.widgets.tab.events.TabSelectedHandler; | 56 import com.smartgwt.client.widgets.tab.events.TabSelectedHandler; |
39 | 57 |
40 import org.dive4elements.river.client.client.Config; | |
41 import org.dive4elements.river.client.client.FLYSConstants; | |
42 import org.dive4elements.river.client.client.event.FilterHandler; | |
43 import org.dive4elements.river.client.client.event.RangeFilterEvent; | |
44 import org.dive4elements.river.client.client.event.StringFilterEvent; | |
45 import org.dive4elements.river.client.client.ui.range.DistanceInfoDataSource; | |
46 import org.dive4elements.river.client.client.ui.range.LocationsTable; | |
47 import org.dive4elements.river.client.client.ui.range.RangeTable; | |
48 import org.dive4elements.river.client.shared.model.ArtifactDescription; | |
49 import org.dive4elements.river.client.shared.model.Data; | |
50 import org.dive4elements.river.client.shared.model.DataItem; | |
51 import org.dive4elements.river.client.shared.model.DataList; | |
52 import org.dive4elements.river.client.shared.model.DefaultData; | |
53 import org.dive4elements.river.client.shared.model.DefaultDataItem; | |
54 | |
55 import java.util.ArrayList; | |
56 import java.util.LinkedHashMap; | |
57 import java.util.List; | |
58 | |
59 | |
60 /** Panel to allow input of distance for calculation range. */ | 58 /** Panel to allow input of distance for calculation range. */ |
61 public class DistancePanel | 59 public class DistancePanel extends AbstractUIProvider implements BlurHandler, FilterHandler { |
62 extends AbstractUIProvider implements BlurHandler, FilterHandler | |
63 { | |
64 | 60 |
65 private static final long serialVersionUID = -883142387908664588L; | 61 private static final long serialVersionUID = -883142387908664588L; |
66 | 62 |
67 public static final int DEFAULT_STEP_WIDTH = 100; | 63 public static final int DEFAULT_STEP_WIDTH = 100; |
68 | 64 |
69 public static final String FIELD_LOWER = "ld_from"; | 65 public static final String FIELD_LOWER = "ld_from"; |
70 public static final String FIELD_UPPER = "ld_to"; | 66 public static final String FIELD_UPPER = "ld_to"; |
71 public static final String FIELD_STEP = "ld_step"; | 67 public static final String FIELD_STEP = "ld_step"; |
72 | |
73 | 68 |
74 protected FLYSConstants MSG = GWT.create(FLYSConstants.class); | 69 protected FLYSConstants MSG = GWT.create(FLYSConstants.class); |
75 | 70 |
76 protected RangeTable distancesTable; | 71 protected RangeTable distancesTable; |
77 protected LocationsTable locationsTable; | 72 protected LocationsTable locationsTable; |
78 | 73 |
79 protected DoubleRangePanel distancePanel; | 74 protected DoubleRangePanel distancePanel; |
80 | 75 |
81 protected TableFilter filterDescription; | 76 protected TableFilter filterDescription; |
91 | 86 |
92 public DistancePanel() { | 87 public DistancePanel() { |
93 this("right"); | 88 this("right"); |
94 } | 89 } |
95 | 90 |
96 | 91 public DistancePanel(final String labelOrientation) { |
97 public DistancePanel(String labelOrientation) { | 92 this.distancePanel = new DoubleRangePanel(labelFrom(), labelTo(), labelStep(), 0d, 0d, 0d, 250, this, labelOrientation); |
98 distancePanel = new DoubleRangePanel( | 93 } |
99 labelFrom(), labelTo(), labelStep(), | 94 |
100 0d, 0d, 0d, 250, this, labelOrientation); | 95 @Override |
101 } | 96 public Canvas create(final DataList data) { |
102 | 97 final VLayout layout = new VLayout(); |
103 | |
104 @Override | |
105 public Canvas create(DataList data) { | |
106 VLayout layout = new VLayout(); | |
107 layout.setMembersMargin(10); | 98 layout.setMembersMargin(10); |
108 | 99 |
109 Label label = new Label(getLabel()); | 100 final Label label = new Label(getLabel()); |
110 | 101 |
111 Canvas submit = getNextButton(); | 102 final Canvas submit = getNextButton(); |
112 | 103 |
113 label.setHeight(25); | 104 label.setHeight(25); |
114 distancePanel.setHeight(50); | 105 this.distancePanel.setHeight(50); |
115 | 106 |
116 layout.addMember(label); | 107 layout.addMember(label); |
117 layout.addMember(distancePanel); | 108 layout.addMember(this.distancePanel); |
118 layout.addMember(submit); | 109 layout.addMember(submit); |
119 | 110 |
120 initMinMaxValues(data); | 111 initMinMaxValues(data); |
121 initDefaultValues(data); | 112 initDefaultValues(data); |
122 initHelperPanel(); | 113 initHelperPanel(); |
123 | 114 |
124 return layout; | 115 return layout; |
125 } | 116 } |
126 | 117 |
127 | 118 @Override |
128 @Override | 119 public Canvas createOld(final DataList dataList) { |
129 public Canvas createOld(DataList dataList) { | 120 final String s = getOldSelectionString(dataList); |
130 String s = getOldSelectionString(dataList); | 121 final String l = dataList.getLabel(); |
131 String l = dataList.getLabel(); | 122 |
132 | 123 final Label label = new Label(l); |
133 Label label = new Label(l); | 124 final Label selected = new Label(s); |
134 Label selected = new Label(s); | 125 |
135 | 126 final HLayout layout = new HLayout(); |
136 HLayout layout = new HLayout(); | |
137 | 127 |
138 layout.setWidth(400); | 128 layout.setWidth(400); |
139 label.setWidth(200); | 129 label.setWidth(200); |
140 selected.setWidth(130); | 130 selected.setWidth(130); |
141 | 131 |
144 layout.addMember(getBackButton(dataList.getState())); | 134 layout.addMember(getBackButton(dataList.getState())); |
145 | 135 |
146 return layout; | 136 return layout; |
147 } | 137 } |
148 | 138 |
149 | 139 protected String getOldSelectionString(final DataList dataList) { |
150 protected String getOldSelectionString(DataList dataList) { | 140 final List<Data> items = dataList.getAll(); |
151 List<Data> items = dataList.getAll(); | 141 |
152 | 142 final Data dFrom = getData(items, getLowerField()); |
153 Data dFrom = getData(items, getLowerField()); | 143 final Data dTo = getData(items, getUpperField()); |
154 Data dTo = getData(items, getUpperField()); | 144 final Data dStep = getData(items, getStepField()); |
155 Data dStep = getData(items, getStepField()); | 145 |
156 | 146 final DataItem[] from = dFrom.getItems(); |
157 DataItem[] from = dFrom.getItems(); | 147 final DataItem[] to = dTo.getItems(); |
158 DataItem[] to = dTo.getItems(); | 148 final DataItem[] step = dStep.getItems(); |
159 DataItem[] step = dStep.getItems(); | 149 |
160 | 150 final StringBuilder sb = new StringBuilder(); |
161 StringBuilder sb = new StringBuilder(); | |
162 sb.append(from[0].getLabel()); | 151 sb.append(from[0].getLabel()); |
163 sb.append(" " + getUnitFrom() + " - "); | 152 sb.append(" " + getUnitFrom() + " - "); |
164 sb.append(to[0].getLabel()); | 153 sb.append(to[0].getLabel()); |
165 sb.append(" " + getUnitTo() + " - "); | 154 sb.append(" " + getUnitTo() + " - "); |
166 sb.append(step[0].getLabel()); | 155 sb.append(step[0].getLabel()); |
167 sb.append(" " + getUnitStep()); | 156 sb.append(" " + getUnitStep()); |
168 | 157 |
169 return sb.toString(); | 158 return sb.toString(); |
170 } | 159 } |
171 | 160 |
172 | |
173 protected String getLabel() { | 161 protected String getLabel() { |
174 return MSG.distance_state(); | 162 return this.MSG.distance_state(); |
175 } | 163 } |
176 | |
177 | 164 |
178 protected String labelFrom() { | 165 protected String labelFrom() { |
179 return getLabelFrom() + " [" + getUnitFrom() + "]"; | 166 return getLabelFrom() + " [" + getUnitFrom() + "]"; |
180 } | 167 } |
181 | 168 |
182 | |
183 protected String getLabelFrom() { | 169 protected String getLabelFrom() { |
184 return MSG.dpLabelFrom(); | 170 return this.MSG.dpLabelFrom(); |
185 } | 171 } |
186 | |
187 | 172 |
188 protected String getUnitFrom() { | 173 protected String getUnitFrom() { |
189 return MSG.dpUnitFrom(); | 174 return this.MSG.dpUnitFrom(); |
190 } | 175 } |
191 | |
192 | 176 |
193 protected String labelTo() { | 177 protected String labelTo() { |
194 return getLabelTo() + " [" + getUnitTo() + "]"; | 178 return getLabelTo() + " [" + getUnitTo() + "]"; |
195 } | 179 } |
196 | 180 |
197 | |
198 protected String getLabelTo() { | 181 protected String getLabelTo() { |
199 return MSG.dpLabelTo(); | 182 return this.MSG.dpLabelTo(); |
200 } | 183 } |
201 | |
202 | 184 |
203 protected String getUnitTo() { | 185 protected String getUnitTo() { |
204 return MSG.dpUnitTo(); | 186 return this.MSG.dpUnitTo(); |
205 } | 187 } |
206 | |
207 | 188 |
208 protected String labelStep() { | 189 protected String labelStep() { |
209 return getLabelStep() + " [" + getUnitStep() + "]"; | 190 return getLabelStep() + " [" + getUnitStep() + "]"; |
210 } | 191 } |
211 | 192 |
212 | |
213 protected String getLabelStep() { | 193 protected String getLabelStep() { |
214 return MSG.dpLabelStep(); | 194 return this.MSG.dpLabelStep(); |
215 } | 195 } |
216 | |
217 | 196 |
218 protected String getUnitStep() { | 197 protected String getUnitStep() { |
219 return MSG.dpUnitStep(); | 198 return this.MSG.dpUnitStep(); |
220 } | 199 } |
221 | |
222 | 200 |
223 protected String getLowerField() { | 201 protected String getLowerField() { |
224 return FIELD_LOWER; | 202 return FIELD_LOWER; |
225 } | 203 } |
226 | 204 |
227 | |
228 protected String getUpperField() { | 205 protected String getUpperField() { |
229 return FIELD_UPPER; | 206 return FIELD_UPPER; |
230 } | 207 } |
231 | 208 |
232 | |
233 protected String getStepField() { | 209 protected String getStepField() { |
234 return FIELD_STEP; | 210 return FIELD_STEP; |
235 } | 211 } |
236 | 212 |
237 | |
238 @Override | 213 @Override |
239 public List<String> validate() { | 214 public List<String> validate() { |
240 List<String> errors = new ArrayList<String>(); | 215 final List<String> errors = new ArrayList<String>(); |
241 | 216 |
242 if (!distancePanel.validateForm()) { | 217 if (!this.distancePanel.validateForm()) { |
243 errors.add(MSG.wrongFormat()); | 218 errors.add(this.MSG.wrongFormat()); |
244 | 219 |
245 return errors; | 220 return errors; |
246 } | 221 } |
247 | 222 |
248 validateFrom(errors); | 223 validateFrom(errors); |
249 validateTo(errors); | 224 validateTo(errors); |
250 | 225 |
251 return errors; | 226 return errors; |
252 } | 227 } |
253 | 228 |
254 | 229 protected void validateFrom(final List<String> errors) { |
255 protected void validateFrom(List<String> errors) { | 230 final double from = this.distancePanel.getFrom(); |
256 double from = distancePanel.getFrom(); | 231 |
257 | 232 if (from < this.min || from > this.max) { |
258 if (from < min || from > max) { | 233 final NumberFormat nf = NumberFormat.getDecimalFormat(); |
259 NumberFormat nf = NumberFormat.getDecimalFormat(); | 234 |
260 | 235 String tmp = this.MSG.error_validate_lower_range(); |
261 String tmp = MSG.error_validate_lower_range(); | 236 tmp = tmp.replace("$1", nf.format(from)); |
262 tmp = tmp.replace("$1", nf.format(from)); | 237 tmp = tmp.replace("$2", nf.format(this.min)); |
263 tmp = tmp.replace("$2", nf.format(min)); | 238 |
264 | 239 this.distancePanel.setFrom(this.min); |
265 distancePanel.setFrom(min); | |
266 errors.add(tmp); | 240 errors.add(tmp); |
267 } | 241 } |
268 } | 242 } |
269 | 243 |
270 | 244 protected void validateTo(final List<String> errors) { |
271 protected void validateTo(List<String> errors) { | 245 final double to = this.distancePanel.getTo(); |
272 double to = distancePanel.getTo(); | 246 |
273 | 247 if (to < this.min || to > this.max) { |
274 if (to < min || to > max) { | 248 final NumberFormat nf = NumberFormat.getDecimalFormat(); |
275 NumberFormat nf = NumberFormat.getDecimalFormat(); | 249 |
276 | 250 String tmp = this.MSG.error_validate_upper_range(); |
277 String tmp = MSG.error_validate_upper_range(); | 251 tmp = tmp.replace("$1", nf.format(to)); |
278 tmp = tmp.replace("$1", nf.format(to)); | 252 tmp = tmp.replace("$2", nf.format(this.max)); |
279 tmp = tmp.replace("$2", nf.format(max)); | 253 |
280 | 254 this.distancePanel.setTo(this.max); |
281 distancePanel.setTo(max); | |
282 errors.add(tmp); | 255 errors.add(tmp); |
283 } | 256 } |
284 } | 257 } |
285 | 258 |
286 | |
287 @Override | 259 @Override |
288 public Data[] getData() { | 260 public Data[] getData() { |
289 Data[] data = new Data[4]; | 261 final Data[] data = new Data[4]; |
290 | 262 |
291 data[0] = getDataFrom(); | 263 data[0] = getDataFrom(); |
292 data[1] = getDataTo(); | 264 data[1] = getDataTo(); |
293 data[2] = getDataStep(); | 265 data[2] = getDataStep(); |
294 | 266 |
295 DataItem item = new DefaultDataItem("ld_mode","ld_mode", "distance"); | 267 final DataItem item = new DefaultDataItem("ld_mode", "ld_mode", "distance"); |
296 data[3] = new DefaultData( | 268 data[3] = new DefaultData("ld_mode", null, null, new DataItem[] { item }); |
297 "ld_mode", null, null, new DataItem[] { item }); | |
298 | 269 |
299 return data; | 270 return data; |
300 } | 271 } |
301 | 272 |
302 | |
303 protected Data getDataFrom() { | 273 protected Data getDataFrom() { |
304 String value = String.valueOf(distancePanel.getFrom()); | 274 final String value = String.valueOf(this.distancePanel.getFrom()); |
305 String field = getLowerField(); | 275 final String field = getLowerField(); |
306 | 276 |
307 DataItem item = new DefaultDataItem(field, field, value); | 277 final DataItem item = new DefaultDataItem(field, field, value); |
308 return new DefaultData( | 278 return new DefaultData(field, null, null, new DataItem[] { item }); |
309 field, null, null, new DataItem[] { item }); | 279 } |
310 } | |
311 | |
312 | 280 |
313 protected Data getDataTo() { | 281 protected Data getDataTo() { |
314 String value = String.valueOf(distancePanel.getTo()); | 282 final String value = String.valueOf(this.distancePanel.getTo()); |
315 String field = getUpperField(); | 283 final String field = getUpperField(); |
316 | 284 |
317 DataItem item = new DefaultDataItem(field, field, value); | 285 final DataItem item = new DefaultDataItem(field, field, value); |
318 return new DefaultData( | 286 return new DefaultData(field, null, null, new DataItem[] { item }); |
319 field, null, null, new DataItem[] { item }); | 287 } |
320 } | |
321 | |
322 | 288 |
323 protected Data getDataStep() { | 289 protected Data getDataStep() { |
324 String value = String.valueOf(distancePanel.getStep()); | 290 final String value = String.valueOf(this.distancePanel.getStep()); |
325 String field = getStepField(); | 291 final String field = getStepField(); |
326 | 292 |
327 DataItem item = new DefaultDataItem(field, field, value); | 293 final DataItem item = new DefaultDataItem(field, field, value); |
328 return new DefaultData( | 294 return new DefaultData(field, null, null, new DataItem[] { item }); |
329 field, null, null, new DataItem[] { item }); | 295 } |
330 } | 296 |
331 | 297 @Override |
332 | 298 public void onBlur(final BlurEvent event) { |
333 @Override | 299 this.distancePanel.validateForm(); |
334 public void onBlur(BlurEvent event) { | 300 } |
335 distancePanel.validateForm(); | 301 |
336 } | 302 protected void initMinMaxValues(final DataList data) { |
337 | 303 final Data f = getData(data.getAll(), getLowerField()); |
338 | 304 final Data t = getData(data.getAll(), getUpperField()); |
339 protected void initMinMaxValues(DataList data) { | 305 |
340 Data f = getData(data.getAll(), getLowerField()); | 306 final DataItem[] fItems = f.getItems(); |
341 Data t = getData(data.getAll(), getUpperField()); | 307 final DataItem[] tItems = t.getItems(); |
342 | |
343 DataItem[] fItems = f.getItems(); | |
344 DataItem[] tItems = t.getItems(); | |
345 | 308 |
346 try { | 309 try { |
347 min = Double.valueOf(fItems[0].getStringValue()); | 310 this.min = Double.valueOf(fItems[0].getStringValue()); |
348 max = Double.valueOf(tItems[0].getStringValue()); | 311 this.max = Double.valueOf(tItems[0].getStringValue()); |
349 } | 312 } |
350 catch (NumberFormatException nfe) { | 313 catch (final NumberFormatException nfe) { |
351 min = -Double.MAX_VALUE; | 314 this.min = -Double.MAX_VALUE; |
352 max = Double.MAX_VALUE; | 315 this.max = Double.MAX_VALUE; |
353 } | 316 } |
354 } | 317 } |
355 | 318 |
356 | 319 protected void initDefaultValues(final DataList data) { |
357 protected void initDefaultValues(DataList data) { | |
358 initDefaultFrom(data); | 320 initDefaultFrom(data); |
359 initDefaultTo(data); | 321 initDefaultTo(data); |
360 initDefaultStep(data); | 322 initDefaultStep(data); |
361 } | 323 } |
362 | 324 |
363 | 325 protected void initDefaultFrom(final DataList data) { |
364 protected void initDefaultFrom(DataList data) { | 326 final Data f = getData(data.getAll(), getLowerField()); |
365 Data f = getData(data.getAll(), getLowerField()); | |
366 | 327 |
367 double from = getDefaultFrom(); | 328 double from = getDefaultFrom(); |
368 | 329 |
369 try { | 330 try { |
370 from = getDefaultValue(f); | 331 from = getDefaultValue(f); |
371 } | 332 } |
372 catch (NumberFormatException nfe) { | 333 catch (final NumberFormatException nfe) { |
373 // do nothing | 334 // do nothing |
374 } | 335 } |
375 | 336 |
376 distancePanel.setFrom(from); | 337 this.distancePanel.setFrom(from); |
377 } | 338 } |
378 | |
379 | 339 |
380 protected double getDefaultFrom() { | 340 protected double getDefaultFrom() { |
381 return min; | 341 return this.min; |
382 } | 342 } |
383 | 343 |
384 | 344 protected void initDefaultTo(final DataList data) { |
385 protected void initDefaultTo(DataList data) { | 345 final Data t = getData(data.getAll(), getUpperField()); |
386 Data t = getData(data.getAll(), getUpperField()); | |
387 | 346 |
388 double to = getDefaultTo(); | 347 double to = getDefaultTo(); |
389 | 348 |
390 try { | 349 try { |
391 to = getDefaultValue(t); | 350 to = getDefaultValue(t); |
392 } | 351 } |
393 catch (NumberFormatException nfe) { | 352 catch (final NumberFormatException nfe) { |
394 // do nothing | 353 // do nothing |
395 } | 354 } |
396 | 355 |
397 distancePanel.setTo(to); | 356 this.distancePanel.setTo(to); |
398 } | 357 } |
399 | |
400 | 358 |
401 protected double getDefaultTo() { | 359 protected double getDefaultTo() { |
402 return max; | 360 return this.max; |
403 } | 361 } |
404 | 362 |
405 | 363 protected void initDefaultStep(final DataList data) { |
406 protected void initDefaultStep(DataList data) { | 364 final Data s = getData(data.getAll(), getStepField()); |
407 Data s = getData(data.getAll(), getStepField()); | |
408 | 365 |
409 double step = getDefaultStep(); | 366 double step = getDefaultStep(); |
410 | 367 |
411 try { | 368 try { |
412 step = getDefaultValue(s); | 369 step = getDefaultValue(s); |
413 } | 370 } |
414 catch (NumberFormatException nfe) { | 371 catch (final NumberFormatException nfe) { |
415 // do nothing | 372 // do nothing |
416 } | 373 } |
417 | 374 |
418 distancePanel.setStep(step); | 375 this.distancePanel.setStep(step); |
419 } | 376 } |
420 | |
421 | 377 |
422 protected double getDefaultStep() { | 378 protected double getDefaultStep() { |
423 return DEFAULT_STEP_WIDTH; | 379 return DEFAULT_STEP_WIDTH; |
424 } | 380 } |
425 | 381 |
426 | |
427 /** Gets the double from default in data, null if none. */ | 382 /** Gets the double from default in data, null if none. */ |
428 protected double getDefaultValue(Data data) | 383 protected double getDefaultValue(final Data data) throws NumberFormatException { |
429 throws NumberFormatException | 384 final DataItem def = data.getDefault(); |
430 { | 385 final String defValue = def != null ? def.getStringValue() : null; |
431 DataItem def = data.getDefault(); | |
432 String defValue = def != null ? def.getStringValue() : null; | |
433 | 386 |
434 return Double.valueOf(defValue); | 387 return Double.valueOf(defValue); |
435 } | 388 } |
436 | 389 |
437 | |
438 protected void initHelperPanel() { | 390 protected void initHelperPanel() { |
439 distancesTable = new RangeTable(); | 391 this.distancesTable = new RangeTable(); |
440 locationsTable = new LocationsTable(); | 392 this.locationsTable = new LocationsTable(); |
441 | 393 |
442 Config config = Config.getInstance(); | 394 final Config config = Config.getInstance(); |
443 String url = config.getServerUrl(); | 395 final String url = config.getServerUrl(); |
444 String river = getRiverName(); | 396 final String river = getRiverName(); |
445 | 397 |
446 distancesTable.setAutoFetchData(true); | 398 this.distancesTable.setAutoFetchData(true); |
447 locationsTable.setAutoFetchData(true); | 399 this.locationsTable.setAutoFetchData(true); |
448 distancesTable.setDataSource(new DistanceInfoDataSource( | 400 this.distancesTable.setDataSource(new DistanceInfoDataSource(url, river, "distances")); |
449 url, river, "distances")); | 401 this.locationsTable.setDataSource(new DistanceInfoDataSource(url, river, "locations")); |
450 locationsTable.setDataSource(new DistanceInfoDataSource( | 402 |
451 url, river, "locations")); | 403 this.distancesTable.addRecordClickHandler(new RecordClickHandler() { |
452 | |
453 distancesTable.addRecordClickHandler(new RecordClickHandler() { | |
454 @Override | 404 @Override |
455 public void onRecordClick(RecordClickEvent e) { | 405 public void onRecordClick(final RecordClickEvent e) { |
456 Record r = e.getRecord(); | 406 final Record r = e.getRecord(); |
457 | 407 |
458 String from = r.getAttribute("from"); | 408 final String from = r.getAttribute("from"); |
459 String to = r.getAttribute("to"); | 409 final String to = r.getAttribute("to"); |
460 | 410 |
461 try { | 411 try { |
462 distancePanel.setFrom(Double.valueOf(from)); | 412 DistancePanel.this.distancePanel.setFrom(Double.valueOf(from)); |
463 distancePanel.setTo(Double.valueOf(to)); | 413 DistancePanel.this.distancePanel.setTo(Double.valueOf(to)); |
464 } | 414 } |
465 catch (NumberFormatException nfe) { | 415 catch (final NumberFormatException nfe) { |
466 SC.warn(MSG.wrongFormat()); | 416 SC.warn(DistancePanel.this.MSG.wrongFormat()); |
467 } | 417 } |
468 } | 418 } |
469 }); | 419 }); |
470 | 420 |
471 locationsTable.addRecordClickHandler(new RecordClickHandler() { | 421 this.locationsTable.addRecordClickHandler(new RecordClickHandler() { |
472 @Override | 422 @Override |
473 public void onRecordClick(RecordClickEvent e) { | 423 public void onRecordClick(final RecordClickEvent e) { |
474 Record r = e.getRecord(); | 424 final Record r = e.getRecord(); |
475 int field = e.getFieldNum(); | 425 final int field = e.getFieldNum(); |
476 | 426 |
477 try { | 427 try { |
478 String value = r.getAttribute("from"); | 428 final String value = r.getAttribute("from"); |
479 | 429 |
480 switch (field) { | 430 switch (field) { |
481 case 0: | 431 case 0: |
482 distancePanel.setFrom(Double.valueOf(value)); | 432 DistancePanel.this.distancePanel.setFrom(Double.valueOf(value)); |
483 break; | 433 break; |
484 case 1: | 434 case 1: |
485 distancePanel.setTo(Double.valueOf(value)); | 435 DistancePanel.this.distancePanel.setTo(Double.valueOf(value)); |
486 break; | 436 break; |
487 } | 437 } |
488 } | 438 } |
489 catch (NumberFormatException nfe) { | 439 catch (final NumberFormatException nfe) { |
490 SC.warn(MSG.wrongFormat()); | 440 SC.warn(DistancePanel.this.MSG.wrongFormat()); |
491 } | 441 } |
492 } | 442 } |
493 }); | 443 }); |
494 | 444 |
495 tabs = new TabSet(); | 445 this.tabs = new TabSet(); |
496 tabs.setWidth100(); | 446 this.tabs.setWidth100(); |
497 tabs.setHeight100(); | 447 this.tabs.setHeight100(); |
498 | 448 |
499 Tab locations = new Tab(MSG.locations()); | 449 final Tab locations = new Tab(this.MSG.locations()); |
500 Tab distances = new Tab(MSG.distance()); | 450 final Tab distances = new Tab(this.MSG.distance()); |
501 | 451 |
502 locations.setPane(locationsTable); | 452 locations.setPane(this.locationsTable); |
503 distances.setPane(distancesTable); | 453 distances.setPane(this.distancesTable); |
504 | 454 |
505 tabs.addTab(locations, 0); | 455 this.tabs.addTab(locations, 0); |
506 tabs.addTab(distances, 1); | 456 this.tabs.addTab(distances, 1); |
507 | 457 |
508 filterResultCount = new StaticTextItem(MSG.resultCount()); | 458 this.filterResultCount = new StaticTextItem(this.MSG.resultCount()); |
509 filterResultCount.setTitleAlign(Alignment.LEFT); | 459 this.filterResultCount.setTitleAlign(Alignment.LEFT); |
510 filterResultCount.setTitleStyle("color: #000"); | 460 this.filterResultCount.setTitleStyle("color: #000"); |
511 | 461 |
512 filterDescription = new TableFilter(); | 462 this.filterDescription = new TableFilter(); |
513 filterDescription.setHeight("30px"); | 463 this.filterDescription.setHeight("30px"); |
514 filterDescription.addFilterHandler(this); | 464 this.filterDescription.addFilterHandler(this); |
515 | 465 |
516 filterRange = new RangeTableFilter(); | 466 this.filterRange = new RangeTableFilter(); |
517 filterRange.setHeight("30px"); | 467 this.filterRange.setHeight("30px"); |
518 filterRange.addFilterHandler(this); | 468 this.filterRange.addFilterHandler(this); |
519 filterRange.setVisible(false); | 469 this.filterRange.setVisible(false); |
520 | 470 |
521 SelectItem filterCriteria = new SelectItem(); | 471 final SelectItem filterCriteria = new SelectItem(); |
522 filterCriteria.setShowTitle(false); | 472 filterCriteria.setShowTitle(false); |
523 filterCriteria.setWidth(100); | 473 filterCriteria.setWidth(100); |
524 filterCriteria.addChangedHandler(new ChangedHandler() { | 474 filterCriteria.addChangedHandler(new ChangedHandler() { |
525 @Override | 475 @Override |
526 public void onChanged(ChangedEvent e) { | 476 public void onChanged(final ChangedEvent e) { |
527 if(e.getValue().toString().equals("range")) { | 477 if (e.getValue().toString().equals("range")) { |
528 filterRange.setVisible(true); | 478 DistancePanel.this.filterRange.setVisible(true); |
529 filterDescription.setVisible(false); | 479 DistancePanel.this.filterDescription.setVisible(false); |
530 filterDescription.clear(); | 480 DistancePanel.this.filterDescription.clear(); |
531 } | 481 } else { |
532 else { | 482 DistancePanel.this.filterRange.setVisible(false); |
533 filterRange.setVisible(false); | 483 DistancePanel.this.filterRange.clear(); |
534 filterRange.clear(); | 484 DistancePanel.this.filterDescription.setVisible(true); |
535 filterDescription.setVisible(true); | |
536 } | 485 } |
537 } | 486 } |
538 }); | 487 }); |
539 | 488 |
540 LinkedHashMap<String, String> filterMap = | 489 final LinkedHashMap<String, String> filterMap = new LinkedHashMap<String, String>(); |
541 new LinkedHashMap<String, String>(); | 490 filterMap.put("description", this.MSG.description()); |
542 filterMap.put("description", MSG.description()); | 491 filterMap.put("range", this.MSG.range()); |
543 filterMap.put("range", MSG.range()); | |
544 filterCriteria.setValueMap(filterMap); | 492 filterCriteria.setValueMap(filterMap); |
545 filterCriteria.setValue("description"); | 493 filterCriteria.setValue("description"); |
546 | 494 |
547 DynamicForm form = new DynamicForm(); | 495 final DynamicForm form = new DynamicForm(); |
548 form.setFields(filterCriteria); | 496 form.setFields(filterCriteria); |
549 | 497 |
550 DynamicForm form2 = new DynamicForm(); | 498 final DynamicForm form2 = new DynamicForm(); |
551 form2.setFields(filterResultCount); | 499 form2.setFields(this.filterResultCount); |
552 | 500 |
553 HLayout filterLayout = new HLayout(); | 501 final HLayout filterLayout = new HLayout(); |
554 filterLayout.addMember(form); | 502 filterLayout.addMember(form); |
555 filterLayout.addMember(filterDescription); | 503 filterLayout.addMember(this.filterDescription); |
556 filterLayout.addMember(filterRange); | 504 filterLayout.addMember(this.filterRange); |
557 filterLayout.setHeight(30); | 505 filterLayout.setHeight(30); |
558 tabs.addTabSelectedHandler(new TabSelectedHandler() { | 506 this.tabs.addTabSelectedHandler(new TabSelectedHandler() { |
559 @Override | 507 @Override |
560 public void onTabSelected(TabSelectedEvent evt) { | 508 public void onTabSelected(final TabSelectedEvent evt) { |
561 filterDescription.clear(); | 509 DistancePanel.this.filterDescription.clear(); |
562 filterRange.clear(); | 510 DistancePanel.this.filterRange.clear(); |
563 filterResultCount.setValue(""); | 511 DistancePanel.this.filterResultCount.setValue(""); |
564 | 512 |
565 Canvas c = evt.getTabPane(); | 513 final Canvas c = evt.getTabPane(); |
566 if(c instanceof ListGrid) { | 514 if (c instanceof ListGrid) { |
567 currentFiltered = (ListGrid)c; | 515 DistancePanel.this.currentFiltered = (ListGrid) c; |
568 } | 516 } |
569 } | 517 } |
570 }); | 518 }); |
571 | 519 |
572 helperContainer.addMember(tabs); | 520 this.helperContainer.addMember(this.tabs); |
573 helperContainer.addMember(filterLayout); | 521 this.helperContainer.addMember(filterLayout); |
574 helperContainer.addMember(form2); | 522 this.helperContainer.addMember(form2); |
575 } | 523 } |
576 | 524 |
577 | 525 @Override |
578 @Override | 526 public void onFilterCriteriaChanged(final StringFilterEvent event) { |
579 public void onFilterCriteriaChanged(StringFilterEvent event) { | 527 final String search = event.getFilter(); |
580 String search = event.getFilter(); | |
581 | 528 |
582 if (search != null && search.length() > 0) { | 529 if (search != null && search.length() > 0) { |
583 Criteria c = new Criteria("description", search); | 530 final Criteria c = new Criteria("description", search); |
584 locationsTable.filterData(c); | 531 this.locationsTable.filterData(c); |
585 distancesTable.filterData(c); | 532 this.distancesTable.filterData(c); |
586 filterResultCount.setValue(currentFiltered.getRecords().length); | 533 this.filterResultCount.setValue(this.currentFiltered.getRecords().length); |
587 } | 534 } else { |
588 else { | 535 this.locationsTable.clearCriteria(); |
589 locationsTable.clearCriteria(); | 536 this.distancesTable.clearCriteria(); |
590 distancesTable.clearCriteria(); | 537 this.filterResultCount.setValue(""); |
591 filterResultCount.setValue(""); | 538 } |
592 } | 539 } |
593 } | 540 |
594 | 541 @Override |
595 | 542 public void onFilterCriteriaChanged(final RangeFilterEvent event) { |
596 @Override | 543 final Float from = event.getFrom() - 0.001f; |
597 public void onFilterCriteriaChanged(RangeFilterEvent event) { | 544 final Float to = event.getTo() + 0.001f; |
598 Float from = event.getFrom() - 0.001f; | |
599 Float to = event.getTo() + 0.001f; | |
600 | 545 |
601 Criterion combinedFilter = null; | 546 Criterion combinedFilter = null; |
602 Criterion locationFilter = null; | 547 Criterion locationFilter = null; |
603 | 548 |
604 if (from.equals(Float.NaN) && to.equals(Float.NaN)) { | 549 if (from.equals(Float.NaN) && to.equals(Float.NaN)) { |
605 locationsTable.clearCriteria(); | 550 this.locationsTable.clearCriteria(); |
606 distancesTable.clearCriteria(); | 551 this.distancesTable.clearCriteria(); |
607 filterResultCount.setValue(""); | 552 this.filterResultCount.setValue(""); |
608 return; | 553 return; |
609 } | 554 } |
610 | 555 |
611 if (from.equals(Float.NaN)) { | 556 if (from.equals(Float.NaN)) { |
612 combinedFilter = | 557 combinedFilter = new Criterion("to", OperatorId.LESS_OR_EQUAL, to); |
613 new Criterion("to", OperatorId.LESS_OR_EQUAL, to); | 558 |
614 | 559 locationFilter = new Criterion("from", OperatorId.LESS_OR_EQUAL, to); |
615 locationFilter = | 560 |
616 new Criterion("from", OperatorId.LESS_OR_EQUAL, to); | 561 this.locationsTable.filterData(locationFilter); |
617 | 562 this.distancesTable.filterData(combinedFilter); |
618 locationsTable.filterData(locationFilter); | 563 this.filterResultCount.setValue(this.currentFiltered.getRecords().length); |
619 distancesTable.filterData(combinedFilter); | |
620 filterResultCount.setValue(currentFiltered.getRecords().length); | |
621 return; | 564 return; |
622 } | 565 } |
623 | 566 |
624 if (to.equals(Float.NaN)) { | 567 if (to.equals(Float.NaN)) { |
625 combinedFilter = | 568 combinedFilter = new Criterion("from", OperatorId.GREATER_OR_EQUAL, from); |
626 new Criterion("from", OperatorId.GREATER_OR_EQUAL, from); | 569 } else { |
627 } | 570 final AdvancedCriteria c1 = new AdvancedCriteria(OperatorId.AND, |
628 else { | 571 new Criterion[] { new Criterion("from", OperatorId.GREATER_OR_EQUAL, from), new Criterion("from", OperatorId.LESS_OR_EQUAL, to) }); |
629 AdvancedCriteria c1 = | 572 |
630 new AdvancedCriteria(OperatorId.AND, new Criterion[] { | 573 final AdvancedCriteria c2 = new AdvancedCriteria(OperatorId.AND, |
631 new Criterion("from", OperatorId.GREATER_OR_EQUAL, from), | 574 new Criterion[] { new Criterion("to", OperatorId.GREATER_OR_EQUAL, from), new Criterion("to", OperatorId.LESS_OR_EQUAL, to) }); |
632 new Criterion("from", OperatorId.LESS_OR_EQUAL, to) | 575 |
633 }); | 576 final AdvancedCriteria c3 = new AdvancedCriteria(OperatorId.AND, |
634 | 577 new Criterion[] { new Criterion("from", OperatorId.LESS_OR_EQUAL, to), new Criterion("to", OperatorId.GREATER_OR_EQUAL, from) }); |
635 AdvancedCriteria c2 = | 578 |
636 new AdvancedCriteria(OperatorId.AND, new Criterion[] { | 579 combinedFilter = new AdvancedCriteria(OperatorId.OR, new Criterion[] { c1, c2, c3 }); |
637 new Criterion("to", OperatorId.GREATER_OR_EQUAL, from), | 580 } |
638 new Criterion("to", OperatorId.LESS_OR_EQUAL, to) | 581 this.locationsTable.filterData(combinedFilter); |
639 }); | 582 this.distancesTable.filterData(combinedFilter); |
640 | 583 this.filterResultCount.setValue(this.currentFiltered.getRecords().length); |
641 AdvancedCriteria c3 = | 584 |
642 new AdvancedCriteria(OperatorId.AND, new Criterion[] { | 585 } |
643 new Criterion("from", OperatorId.LESS_OR_EQUAL, to), | |
644 new Criterion("to", OperatorId.GREATER_OR_EQUAL, from) | |
645 }); | |
646 | |
647 combinedFilter = | |
648 new AdvancedCriteria(OperatorId.OR, new Criterion[] { | |
649 c1, c2, c3 | |
650 }); | |
651 } | |
652 locationsTable.filterData(combinedFilter); | |
653 distancesTable.filterData(combinedFilter); | |
654 filterResultCount.setValue(currentFiltered.getRecords().length); | |
655 | |
656 } | |
657 | |
658 | 586 |
659 protected String getRiverName() { | 587 protected String getRiverName() { |
660 ArtifactDescription adescr = artifact.getArtifactDescription(); | 588 final ArtifactDescription adescr = this.artifact.getArtifactDescription(); |
661 return adescr.getRiver(); | 589 return adescr.getRiver(); |
662 } | 590 } |
663 } | 591 } |
664 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : | 592 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |