Skip to content

Commit a7d04ee

Browse files
committed
#5088 Add table filter control
1 parent 77bf5fd commit a7d04ee

File tree

12 files changed

+372
-207
lines changed

12 files changed

+372
-207
lines changed

stroom-core-client/src/main/java/stroom/dashboard/client/input/TableFilterPresenter.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,10 @@
4444
import java.util.ArrayList;
4545
import java.util.Collections;
4646
import java.util.Comparator;
47+
import java.util.HashMap;
4748
import java.util.List;
49+
import java.util.Map;
50+
import java.util.Map.Entry;
4851
import java.util.Set;
4952
import java.util.stream.Collectors;
5053

@@ -60,6 +63,7 @@ public class TableFilterPresenter
6063

6164
private final Provider<ColumnValuesFilterPresenter> columnValuesFilterPresenterProvider;
6265
private final List<HandlerRegistration> registrations = new ArrayList<>();
66+
private final Map<String, ColumnValuesFilterPresenter> columnFilterPresenters = new HashMap<>();
6367

6468
@Inject
6569
public TableFilterPresenter(final EventBus eventBus,
@@ -93,6 +97,7 @@ private void update(final TableFilterComponentSettings settings) {
9397
getView().getPanel().clear();
9498
registrations.forEach(HandlerRegistration::removeHandler);
9599
registrations.clear();
100+
columnFilterPresenters.clear();
96101

97102
if (settings.getTableId() != null) {
98103
final Component component = getDashboardContext()
@@ -121,6 +126,7 @@ private void update(final TableFilterComponentSettings settings) {
121126

122127
final ColumnValuesFilterPresenter columnValuesFilterPresenter =
123128
columnValuesFilterPresenterProvider.get();
129+
columnFilterPresenters.put(column.getId(), columnValuesFilterPresenter);
124130

125131
final List<ConditionalFormattingRule> rules =
126132
NullSafe.map(settings.getConditionalFormattingRules()).get(column.getId());
@@ -130,6 +136,12 @@ private void update(final TableFilterComponentSettings settings) {
130136
filterButtonProvider,
131137
column,
132138
() -> tablePresenter.getDataSupplier(column, rules),
139+
() -> columnFilterPresenters
140+
.entrySet()
141+
.stream()
142+
.collect(Collectors.toMap(
143+
Entry::getKey,
144+
entry -> entry.getValue().getSelection())),
133145
column.getColumnValueSelection(),
134146
tablePresenter.getColumnsManager(),
135147
rules);

stroom-core-client/src/main/java/stroom/dashboard/client/table/ColumnValuesDataSupplier.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,14 @@
33
import stroom.dashboard.shared.ColumnValues;
44
import stroom.dispatch.client.RestErrorHandler;
55
import stroom.query.api.Column;
6+
import stroom.query.api.ColumnValueSelection;
67
import stroom.query.api.ConditionalFormattingRule;
78
import stroom.task.client.TaskMonitorFactory;
89

910
import com.google.gwt.view.client.Range;
1011

1112
import java.util.List;
13+
import java.util.Map;
1214
import java.util.function.Consumer;
1315

1416
public abstract class ColumnValuesDataSupplier {
@@ -25,8 +27,9 @@ public ColumnValuesDataSupplier(final stroom.query.api.Column column,
2527
}
2628

2729
protected abstract void exec(Range range,
28-
Consumer<ColumnValues> dataConsumer,
29-
RestErrorHandler errorHandler);
30+
Consumer<ColumnValues> dataConsumer,
31+
RestErrorHandler errorHandler,
32+
Map<String, ColumnValueSelection> selections);
3033

3134
public Column getColumn() {
3235
return column;

stroom-core-client/src/main/java/stroom/dashboard/client/table/ColumnValuesFilterPresenter.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464
import java.util.Collections;
6565
import java.util.HashSet;
6666
import java.util.List;
67+
import java.util.Map;
6768
import java.util.function.Consumer;
6869
import javax.inject.Provider;
6970

@@ -81,6 +82,7 @@ public class ColumnValuesFilterPresenter extends MyPresenterWidget<ColumnValuesF
8182

8283
private Provider<Element> filterButtonProvider;
8384
private Provider<ColumnValuesDataSupplier> dataSupplierProvider;
85+
private Provider<Map<String, ColumnValueSelection>> selectionProvider;
8486
private final ColumnValueSelection.Builder selection = ColumnValueSelection.builder();
8587
private stroom.query.api.Column column;
8688
private RestDataProvider<ColumnValue, ColumnValues> dataProvider;
@@ -124,12 +126,14 @@ public ColumnValuesFilterPresenter(final EventBus eventBus,
124126
public void init(final Provider<Element> filterButtonProvider,
125127
final stroom.query.api.Column column,
126128
final Provider<ColumnValuesDataSupplier> dataSupplierProvider,
129+
final Provider<Map<String, ColumnValueSelection>> selectionProvider,
127130
final ColumnValueSelection currentSelection,
128131
final FilterCellManager filterCellManager,
129132
final List<ConditionalFormattingRule> rules) {
130133
this.filterButtonProvider = filterButtonProvider;
131134
this.column = column;
132135
this.dataSupplierProvider = dataSupplierProvider;
136+
this.selectionProvider = selectionProvider;
133137
this.filterCellManager = filterCellManager;
134138
rowStyles.setConditionalFormattingRules(rules);
135139

@@ -155,6 +159,7 @@ public void show(final Provider<Element> filterButtonProvider,
155159
this.filterButtonProvider = filterButtonProvider;
156160
this.column = column;
157161
this.dataSupplierProvider = dataSupplierProvider;
162+
this.selectionProvider = () -> null;
158163
this.filterCellManager = filterCellManager;
159164

160165
if (currentSelection != null) {
@@ -301,7 +306,7 @@ protected void exec(final Range range,
301306
if (dataSupplier != null) {
302307
dataSupplier.setTaskMonitorFactory(pagerView);
303308
dataSupplier.setNameFilter(nameFilter);
304-
dataSupplier.exec(range, dataConsumer, errorHandler);
309+
dataSupplier.exec(range, dataConsumer, errorHandler, selectionProvider.get());
305310
} else {
306311
dataConsumer.accept(new ColumnValues(Collections.emptyList(), PageResponse.empty()));
307312
}
@@ -313,6 +318,10 @@ protected void exec(final Range range,
313318
}
314319
}
315320

321+
public ColumnValueSelection getSelection() {
322+
return selection.build();
323+
}
324+
316325
public interface ColumnValuesFilterView extends View, HasUiHandlers<ColumnValuesFilterUiHandlers> {
317326

318327
void setList(View view);
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
package stroom.dashboard.client.table;
2+
3+
import stroom.dashboard.client.main.SearchModel;
4+
import stroom.dashboard.shared.ColumnValues;
5+
import stroom.dashboard.shared.ColumnValuesRequest;
6+
import stroom.dashboard.shared.ComponentResultRequest;
7+
import stroom.dashboard.shared.DashboardResource;
8+
import stroom.dashboard.shared.DashboardSearchRequest;
9+
import stroom.dashboard.shared.Search;
10+
import stroom.dashboard.shared.TableComponentSettings;
11+
import stroom.dashboard.shared.TableResultRequest;
12+
import stroom.dispatch.client.RestErrorHandler;
13+
import stroom.dispatch.client.RestFactory;
14+
import stroom.query.api.ColumnValueSelection;
15+
import stroom.query.api.ConditionalFormattingRule;
16+
import stroom.query.api.DateTimeSettings;
17+
import stroom.query.api.OffsetRange;
18+
import stroom.query.api.QueryKey;
19+
import stroom.query.api.ResultRequest.Fetch;
20+
import stroom.query.api.TableSettings;
21+
import stroom.util.shared.PageRequest;
22+
import stroom.util.shared.PageResponse;
23+
24+
import com.google.gwt.core.client.GWT;
25+
import com.google.gwt.view.client.Range;
26+
27+
import java.util.ArrayList;
28+
import java.util.Collections;
29+
import java.util.List;
30+
import java.util.Map;
31+
import java.util.function.Consumer;
32+
33+
public class TableColumnValuesDataSupplier extends ColumnValuesDataSupplier {
34+
35+
private static final DashboardResource DASHBOARD_RESOURCE = GWT.create(DashboardResource.class);
36+
37+
private final RestFactory restFactory;
38+
private final SearchModel searchModel;
39+
private final DashboardSearchRequest searchRequest;
40+
41+
public TableColumnValuesDataSupplier(
42+
final RestFactory restFactory,
43+
final SearchModel searchModel,
44+
final stroom.query.api.Column column,
45+
final TableSettings tableSettings,
46+
final DateTimeSettings dateTimeSettings,
47+
final String tableName,
48+
final List<ConditionalFormattingRule> conditionalFormattingRules) {
49+
super(column.copy().build(), conditionalFormattingRules);
50+
this.restFactory = restFactory;
51+
this.searchModel = searchModel;
52+
53+
DashboardSearchRequest dashboardSearchRequest = null;
54+
if (searchModel != null) {
55+
final QueryKey queryKey = searchModel.getCurrentQueryKey();
56+
final Search currentSearch = searchModel.getCurrentSearch();
57+
if (queryKey != null && currentSearch != null) {
58+
final List<ComponentResultRequest> requests = new ArrayList<>();
59+
currentSearch.getComponentSettingsMap().entrySet()
60+
.stream()
61+
.filter(settings -> settings.getValue() instanceof TableComponentSettings)
62+
.forEach(componentSettings -> requests.add(TableResultRequest
63+
.builder()
64+
.componentId(componentSettings.getKey())
65+
.requestedRange(OffsetRange.UNBOUNDED)
66+
.tableName(tableName)
67+
.tableSettings(tableSettings)
68+
.fetch(Fetch.ALL)
69+
.build()));
70+
71+
final Search search = Search
72+
.builder()
73+
.dataSourceRef(currentSearch.getDataSourceRef())
74+
.expression(currentSearch.getExpression())
75+
.componentSettingsMap(currentSearch.getComponentSettingsMap())
76+
.params(currentSearch.getParams())
77+
.timeRange(currentSearch.getTimeRange())
78+
.incremental(true)
79+
.queryInfo(currentSearch.getQueryInfo())
80+
.build();
81+
82+
dashboardSearchRequest = DashboardSearchRequest
83+
.builder()
84+
.searchRequestSource(searchModel.getSearchRequestSource())
85+
.queryKey(queryKey)
86+
.search(search)
87+
.componentResultRequests(requests)
88+
.dateTimeSettings(dateTimeSettings)
89+
.build();
90+
}
91+
}
92+
93+
searchRequest = dashboardSearchRequest;
94+
}
95+
96+
@Override
97+
protected void exec(final Range range,
98+
final Consumer<ColumnValues> dataConsumer,
99+
final RestErrorHandler errorHandler,
100+
final Map<String, ColumnValueSelection> selections) {
101+
if (searchRequest == null) {
102+
clear(dataConsumer);
103+
104+
} else {
105+
final PageRequest pageRequest = new PageRequest(range.getStart(), range.getLength());
106+
final ColumnValuesRequest columnValuesRequest = new ColumnValuesRequest(
107+
searchRequest,
108+
getColumn(),
109+
getNameFilter(),
110+
pageRequest,
111+
getConditionalFormattingRules(),
112+
selections);
113+
114+
restFactory
115+
.create(DASHBOARD_RESOURCE)
116+
.method(res -> res.getColumnValues(searchModel.getCurrentNode(),
117+
columnValuesRequest))
118+
.onSuccess(dataConsumer)
119+
.onFailure(e -> clear(dataConsumer))
120+
.taskMonitorFactory(getTaskMonitorFactory())
121+
.exec();
122+
}
123+
}
124+
125+
private void clear(final Consumer<ColumnValues> dataConsumer) {
126+
dataConsumer.accept(new ColumnValues(Collections.emptyList(), PageResponse.empty()));
127+
}
128+
}

0 commit comments

Comments
 (0)