String queryParametersToString(final boolean urlEncoded) {
final UrlQueryBuilder builder = UrlQueryBuilder.of();
Optional.ofNullable(text()).ifPresent(t -> builder.add(TEXT + "." + t.getLocale().toLanguageTag(), t.getValue(), urlEncoded));
facets().forEach(f -> builder.add(FACET, f.expression(), urlEncoded));
Optional.ofNullable(isFuzzy()).ifPresent(b -> builder.add(FUZZY, b.toString(), urlEncoded));
Optional.ofNullable(fuzzyLevel()).ifPresent(b -> builder.add(FUZZY_LEVEL, b.toString(), urlEncoded));
resultFilters().forEach(f -> builder.add(FILTER_RESULTS, f.expression(), urlEncoded));
queryFilters().forEach(f -> builder.add(FILTER_QUERY, f.expression(), urlEncoded));
facetFilters().forEach(f -> builder.add(FILTER_FACETS, f.expression(), urlEncoded));
facetedSearch().forEach(f -> {
builder.add(FACET, f.facetExpression().expression(), urlEncoded);
f.filterExpressions().forEach(filter -> {
builder.add(FILTER_RESULTS, filter.expression(), urlEncoded);
builder.add(FILTER_FACETS, filter.expression(), urlEncoded);
});
});
sort().forEach(s -> builder.add(SORT, s.expression(), urlEncoded));
if (!facets().isEmpty() || !facetedSearch().isEmpty()) {
builder.add("formatBooleanFacet", Boolean.TRUE.toString(), urlEncoded);
}
Optional.ofNullable(limit()).ifPresent(l -> builder.add(LIMIT, l.toString(), urlEncoded));
Optional.ofNullable(offset()).ifPresent(o -> builder.add(OFFSET, o.toString(), urlEncoded));
expansionPaths().forEach(path -> builder.add(EXPAND, path.toSphereExpand(), urlEncoded));
additionalQueryParameters().forEach(p -> builder.add(p.getName(), p.getValue(), urlEncoded));
return builder.build();
}