public static ExpressionOperator replaceExpressionParameters(final ExpressionOperator operator,
                                                                 final ParamValues paramValues,
                                                                 final boolean keepUnmatched) {
        final ExpressionOperator.Builder builder = ExpressionOperator
                .builder()
                .enabled(operator.getEnabled())
                .op(operator.getOp());
        if (operator.getChildren() != null) {
            for (ExpressionItem child : operator.getChildren()) {
                if (child instanceof ExpressionOperator) {
                    final ExpressionOperator childOperator = (ExpressionOperator) child;
                    builder.addOperator(replaceExpressionParameters(childOperator, paramValues, keepUnmatched));

                } else if (child instanceof ExpressionTerm) {
                    final ExpressionTerm term = (ExpressionTerm) child;
                    final String value = term.getValue();
                    final String replaced = ParamUtil.replaceParameters(value, paramValues, keepUnmatched);
                    builder.addTerm(ExpressionTerm.builder()
                            .enabled(term.enabled())
                            .field(term.getField())
                            .condition(term.getCondition())
                            .value(replaced)
                            .docRef(term.getDocRef())
                            .build());
                }
            }
        }
        return builder.build();
    }
@return True if there are at least one enabled term under the expressionOperator
stroom-query/stroom-query-api/src/main/java/stroom/query/api/ExpressionUtil.java