You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2012/01/17 11:12:41 UTC

git commit: WICKET-4338 POST params ignored by IPageParametersEncoder#decodePageParameters()

Updated Branches:
  refs/heads/wicket-1.5.x 87245722e -> 426d0f708


WICKET-4338
POST params ignored by IPageParametersEncoder#decodePageParameters()


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/426d0f70
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/426d0f70
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/426d0f70

Branch: refs/heads/wicket-1.5.x
Commit: 426d0f708f0a8b9fcf8701bda26a6609631b230b
Parents: 8724572
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Tue Jan 17 11:12:35 2012 +0100
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Tue Jan 17 11:12:35 2012 +0100

----------------------------------------------------------------------
 .../mapper/parameter/PageParametersEncoder.java    |   15 ++-
 .../parameter/UrlPathPageParametersEncoder.java    |    3 +
 .../CombinedRequestParametersAdapter.java          |   10 +-
 .../parameter/UrlRequestParametersAdapter.java     |    4 +-
 .../parameter/PageParametersEncoderTest.java       |  126 +++++++++++++++
 5 files changed, 147 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/426d0f70/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParametersEncoder.java
----------------------------------------------------------------------
diff --git a/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParametersEncoder.java b/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParametersEncoder.java
index 2312995..5687a71 100644
--- a/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParametersEncoder.java
+++ b/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParametersEncoder.java
@@ -16,9 +16,13 @@
  */
 package org.apache.wicket.request.mapper.parameter;
 
+import java.util.List;
+
+import org.apache.wicket.request.IRequestParameters;
 import org.apache.wicket.request.Request;
 import org.apache.wicket.request.Url;
 import org.apache.wicket.request.Url.QueryParameter;
+import org.apache.wicket.util.string.StringValue;
 
 /**
  * Simple encoder with direct indexed/named parameters mapping.
@@ -47,10 +51,15 @@ public class PageParametersEncoder implements IPageParametersEncoder
 			parameters.set(i, s);
 			++i;
 		}
-
-		for (QueryParameter p : request.getUrl().getQueryParameters())
+		
+		IRequestParameters requestParameters = request.getRequestParameters();
+		for (String paramName : requestParameters.getParameterNames())
 		{
-			parameters.add(p.getName(), p.getValue());
+			List<StringValue> parameterValues = requestParameters.getParameterValues(paramName);
+			for (StringValue paramValue : parameterValues)
+			{
+				parameters.add(paramName, paramValue);
+			}
 		}
 
 		return parameters.isEmpty() ? null : parameters;

http://git-wip-us.apache.org/repos/asf/wicket/blob/426d0f70/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/UrlPathPageParametersEncoder.java
----------------------------------------------------------------------
diff --git a/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/UrlPathPageParametersEncoder.java b/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/UrlPathPageParametersEncoder.java
index db3ea51..f31f5c1 100644
--- a/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/UrlPathPageParametersEncoder.java
+++ b/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/UrlPathPageParametersEncoder.java
@@ -25,9 +25,12 @@ import org.apache.wicket.util.string.Strings;
 
 
 /**
+ * <p>
  * Encodes page parameters into Url path fragments instead of the query string like the default
  * {@link PageParametersEncoder}. The parameters are encoded in the following format:
  * {@code /param1Name/param1Value/param2Name/param2Value}.
+ * </p>
+ * <strong>Note</strong>: Because of the nature of the encoder it doesn't support POST request parameters.
  * <p>
  * This used to be the default way of encoding page parameters in 1.4.x applications. Newer 1.5.x+
  * applications use the query string, by default. This class facilitates backwards compatibility and

http://git-wip-us.apache.org/repos/asf/wicket/blob/426d0f70/wicket-request/src/main/java/org/apache/wicket/request/parameter/CombinedRequestParametersAdapter.java
----------------------------------------------------------------------
diff --git a/wicket-request/src/main/java/org/apache/wicket/request/parameter/CombinedRequestParametersAdapter.java b/wicket-request/src/main/java/org/apache/wicket/request/parameter/CombinedRequestParametersAdapter.java
index e895f3b..b5792cc 100755
--- a/wicket-request/src/main/java/org/apache/wicket/request/parameter/CombinedRequestParametersAdapter.java
+++ b/wicket-request/src/main/java/org/apache/wicket/request/parameter/CombinedRequestParametersAdapter.java
@@ -19,10 +19,12 @@ package org.apache.wicket.request.parameter;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
 
 import org.apache.wicket.request.IRequestParameters;
+import org.apache.wicket.util.lang.Args;
 import org.apache.wicket.util.string.StringValue;
 
 /**
@@ -41,11 +43,7 @@ public class CombinedRequestParametersAdapter implements IRequestParameters
 	 */
 	public CombinedRequestParametersAdapter(final IRequestParameters... parameters)
 	{
-		if (parameters == null)
-		{
-			throw new IllegalStateException("Argument 'parameters' may not be null");
-		}
-		this.parameters = parameters;
+		this.parameters = Args.notNull(parameters, "parameters");
 	}
 
 	/**
@@ -53,7 +51,7 @@ public class CombinedRequestParametersAdapter implements IRequestParameters
 	 */
 	public Set<String> getParameterNames()
 	{
-		Set<String> result = new HashSet<String>();
+		Set<String> result = new LinkedHashSet<String>();
 		for (IRequestParameters p : parameters)
 		{
 			result.addAll(p.getParameterNames());

http://git-wip-us.apache.org/repos/asf/wicket/blob/426d0f70/wicket-request/src/main/java/org/apache/wicket/request/parameter/UrlRequestParametersAdapter.java
----------------------------------------------------------------------
diff --git a/wicket-request/src/main/java/org/apache/wicket/request/parameter/UrlRequestParametersAdapter.java b/wicket-request/src/main/java/org/apache/wicket/request/parameter/UrlRequestParametersAdapter.java
index d65d1d6..bbdd1da 100755
--- a/wicket-request/src/main/java/org/apache/wicket/request/parameter/UrlRequestParametersAdapter.java
+++ b/wicket-request/src/main/java/org/apache/wicket/request/parameter/UrlRequestParametersAdapter.java
@@ -18,7 +18,7 @@ package org.apache.wicket.request.parameter;
 
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.HashSet;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
 
@@ -55,7 +55,7 @@ public class UrlRequestParametersAdapter implements IRequestParameters
 	 */
 	public Set<String> getParameterNames()
 	{
-		Set<String> result = new HashSet<String>();
+		Set<String> result = new LinkedHashSet<String>();
 		for (QueryParameter parameter : url.getQueryParameters())
 		{
 			result.add(parameter.getName());

http://git-wip-us.apache.org/repos/asf/wicket/blob/426d0f70/wicket-request/src/test/java/org/apache/wicket/request/mapper/parameter/PageParametersEncoderTest.java
----------------------------------------------------------------------
diff --git a/wicket-request/src/test/java/org/apache/wicket/request/mapper/parameter/PageParametersEncoderTest.java b/wicket-request/src/test/java/org/apache/wicket/request/mapper/parameter/PageParametersEncoderTest.java
new file mode 100644
index 0000000..e07439f
--- /dev/null
+++ b/wicket-request/src/test/java/org/apache/wicket/request/mapper/parameter/PageParametersEncoderTest.java
@@ -0,0 +1,126 @@
+/*
+ * 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.mapper.parameter;
+
+import java.nio.charset.Charset;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.wicket.request.IRequestParameters;
+import org.apache.wicket.request.Request;
+import org.apache.wicket.request.Url;
+import org.apache.wicket.util.string.StringValue;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * Tests for PageParametersEncoder
+ */
+public class PageParametersEncoderTest extends Assert
+{
+	/**
+	 * Tests that PageParametersEncoder decodes both GET and POST parameters
+	 * @throws Exception
+	 */
+	@Test
+	public void decodePostParameters() throws Exception
+	{
+		PageParametersEncoder encoder = new PageParametersEncoder();
+		Request request = new Request()
+		{
+			@Override
+			public Url getUrl()
+			{
+				return Url.parse("idx1/idx2?named1=value1&named2=value2");
+			}
+
+			@Override
+			public Url getClientUrl()
+			{
+				return null;
+			}
+
+			@Override
+			public Locale getLocale()
+			{
+				return null;
+			}
+
+			@Override
+			public Charset getCharset()
+			{
+				return null;
+			}
+
+			@Override
+			public Object getContainerRequest()
+			{
+				return null;
+			}
+
+			@Override
+			public IRequestParameters getPostParameters()
+			{
+				return new PostParameters();
+			}
+		};
+
+		PageParameters pageParameters = encoder.decodePageParameters(request);
+		assertEquals("idx1", pageParameters.get(0).toOptionalString());
+		assertEquals("idx2", pageParameters.get(1).toOptionalString());
+		assertEquals("value1", pageParameters.get("named1").toOptionalString());
+		assertEquals("value2", pageParameters.get("named2").toOptionalString());
+		assertEquals("1", pageParameters.get("postOne").toOptionalString());
+		assertEquals("2", pageParameters.getValues("postTwo").get(0).toOptionalString());
+		assertEquals("2.1", pageParameters.getValues("postTwo").get(1).toOptionalString());
+	}
+
+	/**
+	 * Mock IRequestParameters that provides static POST parameters
+	 */
+	private static class PostParameters implements IRequestParameters
+	{
+		private final Map<String, List<StringValue>> params = new HashMap<String, List<StringValue>>();
+		{
+			params.put("postOne", Arrays.asList(StringValue.valueOf("1")));
+			params.put("postTwo", Arrays.asList(StringValue.valueOf("2"), StringValue.valueOf("2.1")));
+		}
+
+		public Set<String> getParameterNames()
+		{
+			return params.keySet();
+		}
+
+		public StringValue getParameterValue(String name)
+		{
+			List<StringValue> values = params.get(name);
+			return (values != null && !values.isEmpty()) ? values.get(0)
+					: StringValue.valueOf((String)null);
+		}
+
+		public List<StringValue> getParameterValues(String name)
+		{
+			List<StringValue> values = params.get(name);
+			return values != null ? Collections.unmodifiableList(values) : null;
+		}
+	}
+}