diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/filter/FilterToolbar.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/filter/FilterToolbar.java index 8dfff2b98e844f96097a765d8a3ca05665b4405f..8857e9aa6b7d4bc6429ccabc643de2d663e04566 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/filter/FilterToolbar.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/filter/FilterToolbar.java @@ -49,22 +49,22 @@ public class FilterToolbar<T> extends ToolBar implements IDatabaseModificationOb private final FilterSelectionWidget filterSelectionWidget; - private final IDelegatedAction delegatedAction; + private final IDelegatedAction applyFiltersAction; private final TextToolItem applyTool; public FilterToolbar(IViewContext<ICommonClientServiceAsync> viewContext, String gridId, IDisplayTypeIDProvider displayTypeIDProvider, - final List<PagingColumnFilter<T>> filterWidgets, IDelegatedAction delegatedAction) + final List<PagingColumnFilter<T>> filterWidgets, IDelegatedAction applyFiltersAction) { this.columnFilters = filterWidgets; - this.delegatedAction = delegatedAction; + this.applyFiltersAction = applyFiltersAction; add(new LabelToolItem(viewContext.getMessage(Dict.FILTER) + ": ")); filterSelectionWidget = new FilterSelectionWidget(viewContext, gridId, displayTypeIDProvider); filterContainer = new LayoutContainer(new FillLayout(Orientation.HORIZONTAL)); filterContainer.setLayoutOnChange(true); // fixes jumping filter fields in firefox - AdapterToolItem filterTool = new AdapterToolItem(filterSelectionWidget); + AdapterToolItem filterTool = new AdapterToolItem(filterSelectionWidget); add(filterTool); add(new AdapterToolItem(filterContainer)); applyTool = new TextToolItem(viewContext.getMessage(Dict.APPLY_FILTER)); @@ -105,28 +105,33 @@ public class FilterToolbar<T> extends ToolBar implements IDatabaseModificationOb updateFilterContainer(); } - public CustomFilterInfo<T> tryGetCustomFilters() + public boolean isColumnFilterSelected() { Filter selected = filterSelectionWidget.tryGetSelected(); - if (selected != null) + return (selected != null) && (selected.getName().equals(Filter.COLUMN_FILTER)); + } + + public boolean isCustomFilterSelected() + { + Filter selected = filterSelectionWidget.tryGetSelected(); + return (selected != null) && (selected.getName().equals(Filter.COLUMN_FILTER) == false); + } + + public CustomFilterInfo<T> tryGetCustomFilter() + { + if (isCustomFilterSelected() && isValid()) { - if (selected.getName().equals(Filter.COLUMN_FILTER)) - { - return null; - } else + Filter selected = filterSelectionWidget.tryGetSelected(); + CustomFilterInfo<T> info = new CustomFilterInfo<T>(); + info.setExpression(selected.getExpression()); + Set<ParameterWithValue> parameters = new HashSet<ParameterWithValue>(); + for (Component field : filterContainer.getItems()) { - CustomFilterInfo<T> info = new CustomFilterInfo<T>(); - info.setExpression(selected.getExpression()); - Set<ParameterWithValue> parameters = new HashSet<ParameterWithValue>(); - for (Component field : filterContainer.getItems()) - { - parameters.add(((CustomFilterParameterWidget) field).getParameterWithValue()); - } - info.setParameters(parameters); - return info; + parameters.add(((CustomFilterParameterWidget) field).getParameterWithValue()); } - + info.setParameters(parameters); + return info; } return null; } @@ -165,12 +170,8 @@ public class FilterToolbar<T> extends ToolBar implements IDatabaseModificationOb private void apply() { - boolean valid = isValid(); - if (valid) - { - FilterToolbar.this.delegatedAction.execute(); - } - updateApplyTool(); + // if filter is invalid the action only refreshes the grid without applying any filters + applyFiltersAction.execute(); } private void updateApplyTool() @@ -180,17 +181,7 @@ public class FilterToolbar<T> extends ToolBar implements IDatabaseModificationOb private boolean isValid() { - Filter filter = filterSelectionWidget.tryGetSelected(); - if (filter == null) - { - return true; - } else if (filter.getName().equals(Filter.COLUMN_FILTER)) - { - return true; - } else if (filter.getParameters().size() == 0) - { - return true; - } else + if (isCustomFilterSelected()) { boolean valid = true; for (Component field : filterContainer.getItems()) @@ -200,6 +191,9 @@ public class FilterToolbar<T> extends ToolBar implements IDatabaseModificationOb valid = f.isValid() && valid; } return valid; + } else + { + return true; // column filters are always valid } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractBrowserGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractBrowserGrid.java index cc9bf199bb0c16c1b4c3dc46cdb1dcb3d7b8bbb7..f449d48f94f75da3760a521fa5d183506374f327 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractBrowserGrid.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractBrowserGrid.java @@ -501,19 +501,22 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod protected CustomFilterInfo<T> getCustomFilter() { - return filterToolbar.tryGetCustomFilters(); + return filterToolbar.tryGetCustomFilter(); } // returns filters which user wants to apply to the data private List<GridFilterInfo<T>> getAppliedFilters() { List<GridFilterInfo<T>> filters = new ArrayList<GridFilterInfo<T>>(); - for (PagingColumnFilter<T> filterWidget : filterWidgets) + if (filterToolbar.isColumnFilterSelected()) { - GridFilterInfo<T> filter = filterWidget.tryGetFilter(); - if (filter != null) + for (PagingColumnFilter<T> filterWidget : filterWidgets) { - filters.add(filter); + GridFilterInfo<T> filter = filterWidget.tryGetFilter(); + if (filter != null) + { + filters.add(filter); + } } } return filters; @@ -1051,8 +1054,8 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod List<PagingColumnFilter<T>> newFilterWidgets = createFilterWidgets(filteredColumns); rebuildFilterWidgets(newFilterWidgets, this.filterWidgets, viewContext); - // NOTE: If we decide to hide filters when there are no custom filters and no column filters - // are chosen this code should be reused. + // NOTE: If we decide to hide filters when there are no custom filters and no column filters + // are chosen this code should be reused. // boolean noFiltersBefore = filterWidgets.isEmpty(); // boolean noFiltersAfter = newFilterWidgets.isEmpty(); this.filterWidgets = newFilterWidgets; @@ -1232,7 +1235,7 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod SortInfo<T> sortInfo = getGridSortInfo(); final TableExportCriteria<T> exportCriteria = new TableExportCriteria<T>(resultSetKey, sortInfo, getAppliedFilters(), columnDefs, - filterToolbar.tryGetCustomFilters()); + filterToolbar.tryGetCustomFilter()); return exportCriteria; }