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: ingo@780: import com.google.gwt.core.client.GWT; ingo@780: import com.google.gwt.i18n.client.NumberFormat; ingo@780: 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: teichmann@5835: import org.dive4elements.river.client.client.Config; teichmann@5835: import org.dive4elements.river.client.client.FLYSConstants; teichmann@5835: import org.dive4elements.river.client.client.event.FilterHandler; teichmann@5835: import org.dive4elements.river.client.client.event.RangeFilterEvent; teichmann@5835: import org.dive4elements.river.client.client.event.StringFilterEvent; teichmann@5835: import org.dive4elements.river.client.client.ui.range.DistanceInfoDataSource; teichmann@5835: import org.dive4elements.river.client.client.ui.range.LocationsTable; teichmann@5835: import org.dive4elements.river.client.client.ui.range.RangeTable; teichmann@5835: import org.dive4elements.river.client.shared.model.ArtifactDescription; teichmann@5835: import org.dive4elements.river.client.shared.model.Data; teichmann@5835: import org.dive4elements.river.client.shared.model.DataItem; teichmann@5835: import org.dive4elements.river.client.shared.model.DataList; teichmann@5835: import org.dive4elements.river.client.shared.model.DefaultData; teichmann@5835: import org.dive4elements.river.client.shared.model.DefaultDataItem; ingo@780: christian@4131: import java.util.ArrayList; christian@4131: import java.util.LinkedHashMap; christian@4131: import java.util.List; ingo@780: ingo@780: felix@7141: /** Panel to allow input of distance for calculation range. */ tom@8856: public class DistancePanel tom@8856: extends AbstractUIProvider implements BlurHandler, FilterHandler raimund@863: { 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"; tom@8800: public static final String FIELD_STEP = "ld_step"; ingo@787: ingo@780: ingo@780: protected FLYSConstants MSG = GWT.create(FLYSConstants.class); ingo@780: ingo@781: 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: ingo@787: ingo@787: public DistancePanel(String labelOrientation) { ingo@781: distancePanel = new DoubleRangePanel( ingo@793: labelFrom(), labelTo(), labelStep(), ingo@787: 0d, 0d, 0d, 250, this, labelOrientation); ingo@780: } ingo@780: ingo@780: ingo@780: @Override ingo@780: public Canvas create(DataList data) { ingo@780: VLayout layout = new VLayout(); ingo@780: layout.setMembersMargin(10); ingo@780: ingo@1423: Label label = new Label(getLabel()); ingo@780: ingo@780: Canvas submit = getNextButton(); ingo@780: ingo@780: label.setHeight(25); ingo@780: distancePanel.setHeight(50); ingo@780: ingo@780: layout.addMember(label); ingo@780: layout.addMember(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: ingo@780: ingo@780: @Override ingo@780: public Canvas createOld(DataList dataList) { ingo@780: String s = getOldSelectionString(dataList); ingo@780: String l = dataList.getLabel(); ingo@780: ingo@780: Label label = new Label(l); ingo@780: Label selected = new Label(s); ingo@780: ingo@780: 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: ingo@780: ingo@780: protected String getOldSelectionString(DataList dataList) { ingo@780: List items = dataList.getAll(); ingo@780: tom@8800: Data dFrom = getData(items, getLowerField()); tom@8800: Data dTo = getData(items, getUpperField()); tom@8800: Data dStep = getData(items, getStepField()); ingo@780: ingo@780: DataItem[] from = dFrom.getItems(); ingo@780: DataItem[] to = dTo.getItems(); ingo@780: DataItem[] step = dStep.getItems(); ingo@780: ingo@780: 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: ingo@780: ingo@1423: protected String getLabel() { ingo@1423: return MSG.distance_state(); ingo@1423: } ingo@1423: ingo@1423: ingo@793: protected String labelFrom() { ingo@793: return getLabelFrom() + " [" + getUnitFrom() + "]"; ingo@793: } ingo@793: ingo@793: ingo@787: protected String getLabelFrom() { ingo@793: return MSG.dpLabelFrom(); ingo@793: } ingo@793: ingo@793: ingo@793: protected String getUnitFrom() { ingo@793: return MSG.dpUnitFrom(); ingo@793: } ingo@793: ingo@793: ingo@793: protected String labelTo() { ingo@793: return getLabelTo() + " [" + getUnitTo() + "]"; ingo@787: } ingo@787: ingo@787: ingo@787: protected String getLabelTo() { ingo@793: return MSG.dpLabelTo(); ingo@793: } ingo@793: ingo@793: ingo@793: protected String getUnitTo() { ingo@793: return MSG.dpUnitTo(); ingo@793: } ingo@793: ingo@793: ingo@793: protected String labelStep() { ingo@793: return getLabelStep() + " [" + getUnitStep() + "]"; ingo@787: } ingo@787: ingo@787: ingo@787: protected String getLabelStep() { ingo@793: return MSG.dpLabelStep(); ingo@793: } ingo@793: ingo@793: ingo@793: protected String getUnitStep() { ingo@793: return MSG.dpUnitStep(); ingo@787: } ingo@787: ingo@787: ingo@787: protected String getLowerField() { ingo@787: return FIELD_LOWER; ingo@787: } ingo@787: ingo@787: ingo@787: protected String getUpperField() { ingo@787: return FIELD_UPPER; ingo@787: } ingo@787: ingo@787: ingo@787: protected String getStepField() { ingo@787: return FIELD_STEP; ingo@787: } ingo@787: ingo@787: ingo@780: @Override ingo@780: public List validate() { ingo@780: List errors = new ArrayList(); ingo@780: ingo@780: if (!distancePanel.validateForm()) { ingo@780: errors.add(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: ingo@780: ingo@780: protected void validateFrom(List errors) { ingo@780: double from = distancePanel.getFrom(); ingo@780: ingo@780: if (from < min || from > max) { ingo@780: NumberFormat nf = NumberFormat.getDecimalFormat(); ingo@780: ingo@780: String tmp = MSG.error_validate_lower_range(); ingo@780: tmp = tmp.replace("$1", nf.format(from)); ingo@780: tmp = tmp.replace("$2", nf.format(min)); ingo@780: ingo@780: distancePanel.setFrom(min); ingo@780: errors.add(tmp); ingo@780: } ingo@780: } ingo@780: ingo@780: ingo@780: protected void validateTo(List errors) { ingo@780: double to = distancePanel.getTo(); ingo@780: ingo@780: if (to < min || to > max) { ingo@780: NumberFormat nf = NumberFormat.getDecimalFormat(); ingo@780: ingo@780: String tmp = MSG.error_validate_upper_range(); ingo@780: tmp = tmp.replace("$1", nf.format(to)); ingo@780: tmp = tmp.replace("$2", nf.format(max)); ingo@780: ingo@780: distancePanel.setTo(max); ingo@780: errors.add(tmp); ingo@780: } ingo@780: } ingo@780: ingo@780: ingo@780: @Override ingo@780: public Data[] getData() { ingo@1387: Data[] data = new Data[4]; ingo@780: ingo@780: data[0] = getDataFrom(); ingo@780: data[1] = getDataTo(); ingo@780: data[2] = getDataStep(); ingo@780: ingo@1387: DataItem item = new DefaultDataItem("ld_mode","ld_mode", "distance"); ingo@1387: data[3] = new DefaultData( ingo@1387: "ld_mode", null, null, new DataItem[] { item }); ingo@1387: ingo@780: return data; ingo@780: } ingo@780: ingo@780: ingo@780: protected Data getDataFrom() { ingo@787: String value = String.valueOf(distancePanel.getFrom()); tom@8800: String field = getLowerField(); ingo@787: ingo@787: DataItem item = new DefaultDataItem(field, field, value); ingo@780: return new DefaultData( ingo@787: field, null, null, new DataItem[] { item }); ingo@780: } ingo@780: ingo@780: ingo@780: protected Data getDataTo() { ingo@787: String value = String.valueOf(distancePanel.getTo()); tom@8800: String field = getUpperField(); ingo@787: ingo@787: DataItem item = new DefaultDataItem(field, field, value); ingo@780: return new DefaultData( ingo@787: field, null, null, new DataItem[] { item }); ingo@780: } ingo@780: ingo@780: ingo@780: protected Data getDataStep() { ingo@787: String value = String.valueOf(distancePanel.getStep()); tom@8800: String field = getStepField(); ingo@787: ingo@787: DataItem item = new DefaultDataItem(field, field, value); ingo@780: return new DefaultData( ingo@787: field, null, null, new DataItem[] { item }); ingo@780: } ingo@780: ingo@780: ingo@780: @Override ingo@780: public void onBlur(BlurEvent event) { ingo@780: distancePanel.validateForm(); ingo@780: } ingo@780: ingo@780: ingo@780: protected void initMinMaxValues(DataList data) { tom@8800: Data f = getData(data.getAll(), getLowerField()); tom@8800: Data t = getData(data.getAll(), getUpperField()); ingo@780: ingo@780: DataItem[] fItems = f.getItems(); ingo@780: DataItem[] tItems = t.getItems(); ingo@780: ingo@780: try { ingo@780: min = Double.valueOf(fItems[0].getStringValue()); ingo@780: max = Double.valueOf(tItems[0].getStringValue()); ingo@780: } ingo@780: catch (NumberFormatException nfe) { ingo@780: min = -Double.MAX_VALUE; ingo@780: max = Double.MAX_VALUE; ingo@780: } ingo@780: } ingo@780: ingo@780: ingo@780: protected void initDefaultValues(DataList data) { ingo@780: initDefaultFrom(data); ingo@780: initDefaultTo(data); ingo@780: initDefaultStep(data); ingo@780: } ingo@780: ingo@780: ingo@780: protected void initDefaultFrom(DataList data) { tom@8800: 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: } ingo@780: catch (NumberFormatException nfe) { ingo@780: // do nothing ingo@780: } ingo@780: ingo@780: distancePanel.setFrom(from); ingo@780: } ingo@780: ingo@780: ingo@787: protected double getDefaultFrom() { ingo@787: return min; ingo@787: } ingo@787: ingo@787: ingo@780: protected void initDefaultTo(DataList data) { tom@8800: 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: } ingo@780: catch (NumberFormatException nfe) { ingo@780: // do nothing ingo@780: } ingo@780: ingo@780: distancePanel.setTo(to); ingo@780: } ingo@780: ingo@780: ingo@787: protected double getDefaultTo() { ingo@787: return max; ingo@787: } ingo@787: ingo@787: ingo@780: protected void initDefaultStep(DataList data) { tom@8800: 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: } ingo@780: catch (NumberFormatException nfe) { ingo@780: // do nothing ingo@780: } ingo@780: ingo@780: distancePanel.setStep(step); ingo@780: } ingo@780: ingo@780: ingo@787: protected double getDefaultStep() { christian@4131: return DEFAULT_STEP_WIDTH; ingo@787: } ingo@787: ingo@787: felix@7745: /** Gets the double from default in data, null if none. */ ingo@780: protected double getDefaultValue(Data data) ingo@780: throws NumberFormatException ingo@780: { ingo@780: DataItem def = data.getDefault(); ingo@780: String defValue = def != null ? def.getStringValue() : null; ingo@780: ingo@780: return Double.valueOf(defValue); ingo@780: } ingo@781: ingo@781: ingo@781: protected void initHelperPanel() { ingo@793: distancesTable = new RangeTable(); ingo@793: locationsTable = new LocationsTable(); ingo@793: ingo@782: Config config = Config.getInstance(); ingo@782: String url = config.getServerUrl(); ingo@782: String river = getRiverName(); ingo@782: ingo@782: distancesTable.setAutoFetchData(true); ingo@782: locationsTable.setAutoFetchData(true); ingo@782: distancesTable.setDataSource(new DistanceInfoDataSource( ingo@782: url, river, "distances")); ingo@782: locationsTable.setDataSource(new DistanceInfoDataSource( ingo@782: url, river, "locations")); ingo@782: ingo@783: distancesTable.addRecordClickHandler(new RecordClickHandler() { christian@4131: @Override ingo@783: public void onRecordClick(RecordClickEvent e) { ingo@783: Record r = e.getRecord(); ingo@783: ingo@783: String from = r.getAttribute("from"); ingo@783: String to = r.getAttribute("to"); ingo@783: ingo@783: try { ingo@783: distancePanel.setFrom(Double.valueOf(from)); ingo@783: distancePanel.setTo(Double.valueOf(to)); ingo@783: } ingo@783: catch (NumberFormatException nfe) { ingo@783: SC.warn(MSG.wrongFormat()); ingo@783: } ingo@783: } ingo@783: }); ingo@783: ingo@783: locationsTable.addRecordClickHandler(new RecordClickHandler() { christian@4131: @Override ingo@783: public void onRecordClick(RecordClickEvent e) { ingo@783: Record r = e.getRecord(); ingo@783: int field = e.getFieldNum(); ingo@783: ingo@783: try { ingo@783: String value = r.getAttribute("from"); ingo@783: ingo@783: switch (field) { ingo@783: case 0: ingo@783: distancePanel.setFrom(Double.valueOf(value)); ingo@783: break; ingo@783: case 1: ingo@783: distancePanel.setTo(Double.valueOf(value)); ingo@783: break; ingo@783: } ingo@783: } ingo@783: catch (NumberFormatException nfe) { ingo@783: SC.warn(MSG.wrongFormat()); ingo@783: } ingo@783: } ingo@783: }); ingo@783: ingo@781: tabs = new TabSet(); ingo@781: tabs.setWidth100(); ingo@781: tabs.setHeight100(); ingo@781: ingo@781: Tab locations = new Tab(MSG.locations()); ingo@781: Tab distances = new Tab(MSG.distance()); ingo@781: ingo@781: locations.setPane(locationsTable); ingo@781: distances.setPane(distancesTable); ingo@781: ingo@781: tabs.addTab(locations, 0); ingo@781: tabs.addTab(distances, 1); ingo@781: raimund@1567: filterResultCount = new StaticTextItem(MSG.resultCount()); raimund@1567: filterResultCount.setTitleAlign(Alignment.LEFT); raimund@1567: filterResultCount.setTitleStyle("color: #000"); raimund@1567: raimund@1534: filterDescription = new TableFilter(); raimund@1534: filterDescription.setHeight("30px"); raimund@1534: filterDescription.addFilterHandler(this); raimund@1534: raimund@1534: filterRange = new RangeTableFilter(); raimund@1534: filterRange.setHeight("30px"); raimund@1534: filterRange.addFilterHandler(this); raimund@1534: filterRange.setVisible(false); raimund@1534: raimund@1534: SelectItem filterCriteria = new SelectItem(); raimund@1534: filterCriteria.setShowTitle(false); raimund@1534: filterCriteria.setWidth(100); raimund@1534: filterCriteria.addChangedHandler(new ChangedHandler() { christian@4131: @Override raimund@1534: public void onChanged(ChangedEvent e) { raimund@1534: if(e.getValue().toString().equals("range")) { raimund@1534: filterRange.setVisible(true); raimund@1534: filterDescription.setVisible(false); raimund@1534: filterDescription.clear(); raimund@1534: } raimund@1534: else { raimund@1534: filterRange.setVisible(false); raimund@1534: filterRange.clear(); raimund@1534: filterDescription.setVisible(true); raimund@1534: } raimund@1534: } raimund@1534: }); raimund@1534: raimund@1534: LinkedHashMap filterMap = raimund@1534: new LinkedHashMap(); raimund@1534: filterMap.put("description", MSG.description()); raimund@1534: filterMap.put("range", MSG.range()); raimund@1534: filterCriteria.setValueMap(filterMap); raimund@1534: filterCriteria.setValue("description"); raimund@1534: raimund@1534: DynamicForm form = new DynamicForm(); raimund@1534: form.setFields(filterCriteria); raimund@1534: raimund@1567: DynamicForm form2 = new DynamicForm(); raimund@1567: form2.setFields(filterResultCount); raimund@1567: raimund@1534: HLayout filterLayout = new HLayout(); raimund@1534: filterLayout.addMember(form); raimund@1534: filterLayout.addMember(filterDescription); raimund@1534: filterLayout.addMember(filterRange); raimund@1567: filterLayout.setHeight(30); raimund@893: tabs.addTabSelectedHandler(new TabSelectedHandler() { christian@4131: @Override raimund@893: public void onTabSelected(TabSelectedEvent evt) { raimund@1534: filterDescription.clear(); raimund@1538: filterRange.clear(); raimund@1567: filterResultCount.setValue(""); raimund@1567: raimund@1567: Canvas c = evt.getTabPane(); raimund@1567: if(c instanceof ListGrid) { raimund@1567: currentFiltered = (ListGrid)c; raimund@1567: } raimund@893: } raimund@893: }); raimund@893: ingo@788: helperContainer.addMember(tabs); raimund@1534: helperContainer.addMember(filterLayout); raimund@1567: helperContainer.addMember(form2); raimund@863: } raimund@863: raimund@863: christian@4131: @Override raimund@863: public void onFilterCriteriaChanged(StringFilterEvent event) { raimund@863: String search = event.getFilter(); raimund@863: raimund@863: if (search != null && search.length() > 0) { raimund@863: Criteria c = new Criteria("description", search); raimund@863: locationsTable.filterData(c); raimund@863: distancesTable.filterData(c); raimund@1567: filterResultCount.setValue(currentFiltered.getRecords().length); raimund@863: } raimund@863: else { raimund@893: locationsTable.clearCriteria(); raimund@893: distancesTable.clearCriteria(); raimund@1567: filterResultCount.setValue(""); raimund@863: } ingo@781: } ingo@782: ingo@782: christian@4131: @Override raimund@1534: public void onFilterCriteriaChanged(RangeFilterEvent event) { raimund@1538: Float from = event.getFrom() - 0.001f; raimund@1538: 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)) { raimund@1538: locationsTable.clearCriteria(); raimund@1538: distancesTable.clearCriteria(); raimund@1567: filterResultCount.setValue(""); raimund@1567: return; raimund@1538: } teichmann@7731: teichmann@7731: if (from.equals(Float.NaN)) { teichmann@7731: combinedFilter = teichmann@7731: new Criterion("to", OperatorId.LESS_OR_EQUAL, to); teichmann@7731: raimund@1538: locationFilter = raimund@1538: new Criterion("from", OperatorId.LESS_OR_EQUAL, to); teichmann@7731: raimund@1538: locationsTable.filterData(locationFilter); raimund@1538: distancesTable.filterData(combinedFilter); raimund@1567: filterResultCount.setValue(currentFiltered.getRecords().length); raimund@1538: return; raimund@1538: } teichmann@7731: teichmann@7731: if (to.equals(Float.NaN)) { raimund@1538: combinedFilter = raimund@1538: new Criterion("from", OperatorId.GREATER_OR_EQUAL, from); raimund@1538: } raimund@1538: else { raimund@1538: AdvancedCriteria c1 = raimund@1538: new AdvancedCriteria(OperatorId.AND, new Criterion[] { raimund@1538: new Criterion("from", OperatorId.GREATER_OR_EQUAL, from), raimund@1538: new Criterion("from", OperatorId.LESS_OR_EQUAL, to) raimund@1538: }); raimund@1538: raimund@1538: AdvancedCriteria c2 = raimund@1538: new AdvancedCriteria(OperatorId.AND, new Criterion[] { raimund@1538: new Criterion("to", OperatorId.GREATER_OR_EQUAL, from), raimund@1538: new Criterion("to", OperatorId.LESS_OR_EQUAL, to) raimund@1538: }); raimund@1538: raimund@1538: AdvancedCriteria c3 = raimund@1538: new AdvancedCriteria(OperatorId.AND, new Criterion[] { raimund@1538: new Criterion("from", OperatorId.LESS_OR_EQUAL, to), raimund@1538: new Criterion("to", OperatorId.GREATER_OR_EQUAL, from) raimund@1538: }); raimund@1538: raimund@1538: combinedFilter = raimund@1538: new AdvancedCriteria(OperatorId.OR, new Criterion[] { raimund@1538: c1, c2, c3 raimund@1538: }); raimund@1538: } raimund@1538: locationsTable.filterData(combinedFilter); raimund@1538: distancesTable.filterData(combinedFilter); raimund@1567: filterResultCount.setValue(currentFiltered.getRecords().length); raimund@1567: raimund@1534: } raimund@1534: raimund@1534: ingo@782: protected String getRiverName() { ingo@782: ArtifactDescription adescr = 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 :