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 :

http://dive4elements.wald.intevation.org