Mercurial > dive4elements > river
view gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DistancePanel.java @ 9284:486b6160962f
Fixed: filtering of gauge list did not handle cases correctly, where fromKm > toKm
author | gernotbelger |
---|---|
date | Fri, 20 Jul 2018 16:03:40 +0200 |
parents | c08d5cfa4981 |
children |
line wrap: on
line source
/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde * Software engineering by Intevation GmbH * * This file is Free Software under the GNU AGPL (>=v3) * and comes with ABSOLUTELY NO WARRANTY! Check out the * documentation coming with Dive4Elements River for details. */ package org.dive4elements.river.client.client.ui; import java.util.ArrayList; import java.util.List; import org.dive4elements.river.client.client.FLYSConstants; import org.dive4elements.river.client.shared.model.Data; import org.dive4elements.river.client.shared.model.DataItem; import org.dive4elements.river.client.shared.model.DataList; import org.dive4elements.river.client.shared.model.DefaultData; import org.dive4elements.river.client.shared.model.DefaultDataItem; import com.google.gwt.core.client.GWT; import com.google.gwt.i18n.client.NumberFormat; import com.smartgwt.client.data.Record; import com.smartgwt.client.util.SC; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.Label; import com.smartgwt.client.widgets.form.fields.StaticTextItem; import com.smartgwt.client.widgets.form.fields.events.BlurEvent; import com.smartgwt.client.widgets.form.fields.events.BlurHandler; import com.smartgwt.client.widgets.grid.ListGrid; import com.smartgwt.client.widgets.grid.events.RecordClickEvent; import com.smartgwt.client.widgets.grid.events.RecordClickHandler; import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.layout.VLayout; import com.smartgwt.client.widgets.tab.TabSet; /** Panel to allow input of distance for calculation range. */ public class DistancePanel extends AbstractUIProvider implements BlurHandler { private static final long serialVersionUID = -883142387908664588L; public static final int DEFAULT_STEP_WIDTH = 100; public static final String FIELD_LOWER = "ld_from"; public static final String FIELD_UPPER = "ld_to"; public static final String FIELD_STEP = "ld_step"; protected FLYSConstants MSG = GWT.create(FLYSConstants.class); // protected RangeTable distancesTable; // protected LocationsTable locationsTable; protected DoubleRangePanel distancePanel; protected TableFilter filterDescription; protected RangeTableFilter filterRange; protected TabSet tabs; protected double min; protected double max; protected StaticTextItem filterResultCount; protected ListGrid currentFiltered; public DistancePanel() { this("right"); } public DistancePanel(final String labelOrientation) { this.distancePanel = new DoubleRangePanel(labelFrom(), labelTo(), labelStep(), 0d, 0d, 0d, 250, this, labelOrientation); } @Override public Canvas create(final DataList data) { final VLayout layout = new VLayout(); layout.setMembersMargin(10); final Label label = getLabel(data); final Canvas submit = getNextButton(); label.setHeight(25); this.distancePanel.setHeight(50); layout.addMember(label); layout.addMember(this.distancePanel); layout.addMember(submit); initMinMaxValues(data); initDefaultValues(data); initHelperPanel(data); return layout; } protected Label getLabel(final DataList data) { final Data item = data.get(0); return new Label(item.getDescription()); // holt das Label vom Server (funktoniert schon sehr oft so!) } @Override public Canvas createOld(final DataList dataList) { final String s = getOldSelectionString(dataList); final String l = dataList.getLabel(); final Label label = new Label(l); final Label selected = new Label(s); final HLayout layout = new HLayout(); layout.setWidth(400); label.setWidth(200); selected.setWidth(130); layout.addMember(label); layout.addMember(selected); layout.addMember(getBackButton(dataList.getState())); return layout; } protected String getOldSelectionString(final DataList dataList) { final List<Data> items = dataList.getAll(); final Data dFrom = getData(items, getLowerField()); final Data dTo = getData(items, getUpperField()); final Data dStep = getData(items, getStepField()); final DataItem[] from = dFrom.getItems(); final DataItem[] to = dTo.getItems(); final DataItem[] step = dStep.getItems(); final StringBuilder sb = new StringBuilder(); sb.append(from[0].getLabel()); sb.append(" " + getUnitFrom() + " - "); sb.append(to[0].getLabel()); sb.append(" " + getUnitTo() + " - "); sb.append(step[0].getLabel()); sb.append(" " + getUnitStep()); return sb.toString(); } // protected String getLabel() { // return this.MSG.distance_state(); // } protected String labelFrom() { return getLabelFrom() + " [" + getUnitFrom() + "]"; } protected String getLabelFrom() { return this.MSG.dpLabelFrom(); } protected String getUnitFrom() { return this.MSG.dpUnitFrom(); } protected String labelTo() { return getLabelTo() + " [" + getUnitTo() + "]"; } protected String getLabelTo() { return this.MSG.dpLabelTo(); } protected String getUnitTo() { return this.MSG.dpUnitTo(); } protected String labelStep() { return getLabelStep() + " [" + getUnitStep() + "]"; } protected String getLabelStep() { return this.MSG.dpLabelStep(); } protected String getUnitStep() { return this.MSG.dpUnitStep(); } protected String getLowerField() { return FIELD_LOWER; } protected String getUpperField() { return FIELD_UPPER; } protected String getStepField() { return FIELD_STEP; } @Override public List<String> validate() { final List<String> errors = new ArrayList<String>(); if (!this.distancePanel.validateForm()) { errors.add(this.MSG.wrongFormat()); return errors; } validateFrom(errors); validateTo(errors); return errors; } protected void validateFrom(final List<String> errors) { final double from = this.distancePanel.getFrom(); if (from < this.min || from > this.max) { final NumberFormat nf = NumberFormat.getDecimalFormat(); String tmp = this.MSG.error_validate_lower_range(); tmp = tmp.replace("$1", nf.format(from)); tmp = tmp.replace("$2", nf.format(this.min)); this.distancePanel.setFrom(this.min); errors.add(tmp); } } protected void validateTo(final List<String> errors) { final double to = this.distancePanel.getTo(); if (to < this.min || to > this.max) { final NumberFormat nf = NumberFormat.getDecimalFormat(); String tmp = this.MSG.error_validate_upper_range(); tmp = tmp.replace("$1", nf.format(to)); tmp = tmp.replace("$2", nf.format(this.max)); this.distancePanel.setTo(this.max); errors.add(tmp); } } @Override public Data[] getData() { final Data[] data = new Data[4]; data[0] = getDataFrom(); data[1] = getDataTo(); data[2] = getDataStep(); final DataItem item = new DefaultDataItem("ld_mode", "ld_mode", "distance"); data[3] = new DefaultData("ld_mode", null, null, new DataItem[] { item }); return data; } protected Data getDataFrom() { final String value = String.valueOf(this.distancePanel.getFrom()); final String field = getLowerField(); final DataItem item = new DefaultDataItem(field, field, value); return new DefaultData(field, null, null, new DataItem[] { item }); } protected Data getDataTo() { final String value = String.valueOf(this.distancePanel.getTo()); final String field = getUpperField(); final DataItem item = new DefaultDataItem(field, field, value); return new DefaultData(field, null, null, new DataItem[] { item }); } protected Data getDataStep() { final String value = String.valueOf(this.distancePanel.getStep()); final String field = getStepField(); final DataItem item = new DefaultDataItem(field, field, value); return new DefaultData(field, null, null, new DataItem[] { item }); } protected void initMinMaxValues(final DataList data) { final Data f = getData(data.getAll(), getLowerField()); final Data t = getData(data.getAll(), getUpperField()); final DataItem[] fItems = f.getItems(); final DataItem[] tItems = t.getItems(); try { this.min = Double.valueOf(fItems[0].getStringValue()); this.max = Double.valueOf(tItems[0].getStringValue()); } catch (final NumberFormatException nfe) { this.min = -Double.MAX_VALUE; this.max = Double.MAX_VALUE; } } protected void initDefaultValues(final DataList data) { initDefaultFrom(data); initDefaultTo(data); initDefaultStep(data); } protected void initDefaultFrom(final DataList data) { final Data f = getData(data.getAll(), getLowerField()); double from = getDefaultFrom(); try { from = getDefaultValue(f); } catch (final NumberFormatException nfe) { // do nothing } this.distancePanel.setFrom(from); } protected double getDefaultFrom() { return this.min; } protected void initDefaultTo(final DataList data) { final Data t = getData(data.getAll(), getUpperField()); double to = getDefaultTo(); try { to = getDefaultValue(t); } catch (final NumberFormatException nfe) { // do nothing } this.distancePanel.setTo(to); } protected double getDefaultTo() { return this.max; } protected void initDefaultStep(final DataList data) { final Data s = getData(data.getAll(), getStepField()); double step = getDefaultStep(); try { step = getDefaultValue(s); } catch (final NumberFormatException nfe) { // do nothing } this.distancePanel.setStep(step); } protected double getDefaultStep() { return DEFAULT_STEP_WIDTH; } /** Gets the double from default in data, null if none. */ protected double getDefaultValue(final Data data) throws NumberFormatException { final DataItem def = data.getDefault(); final String defValue = def != null ? def.getStringValue() : null; return Double.valueOf(defValue); } protected void initHelperPanel(final DataList data) { final DistancePanelInputHelper helper = new DistancePanelInputHelper(this.MSG, this.helperContainer, this.getRiverName()); helper.getDistancesTable().addRecordClickHandler(new RecordClickHandler() { @Override public void onRecordClick(final RecordClickEvent e) { final Record r = e.getRecord(); final String from = r.getAttribute("from"); final String to = r.getAttribute("to"); try { DistancePanel.this.distancePanel.setFrom(Double.valueOf(from)); DistancePanel.this.distancePanel.setTo(Double.valueOf(to)); } catch (final NumberFormatException nfe) { SC.warn(DistancePanel.this.MSG.wrongFormat()); } } }); helper.getLocationsTable().addRecordClickHandler(new RecordClickHandler() { @Override public void onRecordClick(final RecordClickEvent e) { final Record r = e.getRecord(); final int field = e.getFieldNum(); try { final String value = r.getAttribute("from"); switch (field) { case 0: DistancePanel.this.distancePanel.setFrom(Double.valueOf(value)); break; case 1: DistancePanel.this.distancePanel.setTo(Double.valueOf(value)); break; } } catch (final NumberFormatException nfe) { SC.warn(DistancePanel.this.MSG.wrongFormat()); } } }); } @Override public void onBlur(final BlurEvent event) { this.distancePanel.validateForm(); } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :