diff --git a/hypertrace-graphql-explorer-schema/src/main/java/org/hypertrace/graphql/explorer/request/DefaultExploreRequestBuilder.java b/hypertrace-graphql-explorer-schema/src/main/java/org/hypertrace/graphql/explorer/request/DefaultExploreRequestBuilder.java index 213abc5a..2e870635 100644 --- a/hypertrace-graphql-explorer-schema/src/main/java/org/hypertrace/graphql/explorer/request/DefaultExploreRequestBuilder.java +++ b/hypertrace-graphql-explorer-schema/src/main/java/org/hypertrace/graphql/explorer/request/DefaultExploreRequestBuilder.java @@ -6,6 +6,7 @@ import graphql.schema.DataFetchingFieldSelectionSet; import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.Single; +import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; @@ -190,6 +191,46 @@ public Single build( groupBy.map(GroupByArgument::groupLimit))); } + @Override + public Single rebuildWithAdditionalFilters( + ExploreRequest originalRequest, List additionalFilterArguments) { + return this.mergeFilterLists( + originalRequest.context(), + originalRequest.scope(), + originalRequest.filterArguments(), + additionalFilterArguments) + .map( + newFilterArguments -> + new DefaultExploreRequest( + originalRequest.context(), + originalRequest.scope(), + originalRequest.timeRange(), + originalRequest.limit(), + originalRequest.offset(), + originalRequest.attributeRequests(), + originalRequest.aggregationRequests(), + originalRequest.orderArguments(), + newFilterArguments, + originalRequest.groupByAttributeRequests(), + originalRequest.timeInterval(), + originalRequest.entityContextOptions(), + originalRequest.includeRest(), + originalRequest.spaceId(), + originalRequest.groupLimit())); + } + + private Single>> mergeFilterLists( + GraphQlRequestContext requestContext, + String scope, + Collection> original, + Collection additional) { + return this.filterRequestBuilder + .build(requestContext, scope, additional) + .flattenAsObservable(list -> list) + .concatWith(Observable.fromIterable(original)) + .toList(); + } + private Single> buildGroupByAttributes( GraphQlRequestContext context, String explorerScope, diff --git a/hypertrace-graphql-explorer-schema/src/main/java/org/hypertrace/graphql/explorer/request/ExploreRequestBuilder.java b/hypertrace-graphql-explorer-schema/src/main/java/org/hypertrace/graphql/explorer/request/ExploreRequestBuilder.java index 95bee6b4..46b5ddb9 100644 --- a/hypertrace-graphql-explorer-schema/src/main/java/org/hypertrace/graphql/explorer/request/ExploreRequestBuilder.java +++ b/hypertrace-graphql-explorer-schema/src/main/java/org/hypertrace/graphql/explorer/request/ExploreRequestBuilder.java @@ -36,4 +36,7 @@ Single build( Optional entityContextOptions, Single> attributeSelections, Single> aggregationSelections); + + Single rebuildWithAdditionalFilters( + ExploreRequest originalRequest, List filterArguments); }