package org.jtwig.functions.impl.mixed; import org.apache.commons.lang3.StringUtils; import org.jtwig.functions.FunctionRequest; import org.jtwig.functions.SimpleJtwigFunction; import org.jtwig.util.UrlEncodingUtils; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; import java.util.Map; public class UrlEncodeFunction extends SimpleJtwigFunction { @Override public String name() { return "url_encode"; } @Override public Object execute(FunctionRequest request) { request.minimumNumberOfArguments(1).maximumNumberOfArguments(1); Object input = request.get(0); if (input instanceof Map) { Map map = (Map) input; List<String> pieces = new ArrayList<>(); for (Object key : map.keySet()) { pieces.add(encodeString(request, key.toString()) + "=" + encodeString(request, map.get(key).toString())); } return StringUtils.join(pieces, "&"); } return encodeString(request, getString(request, 0)); } private String getString(FunctionRequest request, int index) { return request.getEnvironment().getValueEnvironment().getStringConverter().convert(request.get(index)); } private String encodeString (FunctionRequest request, String input) { return UrlEncodingUtils.encode(input, Charset.defaultCharset().displayName(), request.getPosition()); } }