From: <fg...@us...> - 2010-05-12 15:01:42
|
Revision: 2413 http://openutils.svn.sourceforge.net/openutils/?rev=2413&view=rev Author: fgiust Date: 2010-05-12 15:01:36 +0000 (Wed, 12 May 2010) Log Message: ----------- MGNLUTILS-20 New EL functions for building a query string including/excluding a set of parameters Modified Paths: -------------- trunk/openutils-mgnlutils/src/main/java/it/openutils/mgnlutils/el/MgnlUtilsElFunctions.java trunk/openutils-mgnlutils/src/main/resources/META-INF/tld/mgnlutils.tld Modified: trunk/openutils-mgnlutils/src/main/java/it/openutils/mgnlutils/el/MgnlUtilsElFunctions.java =================================================================== --- trunk/openutils-mgnlutils/src/main/java/it/openutils/mgnlutils/el/MgnlUtilsElFunctions.java 2010-05-12 15:01:24 UTC (rev 2412) +++ trunk/openutils-mgnlutils/src/main/java/it/openutils/mgnlutils/el/MgnlUtilsElFunctions.java 2010-05-12 15:01:36 UTC (rev 2413) @@ -30,6 +30,8 @@ import info.magnolia.link.LinkException; import info.magnolia.link.LinkUtil; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; import java.util.ArrayList; import java.util.Collection; import java.util.Enumeration; @@ -41,6 +43,7 @@ import javax.jcr.RepositoryException; import javax.servlet.http.HttpServletRequest; +import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; import org.apache.jackrabbit.util.ISO9075; import org.slf4j.Logger; @@ -657,4 +660,93 @@ { return content.getChildren(contentType); } + + /** + * Builds a query string with the actual request parameters, optionally excluding a list of parameters. + * @param excludedParamsWhitespaceSeparated list of parameters to exclude, in a single whitespace separated string + * @return queryString, without the leading "?" and with parameters already urlencoded (but with ampersands not html + * escaped) + */ + public static String buildQuerystringExcluding(String excludedParamsWhitespaceSeparated) + { + return buildQuerystringInternal(StringUtils.split( + StringUtils.defaultString(excludedParamsWhitespaceSeparated), + ' '), new String[0]); + } + + /** + * Builds a query string with the actual request parameters, optionally excluding a list of parameters + * @param includedParamsWhitespaceSeparated list of parameters to include, in a single whitespace separated string + * @return queryString, without the leading "?" and with parameters already urlencoded (but with ampersands not html + * escaped) + */ + public static String buildQuerystringIncluding(String includedParamsWhitespaceSeparated) + { + return buildQuerystringInternal(new String[0], StringUtils.split(StringUtils + .defaultString(includedParamsWhitespaceSeparated), ' ')); + } + + /** + * @param excluded + * @return + */ + private static String buildQuerystringInternal(String[] excluded, String[] included) + { + Map<String, String> parameters = MgnlContext.getParameters(); + StringBuffer sb = new StringBuffer(); + + boolean first = true; + + for (Map.Entry<String, String> entry : parameters.entrySet()) + { + String key = entry.getKey(); + if (!ArrayUtils.contains(excluded, key) + && (included == null || included.length == 0 || ArrayUtils.contains(included, key))) + { + if (!first) + { + sb.append("&"); + } + + String[] parameterValues = MgnlContext.getParameterValues(key); + + if (parameterValues != null) + { + for (int j = 0; j < parameterValues.length; j++) + { + String value = parameterValues[j]; + sb.append(urlencode(key)); + sb.append("="); + sb.append(urlencode(value)); + if (j + 1 < parameterValues.length) + { + sb.append("&"); + } + } + } + + first = false; + } + } + + return sb.toString(); + } + + /** + * Encodes a url in UTF-8 format + * @param string url to be encoded + * @return a url UTF-8 encoded + */ + private static String urlencode(String string) + { + try + { + return URLEncoder.encode(string, "UTF-8"); + } + catch (UnsupportedEncodingException e) + { + // should never happen + return string; + } + } } Modified: trunk/openutils-mgnlutils/src/main/resources/META-INF/tld/mgnlutils.tld =================================================================== --- trunk/openutils-mgnlutils/src/main/resources/META-INF/tld/mgnlutils.tld 2010-05-12 15:01:24 UTC (rev 2412) +++ trunk/openutils-mgnlutils/src/main/resources/META-INF/tld/mgnlutils.tld 2010-05-12 15:01:36 UTC (rev 2413) @@ -273,4 +273,18 @@ </ul> ]]></example> </function> + <function> + <name>buildQuerystringExcluding</name> + <description>Builds a query string with the actual request parameters, optionally excluding a list of parameters. The list list of parameters to exclude in given as a single whitespace separated string. + The returned querystring doesn't contain the leading "?" and has all the parameters already urlencoded (but with ampersands not html escaped)</description> + <function-class>it.openutils.mgnlutils.el.MgnlUtilsElFunctions</function-class> + <function-signature>java.util.String buildQuerystringExcluding(java.lang.String)</function-signature> + </function> + <function> + <name>buildQuerystringIncluding</name> + <description>Builds a query string with the actual request parameters, only including the given list of parameters. The list list of parameters to include in given as a single whitespace separated string. + The returned querystring doesn't contain the leading "?" and has all the parameters already urlencoded (but with ampersands not html escaped)</description> + <function-class>it.openutils.mgnlutils.el.MgnlUtilsElFunctions</function-class> + <function-signature>java.util.String buildQuerystringIncluding(java.lang.String)</function-signature> + </function> </taglib> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |