Author: jbq Date: Sun Jun 10 06:48:33 2007 New Revision: 545874 URL: http://svn.apache.org/viewvc?view=rev&rev=545874 Log: * Copy BookmarkablePageRequestTargetUrlCodingStrategy#encode(IRequestTarget) * Rework appendParameters(): the "uri" parameter is appended first with a slash, then the remaining parameters are handled like in QueryStringUrlCodingStrategy#appendParameters()
Modified: incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/basic/URIRequestTargetUrlCodingStrategy.java Modified: incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/basic/URIRequestTargetUrlCodingStrategy.java URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/basic/URIRequestTargetUrlCodingStrategy.java?view=diff&rev=545874&r1=545873&r2=545874 ============================================================================== --- incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/basic/URIRequestTargetUrlCodingStrategy.java (original) +++ incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/basic/URIRequestTargetUrlCodingStrategy.java Sun Jun 10 06:48:33 2007 @@ -18,12 +18,20 @@ import java.util.Iterator; import java.util.Map; +import java.util.TreeMap; import java.util.Map.Entry; import org.apache.wicket.IRequestTarget; import org.apache.wicket.PageParameters; +import org.apache.wicket.protocol.http.UnitTestSettings; +import org.apache.wicket.protocol.http.request.WebRequestCodingStrategy; import org.apache.wicket.request.RequestParameters; import org.apache.wicket.request.target.coding.AbstractRequestTargetUrlCodingStrategy; +import org.apache.wicket.request.target.coding.BookmarkablePageRequestTargetUrlCodingStrategy; +import org.apache.wicket.request.target.coding.QueryStringUrlCodingStrategy; +import org.apache.wicket.request.target.coding.WebRequestEncoder; +import org.apache.wicket.request.target.component.IBookmarkablePageRequestTarget; +import org.apache.wicket.request.target.component.IPageRequestTarget; import org.apache.wicket.util.string.AppendingStringBuffer; import org.apache.wicket.util.string.Strings; import org.apache.wicket.util.value.ValueMap; @@ -76,17 +84,39 @@ } /** - * Does nothing + * Copied from + * [EMAIL PROTECTED] BookmarkablePageRequestTargetUrlCodingStrategy#encode(IRequestTarget)} + * without pageMapName field * * @see wicket.request.target.coding.IRequestTargetUrlCodingStrategy#encode(wicket.IRequestTarget) */ public CharSequence encode(IRequestTarget requestTarget) { - return null; + if (!(requestTarget instanceof IBookmarkablePageRequestTarget)) + { + throw new IllegalArgumentException("This encoder can only be used with " + + "instances of " + IBookmarkablePageRequestTarget.class.getName()); + } + final AppendingStringBuffer url = new AppendingStringBuffer(40); + url.append(getMountPath()); + final IBookmarkablePageRequestTarget target = (IBookmarkablePageRequestTarget)requestTarget; + + PageParameters pageParameters = target.getPageParameters(); + String pagemap = target.getPageMapName(); + if (pagemap != null) + { + if (pageParameters == null) + { + pageParameters = new PageParameters(); + } + pageParameters.put(WebRequestCodingStrategy.PAGEMAP, pagemap); + } + appendParameters(url, pageParameters); + return url; } /** - * Does nothing + * Always returns false * * @see wicket.request.target.coding.IRequestTargetUrlCodingStrategy#matches(wicket.IRequestTarget) */ @@ -96,10 +126,9 @@ } /** - * Gets the encoded URL for the request target. Typically, the result will - * be prepended with a protocol specific prefix. In a servlet environment, - * the prefix concatenates the context path and the servlet path, for - * example "mywebapp/myservlet". + * Gets the encoded URL for the request target. The "uri" parameter is + * appended first with a slash, then the remaining parameters are handled + * like in [EMAIL PROTECTED] QueryStringUrlCodingStrategy#appendParameters()} * * @param url * the relative reference URL @@ -109,47 +138,36 @@ protected void appendParameters(AppendingStringBuffer url, Map parameters) { - if (parameters != null && parameters.size() > 0) + if (parameters.get(URI) != null) { - boolean firstParam = true; - Iterator entries = parameters.entrySet().iterator(); + url.append("/").append(parameters.get(URI)); + } + // Copied from QueryStringUrlCodingStrategy + if (parameters != null && parameters.size() > 0) + { + final Iterator entries; + if (UnitTestSettings.getSortUrlParameters()) + { + entries = new TreeMap(parameters).entrySet().iterator(); + } + else + { + entries = parameters.entrySet().iterator(); + } + WebRequestEncoder encoder = new WebRequestEncoder(url); while (entries.hasNext()) { Map.Entry entry = (Entry)entries.next(); + if (entry.getKey().equals(URI)) + { + // Ignore "uri" parameter already handled + continue; + } if (entry.getValue() != null) { - String escapedValue = urlEncode(entry.getValue().toString()); - - if (!Strings.isEmpty(escapedValue)) - { - if (entry.getKey().equals(URI)) - { - url.append("/").append(escapedValue); - } - else - { - if (firstParam) - { - url.append("?"); /* Begin query string. */ - firstParam = false; - } - else - { - /* - * Separate new key=value(s) pair from previous - * pair with an ampersand. - */ - url.append("&"); - } - - /* Append key=value(s) pair. */ - url.append(entry.getKey()); - url.append("="); - url.append(escapedValue); - } - } + encoder.addValue(entry.getKey().toString(), entry.getValue()); } } } @@ -188,8 +206,9 @@ return parameters; } - - protected String getURI(RequestParameters requestParameters) { + + protected String getURI(RequestParameters requestParameters) + { return decodeParameters(requestParameters).getString(URI); } }