Skip to content
Snippets Groups Projects
Commit 36149496 authored by buczekp's avatar buczekp
Browse files

[LMS-1216] fixed:

- apply filters only if they are valid
- reload data when filter selection changes

SVN: 12827
parent 8ae8627b
No related branches found
No related tags found
No related merge requests found
......@@ -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
}
}
......
......@@ -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;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment