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
{