14
14
import stroom .query .api .ParamUtil ;
15
15
import stroom .query .api .TimeRange ;
16
16
import stroom .query .client .presenter .QueryToolbarPresenter ;
17
- import stroom .query .client .view .ParamResolver ;
18
17
import stroom .util .shared .NullSafe ;
19
18
import stroom .widget .util .client .HtmlBuilder ;
20
19
import stroom .widget .util .client .HtmlBuilder .Attribute ;
38
37
import java .util .Optional ;
39
38
import java .util .stream .Collectors ;
40
39
41
- public class DashboardContextImpl implements HasHandlers , DashboardContext , ParamResolver {
40
+ public class DashboardContextImpl implements HasHandlers , DashboardContext {
42
41
43
42
private final EventBus eventBus ;
44
43
private final Components components ;
@@ -76,7 +75,9 @@ public TimeRange getRawTimeRange() {
76
75
@ Override
77
76
public TimeRange getResolvedTimeRange () {
78
77
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 ));
80
81
}
81
82
82
83
@ Override
@@ -96,6 +97,7 @@ public void setDashboardDocRef(final DocRef dashboardDocRef) {
96
97
/**
97
98
* These params are a subset that are supplied when querying. It would be better if we resolved all params client
98
99
* side.
100
+ *
99
101
* @return
100
102
*/
101
103
@ Override
@@ -239,6 +241,14 @@ private Map<String, String> createParamMap(final String prefix,
239
241
}
240
242
}
241
243
}
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
+ }
242
252
}
243
253
return paramMap ;
244
254
}
@@ -345,11 +355,6 @@ private Optional<ExpressionOperator> replaceComponentSelection(final String comp
345
355
.build ());
346
356
}
347
357
348
- @ Override
349
- public String resolve (final String value ) {
350
- return resolve (value , null , null );
351
- }
352
-
353
358
private String resolve (final String value ,
354
359
final String componentId ,
355
360
final ComponentSelection componentSelection ) {
@@ -367,6 +372,11 @@ private String resolve(final String value,
367
372
return result ;
368
373
}
369
374
375
+ @ Override
376
+ public String get (final String key ) {
377
+ return getReplacement (key , null , null , this );
378
+ }
379
+
370
380
private Map <String , String > getReplacements (final List <String > keys ,
371
381
final String componentId ,
372
382
final ComponentSelection componentSelection ) {
@@ -384,16 +394,11 @@ private String getReplacement(final String key,
384
394
final DashboardContext dashboardContext ) {
385
395
String v = null ;
386
396
if (dashboardContext != null ) {
387
- String k = key ;
388
- final int index = key .lastIndexOf ("." );
389
- if (index != -1 ) {
390
- k = key .substring (index + 1 );
391
- }
392
397
if (componentId != null &&
393
398
(key .startsWith ("component." + componentId + ".selection." ) ||
394
399
key .startsWith ("component.?.selection." ))) {
395
400
if (componentSelection != null ) {
396
- v = componentSelection .get (k );
401
+ v = componentSelection .get (getFinalKeyPart ( key ) );
397
402
}
398
403
} else if (key .startsWith ("component." ) && key .contains (".param." )) {
399
404
final int componentIdIndex = "component." .length ();
@@ -402,8 +407,10 @@ private String getReplacement(final String key,
402
407
final Component component = dashboardContext .getComponents ().get (id );
403
408
if (component instanceof final HasParams hasParams ) {
404
409
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
+ }
407
414
}
408
415
} else if (key .equals ("timeRange.from" )) {
409
416
final TimeRange timeRange = dashboardContext .getRawTimeRange ();
@@ -413,18 +420,31 @@ private String getReplacement(final String key,
413
420
v = timeRange .getTo ();
414
421
} else if (key .startsWith ("link.param." )) {
415
422
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
+ }
417
426
} else if (key .startsWith ("parent." )) {
418
427
final Map <String , String > map = parentParams ;
419
428
v = map .get (key );
420
429
} else if (key .startsWith ("param." )) {
421
430
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
+ }
423
434
}
424
435
}
425
436
return v ;
426
437
}
427
438
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
+
428
448
@ Override
429
449
public void fireEvent (final GwtEvent <?> event ) {
430
450
eventBus .fireEventFromSource (event , this );
0 commit comments