teichmann@5861: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5861: * Software engineering by Intevation GmbH teichmann@5861: * teichmann@5993: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5861: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5993: * documentation coming with Dive4Elements River for details. teichmann@5861: */ teichmann@5861: teichmann@5835: package org.dive4elements.river.client.client.ui; ingo@780: gernotbelger@9064: import java.util.ArrayList; gernotbelger@9064: import java.util.LinkedHashMap; gernotbelger@9064: import java.util.List; gernotbelger@9064: gernotbelger@9064: import org.dive4elements.river.client.client.Config; gernotbelger@9064: import org.dive4elements.river.client.client.FLYSConstants; gernotbelger@9064: import org.dive4elements.river.client.client.event.FilterHandler; gernotbelger@9064: import org.dive4elements.river.client.client.event.RangeFilterEvent; gernotbelger@9064: import org.dive4elements.river.client.client.event.StringFilterEvent; gernotbelger@9064: import org.dive4elements.river.client.client.ui.range.DistanceInfoDataSource; gernotbelger@9064: import org.dive4elements.river.client.client.ui.range.LocationsTable; gernotbelger@9064: import org.dive4elements.river.client.client.ui.range.RangeTable; gernotbelger@9064: import org.dive4elements.river.client.shared.model.ArtifactDescription; gernotbelger@9064: import org.dive4elements.river.client.shared.model.Data; gernotbelger@9064: import org.dive4elements.river.client.shared.model.DataItem; gernotbelger@9064: import org.dive4elements.river.client.shared.model.DataList; gernotbelger@9064: import org.dive4elements.river.client.shared.model.DefaultData; gernotbelger@9064: import org.dive4elements.river.client.shared.model.DefaultDataItem; gernotbelger@9064: ingo@780: import com.google.gwt.core.client.GWT; ingo@780: import com.google.gwt.i18n.client.NumberFormat; christian@4131: import com.smartgwt.client.data.AdvancedCriteria; raimund@863: import com.smartgwt.client.data.Criteria; raimund@1538: import com.smartgwt.client.data.Criterion; christian@4131: import com.smartgwt.client.data.Record; christian@4131: import com.smartgwt.client.types.Alignment; raimund@1538: import com.smartgwt.client.types.OperatorId; ingo@783: import com.smartgwt.client.util.SC; ingo@780: import com.smartgwt.client.widgets.Canvas; ingo@780: import com.smartgwt.client.widgets.Label; raimund@1534: import com.smartgwt.client.widgets.form.DynamicForm; raimund@1534: import com.smartgwt.client.widgets.form.fields.SelectItem; raimund@1567: import com.smartgwt.client.widgets.form.fields.StaticTextItem; christian@4131: import com.smartgwt.client.widgets.form.fields.events.BlurEvent; ingo@780: import com.smartgwt.client.widgets.form.fields.events.BlurHandler; christian@4131: import com.smartgwt.client.widgets.form.fields.events.ChangedEvent; christian@4131: import com.smartgwt.client.widgets.form.fields.events.ChangedHandler; christian@4131: import com.smartgwt.client.widgets.grid.ListGrid; christian@4131: import com.smartgwt.client.widgets.grid.events.RecordClickEvent; ingo@783: import com.smartgwt.client.widgets.grid.events.RecordClickHandler; ingo@780: import com.smartgwt.client.widgets.layout.HLayout; ingo@780: import com.smartgwt.client.widgets.layout.VLayout; ingo@781: import com.smartgwt.client.widgets.tab.Tab; christian@4131: import com.smartgwt.client.widgets.tab.TabSet; christian@4131: import com.smartgwt.client.widgets.tab.events.TabSelectedEvent; raimund@893: import com.smartgwt.client.widgets.tab.events.TabSelectedHandler; ingo@780: felix@7141: /** Panel to allow input of distance for calculation range. */ gernotbelger@9064: public class DistancePanel extends AbstractUIProvider implements BlurHandler, FilterHandler { ingo@780: christian@4131: private static final long serialVersionUID = -883142387908664588L; christian@4131: tom@8800: public static final int DEFAULT_STEP_WIDTH = 100; ingo@780: tom@8800: public static final String FIELD_LOWER = "ld_from"; tom@8800: public static final String FIELD_UPPER = "ld_to"; gernotbelger@9064: public static final String FIELD_STEP = "ld_step"; ingo@780: ingo@780: protected FLYSConstants MSG = GWT.create(FLYSConstants.class); ingo@780: gernotbelger@9064: protected RangeTable distancesTable; ingo@781: protected LocationsTable locationsTable; ingo@781: ingo@780: protected DoubleRangePanel distancePanel; ingo@780: raimund@1534: protected TableFilter filterDescription; raimund@1534: protected RangeTableFilter filterRange; raimund@893: ingo@781: protected TabSet tabs; ingo@781: ingo@780: protected double min; ingo@780: protected double max; ingo@780: raimund@1567: protected StaticTextItem filterResultCount; raimund@1567: protected ListGrid currentFiltered; ingo@780: ingo@780: public DistancePanel() { ingo@787: this("right"); ingo@787: } ingo@787: gernotbelger@9064: public DistancePanel(final String labelOrientation) { gernotbelger@9064: this.distancePanel = new DoubleRangePanel(labelFrom(), labelTo(), labelStep(), 0d, 0d, 0d, 250, this, labelOrientation); ingo@780: } ingo@780: ingo@780: @Override gernotbelger@9064: public Canvas create(final DataList data) { gernotbelger@9064: final VLayout layout = new VLayout(); ingo@780: layout.setMembersMargin(10); ingo@780: gernotbelger@9164: final Label label = getLabel(data); ingo@780: gernotbelger@9064: final Canvas submit = getNextButton(); ingo@780: ingo@780: label.setHeight(25); gernotbelger@9064: this.distancePanel.setHeight(50); ingo@780: ingo@780: layout.addMember(label); gernotbelger@9064: layout.addMember(this.distancePanel); ingo@780: layout.addMember(submit); ingo@780: ingo@780: initMinMaxValues(data); ingo@780: initDefaultValues(data); ingo@781: initHelperPanel(); ingo@780: ingo@780: return layout; ingo@780: } ingo@780: gernotbelger@9175: protected Label getLabel(final DataList data) { gernotbelger@9164: final Data item = data.get(0); gernotbelger@9175: return new Label(item.getDescription()); // holt das Label vom Server (funktoniert schon sehr oft so!) gernotbelger@9164: } gernotbelger@9164: ingo@780: @Override gernotbelger@9064: public Canvas createOld(final DataList dataList) { gernotbelger@9064: final String s = getOldSelectionString(dataList); gernotbelger@9064: final String l = dataList.getLabel(); ingo@780: gernotbelger@9064: final Label label = new Label(l); gernotbelger@9064: final Label selected = new Label(s); ingo@780: gernotbelger@9064: final HLayout layout = new HLayout(); ingo@780: ingo@780: layout.setWidth(400); ingo@780: label.setWidth(200); ingo@780: selected.setWidth(130); ingo@780: ingo@780: layout.addMember(label); ingo@780: layout.addMember(selected); ingo@784: layout.addMember(getBackButton(dataList.getState())); ingo@780: ingo@780: return layout; ingo@780: } ingo@780: gernotbelger@9064: protected String getOldSelectionString(final DataList dataList) { gernotbelger@9064: final List items = dataList.getAll(); ingo@780: gernotbelger@9064: final Data dFrom = getData(items, getLowerField()); gernotbelger@9064: final Data dTo = getData(items, getUpperField()); gernotbelger@9064: final Data dStep = getData(items, getStepField()); ingo@780: gernotbelger@9064: final DataItem[] from = dFrom.getItems(); gernotbelger@9064: final DataItem[] to = dTo.getItems(); gernotbelger@9064: final DataItem[] step = dStep.getItems(); ingo@780: gernotbelger@9064: final StringBuilder sb = new StringBuilder(); ingo@780: sb.append(from[0].getLabel()); ingo@793: sb.append(" " + getUnitFrom() + " - "); ingo@780: sb.append(to[0].getLabel()); ingo@793: sb.append(" " + getUnitTo() + " - "); ingo@780: sb.append(step[0].getLabel()); ingo@793: sb.append(" " + getUnitStep()); ingo@780: ingo@780: return sb.toString(); ingo@780: } ingo@780: gernotbelger@9175: // protected String getLabel() { gernotbelger@9175: // return this.MSG.distance_state(); gernotbelger@9175: // } ingo@1423: ingo@793: protected String labelFrom() { ingo@793: return getLabelFrom() + " [" + getUnitFrom() + "]"; ingo@793: } ingo@793: ingo@787: protected String getLabelFrom() { gernotbelger@9064: return this.MSG.dpLabelFrom(); ingo@793: } ingo@793: ingo@793: protected String getUnitFrom() { gernotbelger@9064: return this.MSG.dpUnitFrom(); ingo@793: } ingo@793: ingo@793: protected String labelTo() { ingo@793: return getLabelTo() + " [" + getUnitTo() + "]"; ingo@787: } ingo@787: ingo@787: protected String getLabelTo() { gernotbelger@9064: return this.MSG.dpLabelTo(); ingo@793: } ingo@793: ingo@793: protected String getUnitTo() { gernotbelger@9064: return this.MSG.dpUnitTo(); ingo@793: } ingo@793: ingo@793: protected String labelStep() { ingo@793: return getLabelStep() + " [" + getUnitStep() + "]"; ingo@787: } ingo@787: ingo@787: protected String getLabelStep() { gernotbelger@9064: return this.MSG.dpLabelStep(); ingo@793: } ingo@793: ingo@793: protected String getUnitStep() { gernotbelger@9064: return this.MSG.dpUnitStep(); ingo@787: } ingo@787: ingo@787: protected String getLowerField() { ingo@787: return FIELD_LOWER; ingo@787: } ingo@787: ingo@787: protected String getUpperField() { ingo@787: return FIELD_UPPER; ingo@787: } ingo@787: ingo@787: protected String getStepField() { ingo@787: return FIELD_STEP; ingo@787: } ingo@787: ingo@780: @Override ingo@780: public List validate() { gernotbelger@9064: final List errors = new ArrayList(); ingo@780: gernotbelger@9064: if (!this.distancePanel.validateForm()) { gernotbelger@9064: errors.add(this.MSG.wrongFormat()); ingo@780: ingo@780: return errors; ingo@780: } ingo@780: ingo@780: validateFrom(errors); ingo@780: validateTo(errors); ingo@780: ingo@780: return errors; ingo@780: } ingo@780: gernotbelger@9064: protected void validateFrom(final List errors) { gernotbelger@9064: final double from = this.distancePanel.getFrom(); ingo@780: gernotbelger@9064: if (from < this.min || from > this.max) { gernotbelger@9064: final NumberFormat nf = NumberFormat.getDecimalFormat(); ingo@780: gernotbelger@9064: String tmp = this.MSG.error_validate_lower_range(); gernotbelger@9064: tmp = tmp.replace("$1", nf.format(from)); gernotbelger@9064: tmp = tmp.replace("$2", nf.format(this.min)); ingo@780: gernotbelger@9064: this.distancePanel.setFrom(this.min); ingo@780: errors.add(tmp); ingo@780: } ingo@780: } ingo@780: gernotbelger@9064: protected void validateTo(final List errors) { gernotbelger@9064: final double to = this.distancePanel.getTo(); ingo@780: gernotbelger@9064: if (to < this.min || to > this.max) { gernotbelger@9064: final NumberFormat nf = NumberFormat.getDecimalFormat(); ingo@780: gernotbelger@9064: String tmp = this.MSG.error_validate_upper_range(); gernotbelger@9064: tmp = tmp.replace("$1", nf.format(to)); gernotbelger@9064: tmp = tmp.replace("$2", nf.format(this.max)); ingo@780: gernotbelger@9064: this.distancePanel.setTo(this.max); ingo@780: errors.add(tmp); ingo@780: } ingo@780: } ingo@780: ingo@780: @Override ingo@780: public Data[] getData() { gernotbelger@9064: final Data[] data = new Data[4]; ingo@780: ingo@780: data[0] = getDataFrom(); ingo@780: data[1] = getDataTo(); ingo@780: data[2] = getDataStep(); ingo@780: gernotbelger@9064: final DataItem item = new DefaultDataItem("ld_mode", "ld_mode", "distance"); gernotbelger@9064: data[3] = new DefaultData("ld_mode", null, null, new DataItem[] { item }); ingo@1387: ingo@780: return data; ingo@780: } ingo@780: ingo@780: protected Data getDataFrom() { gernotbelger@9064: final String value = String.valueOf(this.distancePanel.getFrom()); gernotbelger@9064: final String field = getLowerField(); ingo@787: gernotbelger@9064: final DataItem item = new DefaultDataItem(field, field, value); gernotbelger@9064: return new DefaultData(field, null, null, new DataItem[] { item }); ingo@780: } ingo@780: ingo@780: protected Data getDataTo() { gernotbelger@9064: final String value = String.valueOf(this.distancePanel.getTo()); gernotbelger@9064: final String field = getUpperField(); ingo@787: gernotbelger@9064: final DataItem item = new DefaultDataItem(field, field, value); gernotbelger@9064: return new DefaultData(field, null, null, new DataItem[] { item }); ingo@780: } ingo@780: ingo@780: protected Data getDataStep() { gernotbelger@9064: final String value = String.valueOf(this.distancePanel.getStep()); gernotbelger@9064: final String field = getStepField(); ingo@787: gernotbelger@9064: final DataItem item = new DefaultDataItem(field, field, value); gernotbelger@9064: return new DefaultData(field, null, null, new DataItem[] { item }); ingo@780: } ingo@780: gernotbelger@9064: @Override gernotbelger@9064: public void onBlur(final BlurEvent event) { gernotbelger@9064: this.distancePanel.validateForm(); gernotbelger@9064: } ingo@780: gernotbelger@9064: protected void initMinMaxValues(final DataList data) { gernotbelger@9064: final Data f = getData(data.getAll(), getLowerField()); gernotbelger@9064: final Data t = getData(data.getAll(), getUpperField()); ingo@780: gernotbelger@9064: final DataItem[] fItems = f.getItems(); gernotbelger@9064: final DataItem[] tItems = t.getItems(); ingo@780: ingo@780: try { gernotbelger@9064: this.min = Double.valueOf(fItems[0].getStringValue()); gernotbelger@9064: this.max = Double.valueOf(tItems[0].getStringValue()); ingo@780: } gernotbelger@9064: catch (final NumberFormatException nfe) { gernotbelger@9064: this.min = -Double.MAX_VALUE; gernotbelger@9064: this.max = Double.MAX_VALUE; ingo@780: } ingo@780: } ingo@780: gernotbelger@9064: protected void initDefaultValues(final DataList data) { ingo@780: initDefaultFrom(data); ingo@780: initDefaultTo(data); ingo@780: initDefaultStep(data); ingo@780: } ingo@780: gernotbelger@9064: protected void initDefaultFrom(final DataList data) { gernotbelger@9064: final Data f = getData(data.getAll(), getLowerField()); ingo@780: ingo@787: double from = getDefaultFrom(); ingo@780: ingo@780: try { ingo@780: from = getDefaultValue(f); ingo@780: } gernotbelger@9064: catch (final NumberFormatException nfe) { ingo@780: // do nothing ingo@780: } ingo@780: gernotbelger@9064: this.distancePanel.setFrom(from); ingo@780: } ingo@780: ingo@787: protected double getDefaultFrom() { gernotbelger@9064: return this.min; ingo@787: } ingo@787: gernotbelger@9064: protected void initDefaultTo(final DataList data) { gernotbelger@9064: final Data t = getData(data.getAll(), getUpperField()); ingo@780: ingo@787: double to = getDefaultTo(); ingo@780: ingo@780: try { ingo@780: to = getDefaultValue(t); ingo@780: } gernotbelger@9064: catch (final NumberFormatException nfe) { ingo@780: // do nothing ingo@780: } ingo@780: gernotbelger@9064: this.distancePanel.setTo(to); ingo@780: } ingo@780: ingo@787: protected double getDefaultTo() { gernotbelger@9064: return this.max; ingo@787: } ingo@787: gernotbelger@9064: protected void initDefaultStep(final DataList data) { gernotbelger@9064: final Data s = getData(data.getAll(), getStepField()); ingo@780: tom@8800: double step = getDefaultStep(); ingo@780: ingo@780: try { ingo@780: step = getDefaultValue(s); ingo@780: } gernotbelger@9064: catch (final NumberFormatException nfe) { ingo@780: // do nothing ingo@780: } ingo@780: gernotbelger@9064: this.distancePanel.setStep(step); ingo@780: } ingo@780: ingo@787: protected double getDefaultStep() { christian@4131: return DEFAULT_STEP_WIDTH; ingo@787: } ingo@787: felix@7745: /** Gets the double from default in data, null if none. */ gernotbelger@9064: protected double getDefaultValue(final Data data) throws NumberFormatException { gernotbelger@9064: final DataItem def = data.getDefault(); gernotbelger@9064: final String defValue = def != null ? def.getStringValue() : null; ingo@780: ingo@780: return Double.valueOf(defValue); ingo@780: } ingo@781: ingo@781: protected void initHelperPanel() { gernotbelger@9064: this.distancesTable = new RangeTable(); gernotbelger@9064: this.locationsTable = new LocationsTable(); ingo@782: gernotbelger@9064: final Config config = Config.getInstance(); gernotbelger@9064: final String url = config.getServerUrl(); gernotbelger@9064: final String river = getRiverName(); ingo@782: gernotbelger@9064: this.distancesTable.setAutoFetchData(true); gernotbelger@9064: this.locationsTable.setAutoFetchData(true); gernotbelger@9064: this.distancesTable.setDataSource(new DistanceInfoDataSource(url, river, "distances")); gernotbelger@9064: this.locationsTable.setDataSource(new DistanceInfoDataSource(url, river, "locations")); gernotbelger@9064: gernotbelger@9064: this.distancesTable.addRecordClickHandler(new RecordClickHandler() { christian@4131: @Override gernotbelger@9064: public void onRecordClick(final RecordClickEvent e) { gernotbelger@9064: final Record r = e.getRecord(); ingo@783: gernotbelger@9064: final String from = r.getAttribute("from"); gernotbelger@9064: final String to = r.getAttribute("to"); ingo@783: ingo@783: try { gernotbelger@9064: DistancePanel.this.distancePanel.setFrom(Double.valueOf(from)); gernotbelger@9064: DistancePanel.this.distancePanel.setTo(Double.valueOf(to)); ingo@783: } gernotbelger@9064: catch (final NumberFormatException nfe) { gernotbelger@9064: SC.warn(DistancePanel.this.MSG.wrongFormat()); ingo@783: } ingo@783: } ingo@783: }); ingo@783: gernotbelger@9064: this.locationsTable.addRecordClickHandler(new RecordClickHandler() { gernotbelger@9064: @Override gernotbelger@9064: public void onRecordClick(final RecordClickEvent e) { gernotbelger@9064: final Record r = e.getRecord(); gernotbelger@9064: final int field = e.getFieldNum(); raimund@1567: gernotbelger@9064: try { gernotbelger@9064: final String value = r.getAttribute("from"); raimund@1534: gernotbelger@9064: switch (field) { gernotbelger@9064: case 0: gernotbelger@9064: DistancePanel.this.distancePanel.setFrom(Double.valueOf(value)); gernotbelger@9064: break; gernotbelger@9064: case 1: gernotbelger@9064: DistancePanel.this.distancePanel.setTo(Double.valueOf(value)); gernotbelger@9064: break; gernotbelger@9064: } raimund@1534: } gernotbelger@9064: catch (final NumberFormatException nfe) { gernotbelger@9064: SC.warn(DistancePanel.this.MSG.wrongFormat()); raimund@1534: } raimund@1534: } raimund@1534: }); raimund@1534: gernotbelger@9064: this.tabs = new TabSet(); gernotbelger@9064: this.tabs.setWidth100(); gernotbelger@9064: this.tabs.setHeight100(); raimund@1567: gernotbelger@9064: final Tab locations = new Tab(this.MSG.locations()); gernotbelger@9064: final Tab distances = new Tab(this.MSG.distance()); gernotbelger@9064: gernotbelger@9064: locations.setPane(this.locationsTable); gernotbelger@9064: distances.setPane(this.distancesTable); gernotbelger@9064: gernotbelger@9064: this.tabs.addTab(locations, 0); gernotbelger@9064: this.tabs.addTab(distances, 1); gernotbelger@9064: gernotbelger@9064: this.filterResultCount = new StaticTextItem(this.MSG.resultCount()); gernotbelger@9064: this.filterResultCount.setTitleAlign(Alignment.LEFT); gernotbelger@9064: this.filterResultCount.setTitleStyle("color: #000"); gernotbelger@9064: gernotbelger@9064: this.filterDescription = new TableFilter(); gernotbelger@9064: this.filterDescription.setHeight("30px"); gernotbelger@9064: this.filterDescription.addFilterHandler(this); gernotbelger@9064: gernotbelger@9064: this.filterRange = new RangeTableFilter(); gernotbelger@9064: this.filterRange.setHeight("30px"); gernotbelger@9064: this.filterRange.addFilterHandler(this); gernotbelger@9064: this.filterRange.setVisible(false); gernotbelger@9064: gernotbelger@9064: final SelectItem filterCriteria = new SelectItem(); gernotbelger@9064: filterCriteria.setShowTitle(false); gernotbelger@9064: filterCriteria.setWidth(100); gernotbelger@9064: filterCriteria.addChangedHandler(new ChangedHandler() { christian@4131: @Override gernotbelger@9064: public void onChanged(final ChangedEvent e) { gernotbelger@9064: if (e.getValue().toString().equals("range")) { gernotbelger@9064: DistancePanel.this.filterRange.setVisible(true); gernotbelger@9064: DistancePanel.this.filterDescription.setVisible(false); gernotbelger@9064: DistancePanel.this.filterDescription.clear(); gernotbelger@9064: } else { gernotbelger@9064: DistancePanel.this.filterRange.setVisible(false); gernotbelger@9064: DistancePanel.this.filterRange.clear(); gernotbelger@9064: DistancePanel.this.filterDescription.setVisible(true); raimund@1567: } raimund@893: } raimund@893: }); raimund@893: gernotbelger@9064: final LinkedHashMap filterMap = new LinkedHashMap(); gernotbelger@9064: filterMap.put("description", this.MSG.description()); gernotbelger@9064: filterMap.put("range", this.MSG.range()); gernotbelger@9064: filterCriteria.setValueMap(filterMap); gernotbelger@9064: filterCriteria.setValue("description"); gernotbelger@9064: gernotbelger@9064: final DynamicForm form = new DynamicForm(); gernotbelger@9064: form.setFields(filterCriteria); gernotbelger@9064: gernotbelger@9064: final DynamicForm form2 = new DynamicForm(); gernotbelger@9064: form2.setFields(this.filterResultCount); gernotbelger@9064: gernotbelger@9064: final HLayout filterLayout = new HLayout(); gernotbelger@9064: filterLayout.addMember(form); gernotbelger@9064: filterLayout.addMember(this.filterDescription); gernotbelger@9064: filterLayout.addMember(this.filterRange); gernotbelger@9064: filterLayout.setHeight(30); gernotbelger@9064: this.tabs.addTabSelectedHandler(new TabSelectedHandler() { gernotbelger@9064: @Override gernotbelger@9064: public void onTabSelected(final TabSelectedEvent evt) { gernotbelger@9064: DistancePanel.this.filterDescription.clear(); gernotbelger@9064: DistancePanel.this.filterRange.clear(); gernotbelger@9064: DistancePanel.this.filterResultCount.setValue(""); gernotbelger@9064: gernotbelger@9064: final Canvas c = evt.getTabPane(); gernotbelger@9064: if (c instanceof ListGrid) { gernotbelger@9064: DistancePanel.this.currentFiltered = (ListGrid) c; gernotbelger@9064: } gernotbelger@9064: } gernotbelger@9064: }); gernotbelger@9064: gernotbelger@9064: this.helperContainer.addMember(this.tabs); gernotbelger@9064: this.helperContainer.addMember(filterLayout); gernotbelger@9064: this.helperContainer.addMember(form2); raimund@863: } raimund@863: christian@4131: @Override gernotbelger@9064: public void onFilterCriteriaChanged(final StringFilterEvent event) { gernotbelger@9064: final String search = event.getFilter(); raimund@863: raimund@863: if (search != null && search.length() > 0) { gernotbelger@9064: final Criteria c = new Criteria("description", search); gernotbelger@9064: this.locationsTable.filterData(c); gernotbelger@9064: this.distancesTable.filterData(c); gernotbelger@9064: this.filterResultCount.setValue(this.currentFiltered.getRecords().length); gernotbelger@9064: } else { gernotbelger@9064: this.locationsTable.clearCriteria(); gernotbelger@9064: this.distancesTable.clearCriteria(); gernotbelger@9064: this.filterResultCount.setValue(""); raimund@863: } ingo@781: } ingo@782: christian@4131: @Override gernotbelger@9064: public void onFilterCriteriaChanged(final RangeFilterEvent event) { gernotbelger@9064: final Float from = event.getFrom() - 0.001f; gernotbelger@9064: final Float to = event.getTo() + 0.001f; raimund@1538: raimund@1538: Criterion combinedFilter = null; raimund@1538: Criterion locationFilter = null; teichmann@7731: raimund@1538: if (from.equals(Float.NaN) && to.equals(Float.NaN)) { gernotbelger@9064: this.locationsTable.clearCriteria(); gernotbelger@9064: this.distancesTable.clearCriteria(); gernotbelger@9064: this.filterResultCount.setValue(""); raimund@1567: return; raimund@1538: } teichmann@7731: teichmann@7731: if (from.equals(Float.NaN)) { gernotbelger@9064: combinedFilter = new Criterion("to", OperatorId.LESS_OR_EQUAL, to); teichmann@7731: gernotbelger@9064: locationFilter = new Criterion("from", OperatorId.LESS_OR_EQUAL, to); teichmann@7731: gernotbelger@9064: this.locationsTable.filterData(locationFilter); gernotbelger@9064: this.distancesTable.filterData(combinedFilter); gernotbelger@9064: this.filterResultCount.setValue(this.currentFiltered.getRecords().length); raimund@1538: return; raimund@1538: } teichmann@7731: teichmann@7731: if (to.equals(Float.NaN)) { gernotbelger@9064: combinedFilter = new Criterion("from", OperatorId.GREATER_OR_EQUAL, from); gernotbelger@9064: } else { gernotbelger@9064: final AdvancedCriteria c1 = new AdvancedCriteria(OperatorId.AND, gernotbelger@9064: new Criterion[] { new Criterion("from", OperatorId.GREATER_OR_EQUAL, from), new Criterion("from", OperatorId.LESS_OR_EQUAL, to) }); raimund@1538: gernotbelger@9064: final AdvancedCriteria c2 = new AdvancedCriteria(OperatorId.AND, gernotbelger@9064: new Criterion[] { new Criterion("to", OperatorId.GREATER_OR_EQUAL, from), new Criterion("to", OperatorId.LESS_OR_EQUAL, to) }); raimund@1538: gernotbelger@9064: final AdvancedCriteria c3 = new AdvancedCriteria(OperatorId.AND, gernotbelger@9064: new Criterion[] { new Criterion("from", OperatorId.LESS_OR_EQUAL, to), new Criterion("to", OperatorId.GREATER_OR_EQUAL, from) }); raimund@1538: gernotbelger@9064: combinedFilter = new AdvancedCriteria(OperatorId.OR, new Criterion[] { c1, c2, c3 }); raimund@1538: } gernotbelger@9064: this.locationsTable.filterData(combinedFilter); gernotbelger@9064: this.distancesTable.filterData(combinedFilter); gernotbelger@9064: this.filterResultCount.setValue(this.currentFiltered.getRecords().length); raimund@1567: raimund@1534: } raimund@1534: ingo@782: protected String getRiverName() { gernotbelger@9064: final ArtifactDescription adescr = this.artifact.getArtifactDescription(); ingo@2520: return adescr.getRiver(); ingo@782: } ingo@780: } ingo@780: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :