Skip to content

Commit 30359a3

Browse files
committed
#4484 Change selection handling to use fully qualified keys
1 parent 7e90dcb commit 30359a3

File tree

33 files changed

+1695
-280
lines changed

33 files changed

+1695
-280
lines changed

stroom-app/src/test/java/stroom/search/AbstractInteractiveSearchTest.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
import stroom.query.api.ExpressionOperator.Op;
2828
import stroom.query.api.ExpressionTerm.Condition;
2929
import stroom.query.api.Format;
30-
import stroom.query.api.ParamSubstituteUtil;
30+
import stroom.query.api.ParamUtil;
3131
import stroom.query.api.Query;
3232
import stroom.query.api.QueryKey;
3333
import stroom.query.api.Row;
@@ -509,26 +509,26 @@ private TableSettings createTableSettings(final boolean extractValues) {
509509
final Column streamIdColumn = Column.builder()
510510
.id("1")
511511
.name("Stream Id")
512-
.expression(ParamSubstituteUtil.makeParam(IndexConstants.STREAM_ID))
512+
.expression(ParamUtil.create(IndexConstants.STREAM_ID))
513513
.build();
514514

515515
final Column eventIdColumn = Column.builder()
516516
.id("2")
517517
.name("Event Id")
518-
.expression(ParamSubstituteUtil.makeParam(IndexConstants.EVENT_ID))
518+
.expression(ParamUtil.create(IndexConstants.EVENT_ID))
519519
.build();
520520

521521
final Column timeColumn = Column.builder()
522522
.id("3")
523523
.name("Event Time")
524-
.expression(ParamSubstituteUtil.makeParam("EventTime"))
524+
.expression(ParamUtil.create("EventTime"))
525525
.format(Format.DATE_TIME)
526526
.build();
527527

528528
final Column statusColumn = Column.builder()
529529
.id("4")
530530
.name("Status")
531-
.expression(ParamSubstituteUtil.makeParam(AnnotationFields.STATUS))
531+
.expression(ParamUtil.create(AnnotationFields.STATUS))
532532
.build();
533533

534534
final DocRef resultPipeline = commonIndexingTestHelper.getSearchResultPipeline();

stroom-app/src/test/java/stroom/search/TestEventSearch.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
import stroom.query.api.ExpressionTerm.Condition;
2828
import stroom.query.api.Format;
2929
import stroom.query.api.OffsetRange;
30-
import stroom.query.api.ParamSubstituteUtil;
30+
import stroom.query.api.ParamUtil;
3131
import stroom.query.api.Query;
3232
import stroom.query.api.Result;
3333
import stroom.query.api.ResultRequest;
@@ -188,13 +188,13 @@ private TableSettings createTableSettings(final LuceneIndexDoc index, final bool
188188
final Column idColumn = Column.builder()
189189
.id("1")
190190
.name("IdTreeNode")
191-
.expression(ParamSubstituteUtil.makeParam("StreamId"))
191+
.expression(ParamUtil.create("StreamId"))
192192
.build();
193193

194194
final Column timeColumn = Column.builder()
195195
.id("2")
196196
.name("Event Time")
197-
.expression(ParamSubstituteUtil.makeParam("EventTime"))
197+
.expression(ParamUtil.create("EventTime"))
198198
.format(Format.DATE_TIME)
199199
.build();
200200

stroom-app/src/test/java/stroom/search/TestInteractiveSearch2.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import stroom.index.shared.IndexConstants;
2424
import stroom.query.api.Column;
2525
import stroom.query.api.Format;
26-
import stroom.query.api.ParamSubstituteUtil;
26+
import stroom.query.api.ParamUtil;
2727
import stroom.query.api.Row;
2828
import stroom.query.api.TableSettings;
2929
import stroom.search.impl.EventSearchTaskHandler;
@@ -466,26 +466,26 @@ private TableSettings createTableSettings(final boolean extractValues) {
466466
final Column streamIdColumn = Column.builder()
467467
.id("Stream Id")
468468
.name("Stream Id")
469-
.expression(ParamSubstituteUtil.makeParam(IndexConstants.STREAM_ID))
469+
.expression(ParamUtil.create(IndexConstants.STREAM_ID))
470470
.build();
471471

472472
final Column eventIdColumn = Column.builder()
473473
.id("Event Id")
474474
.name("Event Id")
475-
.expression(ParamSubstituteUtil.makeParam(IndexConstants.EVENT_ID))
475+
.expression(ParamUtil.create(IndexConstants.EVENT_ID))
476476
.build();
477477

478478
final Column timeColumn = Column.builder()
479479
.id("Event Time")
480480
.name("Event Time")
481-
.expression(ParamSubstituteUtil.makeParam("EventTime"))
481+
.expression(ParamUtil.create("EventTime"))
482482
.format(Format.DATE_TIME)
483483
.build();
484484

485485
final Column statusColumn = Column.builder()
486486
.id("Status")
487487
.name("Status")
488-
.expression(ParamSubstituteUtil.makeParam(AnnotationFields.STATUS))
488+
.expression(ParamUtil.create(AnnotationFields.STATUS))
489489
.build();
490490

491491
final DocRef resultPipeline = commonIndexingTestHelper.getSearchResultPipeline();

stroom-app/src/test/java/stroom/search/TestTagCloudSearch.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
import stroom.query.api.ExpressionTerm.Condition;
2828
import stroom.query.api.Format;
2929
import stroom.query.api.OffsetRange;
30-
import stroom.query.api.ParamSubstituteUtil;
30+
import stroom.query.api.ParamUtil;
3131
import stroom.query.api.Query;
3232
import stroom.query.api.ResultRequest;
3333
import stroom.query.api.ResultRequest.Fetch;
@@ -80,7 +80,7 @@ void test() {
8080
final Column columnText = Column.builder()
8181
.id("Text")
8282
.name("Text")
83-
.expression(ParamSubstituteUtil.makeParam("Text"))
83+
.expression(ParamUtil.create("Text"))
8484
.group(0)
8585
.format(Format.TEXT)
8686
.build();

stroom-app/src/test/java/stroom/search/manualtesting/TestGroupedCountsInteractiveSearch.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
import stroom.query.api.ExpressionOperator;
2727
import stroom.query.api.ExpressionTerm;
2828
import stroom.query.api.Format;
29-
import stroom.query.api.ParamSubstituteUtil;
29+
import stroom.query.api.ParamUtil;
3030
import stroom.query.api.Row;
3131
import stroom.query.api.TableSettings;
3232
import stroom.query.common.v2.ResultStoreManager;
@@ -175,7 +175,7 @@ private TableSettings createTableSettings(Boolean extractValues) {
175175
final Column groupedUserId = Column.builder()
176176
.id("User")
177177
.name("User")
178-
.expression(ParamSubstituteUtil.makeParam("User"))
178+
.expression(ParamUtil.create("User"))
179179
.group(0)
180180
.build();
181181

stroom-app/src/test/java/stroom/statistics/impl/sql/TestStatisticsQueryServiceImpl.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import stroom.query.api.ExpressionOperator;
2525
import stroom.query.api.ExpressionOperator.Op;
2626
import stroom.query.api.ExpressionTerm;
27-
import stroom.query.api.ParamSubstituteUtil;
27+
import stroom.query.api.ParamUtil;
2828
import stroom.query.api.Query;
2929
import stroom.query.api.QueryKey;
3030
import stroom.query.api.ResultRequest;
@@ -433,7 +433,7 @@ private void addColumn(String name, final TableSettings.Builder tableSettingsBui
433433
final Column column = Column.builder()
434434
.id(name)
435435
.name(name)
436-
.expression(ParamSubstituteUtil.makeParam(name))
436+
.expression(ParamUtil.create(name))
437437
.build();
438438
tableSettingsBuilder.addColumns(column);
439439
}

stroom-core-client/src/main/java/stroom/dashboard/client/embeddedquery/EmbeddedQueryPresenter.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import stroom.query.api.DestroyReason;
4040
import stroom.query.api.ExpressionOperator;
4141
import stroom.query.api.OffsetRange;
42+
import stroom.query.api.ParamUtil;
4243
import stroom.query.api.QLVisResult;
4344
import stroom.query.api.Result;
4445
import stroom.query.api.ResultStoreInfo;
@@ -530,10 +531,14 @@ private void run(final boolean incremental,
530531
// Destroy any previous query.
531532
queryModel.reset(DestroyReason.NO_LONGER_NEEDED);
532533

534+
// Perform parameter substitution on query.
535+
final String replaced = ParamUtil
536+
.replaceParameters(query, getDashboardContext(), true);
537+
533538
// Start search.
534539
final DashboardContext dashboardContext = getDashboardContext();
535540
queryModel.startNewSearch(
536-
query,
541+
replaced,
537542
dashboardContext.getParams(),
538543
dashboardContext.getResolvedTimeRange(),
539544
incremental,

stroom-core-client/src/main/java/stroom/dashboard/client/main/DashboardContext.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import stroom.docref.DocRef;
55
import stroom.query.api.ExpressionOperator;
66
import stroom.query.api.Param;
7+
import stroom.query.api.ParamValues;
78
import stroom.query.api.TimeRange;
89

910
import com.google.gwt.safehtml.shared.SafeHtml;
@@ -12,7 +13,7 @@
1213
import java.util.List;
1314
import java.util.Optional;
1415

15-
public interface DashboardContext {
16+
public interface DashboardContext extends ParamValues {
1617

1718
List<Param> getParams();
1819

stroom-core-client/src/main/java/stroom/dashboard/client/main/DashboardContextImpl.java

+38-18
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import stroom.query.api.ParamUtil;
1515
import stroom.query.api.TimeRange;
1616
import stroom.query.client.presenter.QueryToolbarPresenter;
17-
import stroom.query.client.view.ParamResolver;
1817
import stroom.util.shared.NullSafe;
1918
import stroom.widget.util.client.HtmlBuilder;
2019
import stroom.widget.util.client.HtmlBuilder.Attribute;
@@ -38,7 +37,7 @@
3837
import java.util.Optional;
3938
import java.util.stream.Collectors;
4039

41-
public class DashboardContextImpl implements HasHandlers, DashboardContext, ParamResolver {
40+
public class DashboardContextImpl implements HasHandlers, DashboardContext {
4241

4342
private final EventBus eventBus;
4443
private final Components components;
@@ -76,7 +75,9 @@ public TimeRange getRawTimeRange() {
7675
@Override
7776
public TimeRange getResolvedTimeRange() {
7877
final TimeRange rawTimeRange = getRawTimeRange();
79-
return new TimeRange(rawTimeRange.getName(), resolve(rawTimeRange.getFrom()), resolve(rawTimeRange.getTo()));
78+
return new TimeRange(rawTimeRange.getName(),
79+
ParamUtil.replaceParameters(rawTimeRange.getFrom(), this),
80+
ParamUtil.replaceParameters(rawTimeRange.getTo(), this));
8081
}
8182

8283
@Override
@@ -96,6 +97,7 @@ public void setDashboardDocRef(final DocRef dashboardDocRef) {
9697
/**
9798
* These params are a subset that are supplied when querying. It would be better if we resolved all params client
9899
* side.
100+
*
99101
* @return
100102
*/
101103
@Override
@@ -239,6 +241,14 @@ private Map<String, String> createParamMap(final String prefix,
239241
}
240242
}
241243
}
244+
245+
// Add grandparents if there are any.
246+
if (dashboardContext instanceof final DashboardContextImpl impl) {
247+
final Map<String, String> parentParentParams = impl.parentParams;
248+
if (NullSafe.hasEntries(parentParentParams)) {
249+
parentParentParams.forEach((key, value) -> paramMap.put("parent." + key, value));
250+
}
251+
}
242252
}
243253
return paramMap;
244254
}
@@ -345,11 +355,6 @@ private Optional<ExpressionOperator> replaceComponentSelection(final String comp
345355
.build());
346356
}
347357

348-
@Override
349-
public String resolve(final String value) {
350-
return resolve(value, null, null);
351-
}
352-
353358
private String resolve(final String value,
354359
final String componentId,
355360
final ComponentSelection componentSelection) {
@@ -367,6 +372,11 @@ private String resolve(final String value,
367372
return result;
368373
}
369374

375+
@Override
376+
public String get(final String key) {
377+
return getReplacement(key, null, null, this);
378+
}
379+
370380
private Map<String, String> getReplacements(final List<String> keys,
371381
final String componentId,
372382
final ComponentSelection componentSelection) {
@@ -384,16 +394,11 @@ private String getReplacement(final String key,
384394
final DashboardContext dashboardContext) {
385395
String v = null;
386396
if (dashboardContext != null) {
387-
String k = key;
388-
final int index = key.lastIndexOf(".");
389-
if (index != -1) {
390-
k = key.substring(index + 1);
391-
}
392397
if (componentId != null &&
393398
(key.startsWith("component." + componentId + ".selection.") ||
394399
key.startsWith("component.?.selection."))) {
395400
if (componentSelection != null) {
396-
v = componentSelection.get(k);
401+
v = componentSelection.get(getFinalKeyPart(key));
397402
}
398403
} else if (key.startsWith("component.") && key.contains(".param.")) {
399404
final int componentIdIndex = "component.".length();
@@ -402,8 +407,10 @@ private String getReplacement(final String key,
402407
final Component component = dashboardContext.getComponents().get(id);
403408
if (component instanceof final HasParams hasParams) {
404409
final List<Param> params = hasParams.getParams();
405-
final Map<String, String> map = ParamUtil.createParamMap(params);
406-
v = map.get(k);
410+
if (NullSafe.hasItems(params)) {
411+
final Map<String, String> map = ParamUtil.createParamMap(params);
412+
v = map.get(getFinalKeyPart(key));
413+
}
407414
}
408415
} else if (key.equals("timeRange.from")) {
409416
final TimeRange timeRange = dashboardContext.getRawTimeRange();
@@ -413,18 +420,31 @@ private String getReplacement(final String key,
413420
v = timeRange.getTo();
414421
} else if (key.startsWith("link.param.")) {
415422
final Map<String, String> map = ParamUtil.createParamMap(linkParams);
416-
v = map.get(k);
423+
if (NullSafe.hasEntries(map)) {
424+
v = map.get(getFinalKeyPart(key));
425+
}
417426
} else if (key.startsWith("parent.")) {
418427
final Map<String, String> map = parentParams;
419428
v = map.get(key);
420429
} else if (key.startsWith("param.")) {
421430
final Map<String, String> map = ParamUtil.createParamMap(dashboardContext.getParams());
422-
v = map.get(k);
431+
if (NullSafe.hasEntries(map)) {
432+
v = map.get(getFinalKeyPart(key));
433+
}
423434
}
424435
}
425436
return v;
426437
}
427438

439+
private String getFinalKeyPart(final String key) {
440+
String k = key;
441+
final int index = key.lastIndexOf(".");
442+
if (index != -1) {
443+
k = key.substring(index + 1);
444+
}
445+
return k;
446+
}
447+
428448
@Override
429449
public void fireEvent(final GwtEvent<?> event) {
430450
eventBus.fireEventFromSource(event, this);

stroom-core-client/src/main/java/stroom/dashboard/client/main/DashboardPresenter.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ public DashboardPresenter(final EventBus eventBus,
150150
this.queryInfo = queryInfo;
151151
this.layoutConstraintPresenterProvider = layoutConstraintPresenterProvider;
152152
dashboardContext = new DashboardContextImpl(eventBus, components, queryToolbarPresenter);
153-
queryToolbarPresenter.setParamResolver(dashboardContext);
153+
queryToolbarPresenter.setParamValues(dashboardContext);
154154

155155
final TabManager tabManager = new TabManager(components, renameTabPresenterProvider, this);
156156
flexLayout.setTabManager(tabManager);

stroom-core-client/src/main/java/stroom/dashboard/client/main/SearchModel.java

-1
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,6 @@ public void startNewSearch(final ExpressionOperator expression,
165165
if (dataSourceRef != null && expression != null) {
166166
// Copy the expression.
167167
ExpressionOperator currentExpression = ExpressionUtil.copyOperator(expression);
168-
169168
currentSearch = Search
170169
.builder()
171170
.dataSourceRef(dataSourceRef)

stroom-core-client/src/main/java/stroom/dashboard/client/query/QueryPresenter.java

+8-4
Original file line numberDiff line numberDiff line change
@@ -595,10 +595,13 @@ private void run(final boolean incremental,
595595

596596
// Write expression.
597597
final ExpressionOperator root = expressionPresenter.write();
598-
final ExpressionOperator decorated = ExpressionUtil.combine(root, expressionDecorator);
598+
ExpressionOperator decorated = ExpressionUtil.combine(root, expressionDecorator);
599599

600-
// Start search.
601600
final DashboardContext dashboardContext = getDashboardContext();
601+
decorated = ExpressionUtil
602+
.replaceExpressionParameters(decorated, dashboardContext, true);
603+
604+
// Start search.
602605
searchModel.startNewSearch(
603606
decorated,
604607
dashboardContext.getParams(),
@@ -624,10 +627,11 @@ private void resume(final String node,
624627
setWarningsVisible(false);
625628

626629
// Write expression.
627-
final ExpressionOperator root = expressionPresenter.write();
630+
ExpressionOperator root = expressionPresenter.write();
631+
final DashboardContext dashboardContext = getDashboardContext();
632+
root = ExpressionUtil.replaceExpressionParameters(root, dashboardContext, true);
628633

629634
// Start search.
630-
final DashboardContext dashboardContext = getDashboardContext();
631635
searchModel.startNewSearch(
632636
root,
633637
dashboardContext.getParams(),

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,7 @@ private void filterColumn(final Column column) {
299299

300300
if (newField.getColumnFilter() != null &&
301301
NullSafe.isNonBlankString(newField.getColumnFilter().getFilter())) {
302-
if (!tablePresenter.getTableSettings().applyValueFilters()) {
302+
if (!tablePresenter.getTableComponentSettings().applyValueFilters()) {
303303
tablePresenter.toggleApplyValueFilters();
304304
}
305305
}

0 commit comments

Comments
 (0)