You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by jb...@apache.org on 2007/05/06 19:33:34 UTC

svn commit: r535637 - in /incubator/wicket/trunk/jdk-1.4/wicket/src: main/java/org/apache/wicket/request/target/coding/ test/java/ test/java/org/apache/wicket/request/target/coding/

Author: jbq
Date: Sun May  6 10:33:33 2007
New Revision: 535637

URL: http://svn.apache.org/viewvc?view=rev&rev=535637
Log:
WICKET-539 QueryStringUrlCodingStrategy does not handle multi-valued parameters

Also related to WICKET-65 Handle String array in PageParameters

Added:
    incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/WebRequestEncoder.java   (with props)
    incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/request/target/coding/QueryStringUrlCodingStrategyTest.java   (with props)
Modified:
    incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/QueryStringUrlCodingStrategy.java
    incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/log4j.properties
    incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/request/target/coding/UrlMountingTest.java

Modified: incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/QueryStringUrlCodingStrategy.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/QueryStringUrlCodingStrategy.java?view=diff&rev=535637&r1=535636&r2=535637
==============================================================================
--- incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/QueryStringUrlCodingStrategy.java (original)
+++ incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/QueryStringUrlCodingStrategy.java Sun May  6 10:33:33 2007
@@ -134,37 +134,14 @@
 			{
 				entries = parameters.entrySet().iterator();				
 			}
-
+			WebRequestEncoder encoder = new WebRequestEncoder(url);
 			while (entries.hasNext())
 			{
 				Map.Entry entry = (Entry)entries.next();
 
 				if (entry.getValue() != null)
 				{
-
-					String escapedValue = urlEncode(entry.getValue().toString());
-
-					if (!Strings.isEmpty(escapedValue))
-					{
-						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());
 				}
 			}
 		}

Added: incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/WebRequestEncoder.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/WebRequestEncoder.java?view=auto&rev=535637
==============================================================================
--- incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/WebRequestEncoder.java (added)
+++ incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/WebRequestEncoder.java Sun May  6 10:33:33 2007
@@ -0,0 +1,102 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.request.target.coding;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+
+import org.apache.wicket.Application;
+import org.apache.wicket.util.string.AppendingStringBuffer;
+
+/**
+ * {@link AppendingStringBuffer}-based query string encoder, handles String[] and String properly, and properly URL-encodes the values
+ * 
+ * @author <a href="mailto:jbq@apache.org">Jean-Baptiste Quenot</a>
+ */
+public class WebRequestEncoder
+{
+	boolean firstParameter = true;
+	AppendingStringBuffer url;
+	Application application;
+
+	/**
+	 * Construct.
+	 * @param url the {@link AppendingStringBuffer} where to append query string
+	 */
+	public WebRequestEncoder(AppendingStringBuffer url)
+	{
+		this.url = url;
+		this.application = Application.get();
+	}
+
+	/**
+	 * Add an {@link Object}
+	 * @param key
+	 * @param value
+	 */
+	public void addValue(String key, Object value)
+	{
+		if (value instanceof String[])
+		{
+			String[] values = (String[])value;
+			for (int i = 0; i < values.length; i++)
+			{
+				addValue(key, values[i]);
+			}
+		}
+		else if (value instanceof String)
+		{
+			addValue(key, (String)value);
+		}
+		else
+		{
+			throw new IllegalArgumentException("PageParameters can only contain String or String[]");
+		}
+	}
+
+	/**
+	 * Add a {@link String}
+	 * @param key
+	 * @param value
+	 */
+	public void addValue(String key, String value)
+	{
+		String escapedValue = value;
+		try
+		{
+			escapedValue = URLEncoder.encode(escapedValue, application.getRequestCycleSettings()
+					.getResponseRequestEncoding());
+		}
+		catch (UnsupportedEncodingException ex)
+		{
+			// ignore
+		}
+		if (!firstParameter)
+		{
+			url.append('&');
+		}
+		else
+		{
+			firstParameter = false;
+			url.append('?');
+		}
+		url.append(key);
+		url.append('=');
+		url.append(escapedValue);
+	}
+
+}

Propchange: incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/WebRequestEncoder.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/WebRequestEncoder.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/log4j.properties
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/log4j.properties?view=diff&rev=535637&r1=535636&r2=535637
==============================================================================
--- incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/log4j.properties (original)
+++ incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/log4j.properties Sun May  6 10:33:33 2007
@@ -9,7 +9,7 @@
 # please keep this setting FATAL to avoid questions from users
 # why there are stacktraces in the test output. You can turn it
 # down if you need to when testing, but don't check it in. (eelco)
-log4j.logger.wicket=FATAL
+log4j.logger.org.apache.wicket=FATAL
 #log4j.logger.org.apache.wicket.resource=FATAL
 #log4j.logger.org.apache.wicket.Localizer=FATAL
 

Added: incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/request/target/coding/QueryStringUrlCodingStrategyTest.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/request/target/coding/QueryStringUrlCodingStrategyTest.java?view=auto&rev=535637
==============================================================================
--- incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/request/target/coding/QueryStringUrlCodingStrategyTest.java (added)
+++ incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/request/target/coding/QueryStringUrlCodingStrategyTest.java Sun May  6 10:33:33 2007
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.request.target.coding;
+
+import org.apache.wicket.IRequestTarget;
+import org.apache.wicket.PageParameters;
+import org.apache.wicket.WicketTestCase;
+import org.apache.wicket.request.target.component.BookmarkablePageRequestTarget;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Tests for {@link QueryStringUrlCodingStrategy}
+ * 
+ * @author <a href="mailto:jbq@apache.org">Jean-Baptiste Quenot</a>
+ */
+public class QueryStringUrlCodingStrategyTest extends WicketTestCase
+{
+	private static final Logger log = LoggerFactory.getLogger(QueryStringUrlCodingStrategyTest.class);
+
+	/**
+	 * Tests mounting.
+	 */
+	public void testQS()
+	{
+		IRequestTargetUrlCodingStrategy ucs = new QueryStringUrlCodingStrategy("/mount/point", TestPage.class);
+		PageParameters params = new PageParameters();
+		params.add("a", "1");
+		params.add("a", "2");
+		params.add("b", "1");
+		IRequestTarget rt = new BookmarkablePageRequestTarget(TestPage.class, params);
+		String path = ucs.encode(rt).toString();
+		log.debug(path);
+		assertEquals("mount/point?a=1&a=2&b=1", path);
+	}
+}

Propchange: incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/request/target/coding/QueryStringUrlCodingStrategyTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/request/target/coding/QueryStringUrlCodingStrategyTest.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/request/target/coding/UrlMountingTest.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/request/target/coding/UrlMountingTest.java?view=diff&rev=535637&r1=535636&r2=535637
==============================================================================
--- incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/request/target/coding/UrlMountingTest.java (original)
+++ incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/request/target/coding/UrlMountingTest.java Sun May  6 10:33:33 2007
@@ -29,6 +29,8 @@
 
 /**
  * Tests package resources.
+ * 
+ * @author <a href="mailto:jbq@apache.org">Jean-Baptiste Quenot</a>
  */
 public class UrlMountingTest extends TestCase
 {