private String getEscapedQuery()

in src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/URIManipulationFilterExtension.java [235:291]


    private String getEscapedQuery(
            RuntimeObjectModel runtimeObjectModel, String originalQuery, Map<String, Object> options) {
        // parse parameters
        Map<String, Collection<String>> parameters = new LinkedHashMap<>();
        if (StringUtils.isNotEmpty(originalQuery)) {
            String[] keyValuePairs = originalQuery.split("&");
            for (String keyValuePair : keyValuePairs) {
                String[] pair = keyValuePair.split("=");
                if (pair.length == 2) {
                    String param;
                    try {
                        param = URLDecoder.decode(pair[0], StandardCharsets.UTF_8.name());
                    } catch (UnsupportedEncodingException e) {
                        LOG.warn("Could not decode parameter key '{}'", pair[0], e);
                        continue;
                    }
                    String value;
                    try {
                        value = URLDecoder.decode(pair[1], StandardCharsets.UTF_8.name());
                    } catch (UnsupportedEncodingException e) {
                        LOG.warn("Could not decode parameter value of parameter '{}': '{}'", param, pair[1], e);
                        continue;
                    }
                    Collection<String> values = parameters.get(param);
                    if (values == null) {
                        values = new ArrayList<>();
                        parameters.put(param, values);
                    }
                    values.add(value);
                }
            }
        }

        if (handleParameters(runtimeObjectModel, parameters, options)) {
            if (!parameters.isEmpty()) {
                try {
                    StringBuilder sb = new StringBuilder();
                    for (Map.Entry<String, Collection<String>> entry : parameters.entrySet()) {
                        for (String value : entry.getValue()) {
                            sb.append(URLEncoder.encode(entry.getKey(), StandardCharsets.UTF_8.name()))
                                    .append("=")
                                    .append(URLEncoder.encode(value, StandardCharsets.UTF_8.name()))
                                    .append("&");
                        }
                    }
                    // delete the last &
                    sb.deleteCharAt(sb.length() - 1);
                    return sb.toString();
                } catch (UnsupportedEncodingException e) {
                    throw new SightlyException("Could not encode the parameter values/keys", e);
                }
            } else {
                return null;
            }
        }
        return originalQuery;
    }