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 2013/05/01 16:02:33 UTC

[1/2] WICKET-4774 Introduce read-only interface for PageParameters

Updated Branches:
  refs/heads/wicket-4774 [created] 665a3e800


http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/PackageMapperTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/PackageMapperTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/PackageMapperTest.java
index a342bd5..b6e9242 100644
--- a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/PackageMapperTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/PackageMapperTest.java
@@ -18,11 +18,6 @@ package org.apache.wicket.core.request.mapper;
 
 import org.apache.wicket.MockPage;
 import org.apache.wicket.core.request.handler.BookmarkableListenerInterfaceRequestHandler;
-import org.apache.wicket.markup.html.link.ILinkListener;
-import org.apache.wicket.request.IRequestHandler;
-import org.apache.wicket.request.Url;
-import org.apache.wicket.request.component.IRequestableComponent;
-import org.apache.wicket.request.component.IRequestablePage;
 import org.apache.wicket.core.request.handler.BookmarkablePageRequestHandler;
 import org.apache.wicket.core.request.handler.IPageProvider;
 import org.apache.wicket.core.request.handler.IPageRequestHandler;
@@ -31,6 +26,12 @@ import org.apache.wicket.core.request.handler.PageAndComponentProvider;
 import org.apache.wicket.core.request.handler.PageProvider;
 import org.apache.wicket.core.request.handler.RenderPageRequestHandler;
 import org.apache.wicket.core.request.mapper.PackageMapperTest.OuterPage.InnerPage;
+import org.apache.wicket.markup.html.link.ILinkListener;
+import org.apache.wicket.request.IRequestHandler;
+import org.apache.wicket.request.Url;
+import org.apache.wicket.request.component.IRequestableComponent;
+import org.apache.wicket.request.component.IRequestablePage;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.util.lang.PackageName;
 import org.junit.Test;
@@ -123,7 +124,7 @@ public class PackageMapperTest extends AbstractMapperTest
 		IRequestablePage page = ((RenderPageRequestHandler)handler).getPage();
 		assertEquals(PAGE_CLASS_NAME, page.getClass().getSimpleName());
 
-		PageParameters p = page.getPageParameters();
+		IPageParameters p = page.getPageParameters();
 		assertEquals(1, p.getIndexedCount());
 		assertEquals("indexed1", p.get(0).toString());
 
@@ -159,7 +160,7 @@ public class PackageMapperTest extends AbstractMapperTest
 		IRequestablePage page = ((RenderPageRequestHandler)handler).getPage();
 		checkPage(page, 15);
 
-		PageParameters p = page.getPageParameters();
+		IPageParameters p = page.getPageParameters();
 		assertEquals(0, p.getIndexedCount());
 
 		assertEquals(0, p.getNamedKeys().size());
@@ -204,7 +205,7 @@ public class PackageMapperTest extends AbstractMapperTest
 		assertEquals(ILinkListener.INTERFACE, h.getListenerInterface());
 		assertEquals("foo:bar", h.getComponent().getPageRelativePath());
 
-		PageParameters p = page.getPageParameters();
+		IPageParameters p = page.getPageParameters();
 		assertEquals(0, p.getIndexedCount());
 
 		assertEquals(0, p.getNamedKeys().size());
@@ -337,10 +338,11 @@ public class PackageMapperTest extends AbstractMapperTest
 	public void encode4()
 	{
 		MockPage page = new MockPage(15);
-		page.getPageParameters().set(0, "i1");
-		page.getPageParameters().set(1, "i2");
-		page.getPageParameters().set("a", "b");
-		page.getPageParameters().set("b", "c");
+		PageParameters parameters = page.getPageParameters().mutable();
+		parameters.set(0, "i1");
+		parameters.set(1, "i2");
+		parameters.set("a", "b");
+		parameters.set("b", "c");
 		page.setCreatedBookmarkable(true);
 
 		IPageProvider provider = new PageProvider(page);
@@ -357,10 +359,11 @@ public class PackageMapperTest extends AbstractMapperTest
 	public void encode5()
 	{
 		MockPage page = new MockPage(15);
-		page.getPageParameters().set(0, "i1");
-		page.getPageParameters().set(1, "i2");
-		page.getPageParameters().set("a", "b");
-		page.getPageParameters().set("b", "c");
+		PageParameters pageParameters = page.getPageParameters().mutable();
+		pageParameters.set(0, "i1");
+		pageParameters.set(1, "i2");
+		pageParameters.set("a", "b");
+		pageParameters.set("b", "c");
 
 		page.setCreatedBookmarkable(false);
 
@@ -381,10 +384,11 @@ public class PackageMapperTest extends AbstractMapperTest
 	public void encode6()
 	{
 		MockPage page = new MockPage(15);
-		page.getPageParameters().set(0, "i1");
-		page.getPageParameters().set(1, "i2");
-		page.getPageParameters().set("a", "b");
-		page.getPageParameters().set("b", "c");
+		PageParameters parameters = page.getPageParameters().mutable();
+		parameters.set(0, "i1");
+		parameters.set(1, "i2");
+		parameters.set("a", "b");
+		parameters.set("b", "c");
 
 		// shouldn't make any difference for BookmarkableListenerInterfaceRequestHandler,
 		// as this explicitely says the url must be bookmarkable
@@ -408,10 +412,11 @@ public class PackageMapperTest extends AbstractMapperTest
 	public void encode7()
 	{
 		MockPage page = new MockPage(15);
-		page.getPageParameters().set(0, "i1");
-		page.getPageParameters().set(1, "i2");
-		page.getPageParameters().set("a", "b");
-		page.getPageParameters().set("b", "c");
+		PageParameters parameters = page.getPageParameters().mutable();
+		parameters.set(0, "i1");
+		parameters.set(1, "i2");
+		parameters.set("a", "b");
+		parameters.set("b", "c");
 
 		// shouldn't make any difference for BookmarkableListenerInterfaceRequestHandler,
 		// as this explicitely says the url must be bookmarkable

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/ResourceMapperTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/ResourceMapperTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/ResourceMapperTest.java
index a0e3512..64cd303 100644
--- a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/ResourceMapperTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/ResourceMapperTest.java
@@ -26,7 +26,7 @@ import org.apache.wicket.request.IRequestMapper;
 import org.apache.wicket.request.Request;
 import org.apache.wicket.request.Url;
 import org.apache.wicket.request.handler.resource.ResourceReferenceRequestHandler;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 import org.apache.wicket.request.resource.IResource;
 import org.apache.wicket.request.resource.ResourceReference;
 import org.apache.wicket.request.resource.SharedResourceReference;
@@ -138,7 +138,7 @@ public class ResourceMapperTest extends WicketTestCase
 		assertEquals(request.getUrl(), mapper.mapHandler(requestHandler));
 
 		tester.processRequest(requestHandler);
-		PageParameters params = resource.pageParameters;
+		IPageParameters params = resource.pageParameters;
 		assertNotNull(params);
 		assertEquals(0, params.getAllNamed().size());
 		assertEquals(2, params.getIndexedCount());
@@ -165,7 +165,7 @@ public class ResourceMapperTest extends WicketTestCase
 		assertEquals(request.getUrl(), mapper.mapHandler(requestHandler));
 
 		tester.processRequest(requestHandler);
-		PageParameters params = resource.pageParameters;
+		IPageParameters params = resource.pageParameters;
 		assertNotNull(params);
 		assertEquals(3, params.getAllNamed().size());
 		assertEquals(2, params.getIndexedCount());
@@ -200,7 +200,7 @@ public class ResourceMapperTest extends WicketTestCase
 		assertEquals(request.getUrl(), mapperWithPlaceholder.mapHandler(requestHandler));
 
 		tester.processRequest(requestHandler);
-		PageParameters params = resource.pageParameters;
+		IPageParameters params = resource.pageParameters;
 		assertNotNull(params);
 		assertEquals(3, params.getAllNamed().size());
 		assertEquals(2, params.getIndexedCount());
@@ -237,7 +237,7 @@ public class ResourceMapperTest extends WicketTestCase
 		assertNotNull(handler);
 
 		tester.processRequest(handler);
-		PageParameters params = resource.pageParameters;
+		IPageParameters params = resource.pageParameters;
 		assertNotNull(params);
 		assertEquals(2, params.getAllNamed().size());
 		assertEquals(2, params.getIndexedCount());
@@ -266,7 +266,7 @@ public class ResourceMapperTest extends WicketTestCase
 	{
 		private static final long serialVersionUID = -3130204487473856574L;
 
-		public PageParameters pageParameters;
+		public IPageParameters pageParameters;
 
 		@Override
 		public void respond(Attributes attributes)

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/TestMapperContext.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/TestMapperContext.java b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/TestMapperContext.java
index b3e137a..b5a5eab 100644
--- a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/TestMapperContext.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/TestMapperContext.java
@@ -19,6 +19,7 @@ package org.apache.wicket.core.request.mapper;
 import org.apache.wicket.MockPage;
 import org.apache.wicket.RequestListenerInterface;
 import org.apache.wicket.WicketRuntimeException;
+import org.apache.wicket.core.request.handler.PageProvider;
 import org.apache.wicket.markup.MarkupParser;
 import org.apache.wicket.page.IPageManagerContext;
 import org.apache.wicket.page.PageStoreManager;
@@ -27,8 +28,7 @@ import org.apache.wicket.pageStore.IDataStore;
 import org.apache.wicket.pageStore.IPageStore;
 import org.apache.wicket.pageStore.memory.DummyPageManagerContext;
 import org.apache.wicket.request.component.IRequestablePage;
-import org.apache.wicket.core.request.handler.PageProvider;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 import org.apache.wicket.request.resource.ResourceReference;
 import org.apache.wicket.request.resource.ResourceReference.Key;
 import org.apache.wicket.request.resource.ResourceReferenceRegistry;
@@ -180,7 +180,7 @@ public class TestMapperContext implements IMapperContext
 
 	@Override
 	public IRequestablePage newPageInstance(Class<? extends IRequestablePage> pageClass,
-		PageParameters pageParameters)
+		IPageParameters pageParameters)
 	{
 		try
 		{
@@ -191,7 +191,7 @@ public class TestMapperContext implements IMapperContext
 			page.setCreatedBookmarkable(true);
 			if (pageParameters != null)
 			{
-				page.getPageParameters().overwriteWith(pageParameters);
+				page.getPageParameters().mutable().overwriteWith(pageParameters);
 			}
 			return page;
 		}

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-examples/src/main/java/org/apache/wicket/examples/requestmapper/MapperDemoResourceReference.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/requestmapper/MapperDemoResourceReference.java b/wicket-examples/src/main/java/org/apache/wicket/examples/requestmapper/MapperDemoResourceReference.java
index 867aa11..2a039c7 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/requestmapper/MapperDemoResourceReference.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/requestmapper/MapperDemoResourceReference.java
@@ -18,7 +18,7 @@ package org.apache.wicket.examples.requestmapper;
 
 import java.util.Locale;
 
-import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 import org.apache.wicket.request.resource.AbstractResource;
 import org.apache.wicket.request.resource.IResource;
 import org.apache.wicket.request.resource.ResourceReference;
@@ -53,7 +53,7 @@ public class MapperDemoResourceReference extends ResourceReference
 			{
 				ResourceResponse resourceResponse = new ResourceResponse();
 
-				PageParameters parameters = attributes.getParameters();
+				IPageParameters parameters = attributes.getParameters();
 				StringValue sheetParam = parameters.get("sheet");
 				StringValue formatParam = parameters.get("format");
 				final String responseText = String.format(

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-examples/src/main/java/org/apache/wicket/examples/stateless/StatelessPage3.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/stateless/StatelessPage3.java b/wicket-examples/src/main/java/org/apache/wicket/examples/stateless/StatelessPage3.java
index 311764f..d650eca 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/stateless/StatelessPage3.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/stateless/StatelessPage3.java
@@ -78,7 +78,7 @@ public class StatelessPage3 extends WicketExamplePage
 				info("Submitted text: " + field.getDefaultModelObject());
 
 				// store the value in page parameters
-				getPage().getPageParameters().set(PARAMETER_NAME, number);
+				getPage().getPageParameters().mutable().set(PARAMETER_NAME, number);
 			}
 
 		};

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/WebSocketRequestHandler.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/WebSocketRequestHandler.java b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/WebSocketRequestHandler.java
index 8151480..90b4369 100644
--- a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/WebSocketRequestHandler.java
+++ b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/WebSocketRequestHandler.java
@@ -32,7 +32,7 @@ import org.apache.wicket.request.IRequestCycle;
 import org.apache.wicket.request.Response;
 import org.apache.wicket.request.component.IRequestablePage;
 import org.apache.wicket.request.http.WebRequest;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 import org.apache.wicket.util.lang.Args;
 import org.apache.wicket.util.string.Strings;
 import org.apache.wicket.util.visit.IVisit;
@@ -248,7 +248,7 @@ public class WebSocketRequestHandler implements AjaxRequestTarget, IWebSocketReq
 	}
 
 	@Override
-	public PageParameters getPageParameters()
+	public IPageParameters getPageParameters()
 	{
 		return page.getPageParameters();
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-request/src/main/java/org/apache/wicket/request/mapper/AbstractMapper.java
----------------------------------------------------------------------
diff --git a/wicket-request/src/main/java/org/apache/wicket/request/mapper/AbstractMapper.java b/wicket-request/src/main/java/org/apache/wicket/request/mapper/AbstractMapper.java
index 5af0fb0..6f7f7f4 100644
--- a/wicket-request/src/main/java/org/apache/wicket/request/mapper/AbstractMapper.java
+++ b/wicket-request/src/main/java/org/apache/wicket/request/mapper/AbstractMapper.java
@@ -20,6 +20,7 @@ import org.apache.wicket.request.IRequestMapper;
 import org.apache.wicket.request.Request;
 import org.apache.wicket.request.Url;
 import org.apache.wicket.request.Url.QueryParameter;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 import org.apache.wicket.request.mapper.parameter.IPageParametersEncoder;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.util.lang.Args;
@@ -129,7 +130,7 @@ public abstract class AbstractMapper implements IRequestMapper
 	 * @param encoder
 	 * @return PageParameters instance
 	 */
-	protected PageParameters extractPageParameters(final Request request, int segmentsToSkip,
+	protected IPageParameters extractPageParameters(final Request request, int segmentsToSkip,
 		final IPageParametersEncoder encoder)
 	{
 		Args.notNull(request, "request");
@@ -175,7 +176,7 @@ public abstract class AbstractMapper implements IRequestMapper
 	 * @param encoder
 	 * @return URL with encoded parameters
 	 */
-	protected Url encodePageParameters(Url url, PageParameters pageParameters,
+	protected Url encodePageParameters(Url url, IPageParameters pageParameters,
 		final IPageParametersEncoder encoder)
 	{
 		Args.notNull(url, "url");

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/IIndexedParameters.java
----------------------------------------------------------------------
diff --git a/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/IIndexedParameters.java b/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/IIndexedParameters.java
index 073fe34..78e9420 100644
--- a/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/IIndexedParameters.java
+++ b/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/IIndexedParameters.java
@@ -26,7 +26,6 @@ import org.apache.wicket.util.string.StringValue;
  */
 public interface IIndexedParameters
 {
-
 	/**
 	 * Sets the indexed parameter on given index
 	 * 
@@ -44,7 +43,7 @@ public interface IIndexedParameters
 
 	/**
 	 * Removes indexed parameter on given index
-	 * 
+	 *
 	 * @param index
 	 * @return this
 	 */
@@ -52,9 +51,13 @@ public interface IIndexedParameters
 
 	/**
 	 * Removes all indexed parameters.
-	 * 
+	 *
 	 * @return this
 	 */
 	IIndexedParameters clearIndexed();
 
+	/**
+	 * @return count of indexed parameters
+	 */
+	int getIndexedCount();
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/INamedParameters.java
----------------------------------------------------------------------
diff --git a/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/INamedParameters.java b/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/INamedParameters.java
index 004f020..344d707 100644
--- a/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/INamedParameters.java
+++ b/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/INamedParameters.java
@@ -49,7 +49,7 @@ public interface INamedParameters
 		 */
 		public NamedPair(final String key, final String value)
 		{
-			this.key = Args.notNull(key, "key");;
+			this.key = Args.notNull(key, "key");
 			this.value = Args.notNull(value, "value");
 		}
 
@@ -132,7 +132,7 @@ public interface INamedParameters
 
 	/**
 	 * Removes named parameter with given name.
-	 * 
+	 *
 	 * @param name
 	 *            the name of the parameter to remove
 	 * @param values
@@ -144,7 +144,7 @@ public interface INamedParameters
 
 	/**
 	 * Adds value to named parameter with given name.
-	 * 
+	 *
 	 * @param name
 	 * @param value
 	 * @return this

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/IPageParameters.java
----------------------------------------------------------------------
diff --git a/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/IPageParameters.java b/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/IPageParameters.java
new file mode 100644
index 0000000..064f67f
--- /dev/null
+++ b/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/IPageParameters.java
@@ -0,0 +1,87 @@
+/*
+ * 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.util.List;
+import java.util.Set;
+
+import org.apache.wicket.util.string.StringValue;
+
+/**
+ * Contains only the accessor methods of PageParameters.
+ * Used as protection of accidental modifications of Page's PageParameters (page#getPageParameters()).
+ *
+ * When such modification is really needed {@linkplain #mutable()} method should be used:
+ * <code>parameters.mutable().add("name", "value");</code>
+ */
+public interface IPageParameters
+{
+	/**
+	 * Return set of all named parameter names.
+	 *
+	 * @return named parameter names
+	 */
+	Set<String> getNamedKeys();
+
+	/**
+	 * Returns parameter value of named parameter with given name
+	 *
+	 * @param name
+	 * @return parameter value
+	 */
+	StringValue get(final String name);
+
+	/**
+	 * Return list of all values for named parameter with given name
+	 *
+	 * @param name
+	 * @return list of parameter values
+	 */
+	List<StringValue> getValues(final String name);
+
+	/**
+	 * @return All named parameters in exact order.
+	 */
+	List<INamedParameters.NamedPair> getAllNamed();
+
+	/**
+	 * Returns the position of a named parameter.
+	 *
+	 * @param name
+	 *            the name of the parameter to look for
+	 * @return the position of the parameter. {@code -1} if there is no parameter with that name.
+	 */
+	int getPosition(String name);
+
+	/**
+	 * @param index
+	 * @return indexed parameter on given index
+	 */
+	StringValue get(final int index);
+
+	/**
+	 * @return count of indexed parameters
+	 */
+	int getIndexedCount();
+
+	/**
+	 * @return <code>true</code> if the parameters are empty, <code>false</code> otherwise.
+	 */
+	boolean isEmpty();
+
+	PageParameters mutable();
+ }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/IPageParametersEncoder.java
----------------------------------------------------------------------
diff --git a/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/IPageParametersEncoder.java b/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/IPageParametersEncoder.java
index cef8f50..c58fef7 100644
--- a/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/IPageParametersEncoder.java
+++ b/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/IPageParametersEncoder.java
@@ -34,7 +34,7 @@ public interface IPageParametersEncoder
 	 *            parameters to encode
 	 * @return Url generated from the page parameters
 	 */
-	Url encodePageParameters(PageParameters pageParameters);
+	Url encodePageParameters(IPageParameters pageParameters);
 
 	/**
 	 * Decodes the given URL to {@link PageParameters}. The URL will have all
@@ -44,5 +44,5 @@ public interface IPageParametersEncoder
 	 *            url to decode
 	 * @return {@link PageParameters} instance or <code>null</code> if empty
 	 */
-	PageParameters decodePageParameters(Url url);
+	IPageParameters decodePageParameters(Url url);
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParameters.java
----------------------------------------------------------------------
diff --git a/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParameters.java b/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParameters.java
index 956ea75..f1a91b0 100644
--- a/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParameters.java
+++ b/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParameters.java
@@ -45,7 +45,7 @@ import org.apache.wicket.util.string.StringValue;
  * 
  * @author Matej Knopp
  */
-public class PageParameters implements IClusterable, IIndexedParameters, INamedParameters
+public class PageParameters implements IClusterable, IPageParameters, IIndexedParameters, INamedParameters
 {
 	private static class Entry implements IClusterable
 	{
@@ -110,25 +110,15 @@ public class PageParameters implements IClusterable, IIndexedParameters, INamedP
 	 * 
 	 * @param copy
 	 */
-	public PageParameters(final PageParameters copy)
+	public PageParameters(final IPageParameters copy)
 	{
-		if (copy != null)
-		{
-			if (copy.indexedParameters != null)
-			{
-				indexedParameters = new ArrayList<String>(copy.indexedParameters);
-			}
-
-			if (copy.namedParameters != null)
-			{
-				namedParameters = new ArrayList<Entry>(copy.namedParameters);
-			}
-		}
+		overwriteWith(copy);
 	}
 
 	/**
 	 * @return count of indexed parameters
 	 */
+	@Override
 	public int getIndexedCount()
 	{
 		return indexedParameters != null ? indexedParameters.size() : 0;
@@ -350,10 +340,10 @@ public class PageParameters implements IClusterable, IIndexedParameters, INamedP
 
 		if (namedParameters == null)
 		{
-			namedParameters = new ArrayList<Entry>(1);
+			namedParameters = new ArrayList<>(1);
 		}
 
-		List<String> values = new ArrayList<String>();
+		List<String> values = new ArrayList<>();
 		if (value instanceof String[])
 		{
 			values.addAll(Arrays.asList((String[])value));
@@ -435,12 +425,39 @@ public class PageParameters implements IClusterable, IIndexedParameters, INamedP
 	 * @param other
 	 * @return this
 	 */
-	public PageParameters overwriteWith(final PageParameters other)
+	public PageParameters overwriteWith(final IPageParameters other)
 	{
 		if (this != other)
 		{
-			indexedParameters = other.indexedParameters;
-			namedParameters = other.namedParameters;
+			if (other != null)
+			{
+				int indexedCount = other.getIndexedCount();
+				if (indexedCount > 0)
+				{
+					indexedParameters = new ArrayList<>(indexedCount);
+					for (int i = 0; i < indexedCount; i++)
+					{
+						indexedParameters.add(other.get(i).toString());
+					}
+				}
+
+				Set<String> namedKeys = other.getNamedKeys();
+				if (namedKeys.isEmpty() == false)
+				{
+					namedParameters = new ArrayList<>(namedKeys.size());
+					for (String name : namedKeys)
+					{
+						List<StringValue> values = other.getValues(name);
+						for (StringValue value : values)
+						{
+							Entry entry = new Entry();
+							entry.key = name;
+							entry.value = value.toString();
+							namedParameters.add(entry);
+						}
+					}
+				}
+			}
 		}
 		return this;
 	}
@@ -451,7 +468,7 @@ public class PageParameters implements IClusterable, IIndexedParameters, INamedP
 	 * @param other
 	 * @return this
 	 */
-	public PageParameters mergeWith(final PageParameters other)
+	public PageParameters mergeWith(final IPageParameters other)
 	{
 		if (this != other)
 		{
@@ -538,12 +555,19 @@ public class PageParameters implements IClusterable, IIndexedParameters, INamedP
 	/**
 	 * @return <code>true</code> if the parameters are empty, <code>false</code> otherwise.
 	 */
+	@Override
 	public boolean isEmpty()
 	{
 		return (getIndexedCount() == 0) && getNamedKeys().isEmpty();
 	}
 
 	@Override
+	public PageParameters mutable()
+	{
+		return this;
+	}
+
+	@Override
 	public String toString()
 	{
 		StringBuilder str = new StringBuilder();

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/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 8139460..18476c9 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
@@ -37,7 +37,7 @@ public class PageParametersEncoder implements IPageParametersEncoder
 	 * @see IPageParametersEncoder#decodePageParameters(org.apache.wicket.request.Url)
 	 */
 	@Override
-	public PageParameters decodePageParameters(final Url url)
+	public IPageParameters decodePageParameters(final Url url)
 	{
 		PageParameters parameters = new PageParameters();
 
@@ -57,10 +57,10 @@ public class PageParametersEncoder implements IPageParametersEncoder
 	}
 
 	/**
-	 * @see org.apache.wicket.request.mapper.parameter.IPageParametersEncoder#encodePageParameters(org.apache.wicket.request.mapper.parameter.PageParameters)
+	 * @see org.apache.wicket.request.mapper.parameter.IPageParametersEncoder#encodePageParameters(org.apache.wicket.request.mapper.parameter.IPageParameters)
 	 */
 	@Override
-	public Url encodePageParameters(final PageParameters pageParameters)
+	public Url encodePageParameters(final IPageParameters pageParameters)
 	{
 		Url url = new Url();
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/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 03740d7..fab72f0 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
@@ -46,7 +46,7 @@ import org.apache.wicket.util.string.Strings;
 public class UrlPathPageParametersEncoder implements IPageParametersEncoder
 {
 	@Override
-	public Url encodePageParameters(PageParameters params)
+	public Url encodePageParameters(IPageParameters params)
 	{
 		Args.notNull(params, "params");
 		Args.isTrue(params.getIndexedCount() == 0,
@@ -65,7 +65,7 @@ public class UrlPathPageParametersEncoder implements IPageParametersEncoder
 	}
 
 	@Override
-	public PageParameters decodePageParameters(Url url)
+	public IPageParameters decodePageParameters(Url url)
 	{
 		PageParameters params = new PageParameters();
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/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
index 0490d0c..4a66e83 100644
--- 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
@@ -37,7 +37,7 @@ public class PageParametersEncoderTest extends Assert
 
 		Url url = Url.parse("idx1/idx2?named1=value1&named2=value2");
 
-		PageParameters pageParameters = encoder.decodePageParameters(url);
+		IPageParameters pageParameters = encoder.decodePageParameters(url);
 		assertEquals("idx1", pageParameters.get(0).toOptionalString());
 		assertEquals("idx2", pageParameters.get(1).toOptionalString());
 		assertEquals("value1", pageParameters.get("named1").toOptionalString());

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-request/src/test/java/org/apache/wicket/request/mapper/parameter/UrlPathPageParametersEncoderTest.java
----------------------------------------------------------------------
diff --git a/wicket-request/src/test/java/org/apache/wicket/request/mapper/parameter/UrlPathPageParametersEncoderTest.java b/wicket-request/src/test/java/org/apache/wicket/request/mapper/parameter/UrlPathPageParametersEncoderTest.java
index 9eca67c..6e2f460 100644
--- a/wicket-request/src/test/java/org/apache/wicket/request/mapper/parameter/UrlPathPageParametersEncoderTest.java
+++ b/wicket-request/src/test/java/org/apache/wicket/request/mapper/parameter/UrlPathPageParametersEncoderTest.java
@@ -83,7 +83,7 @@ public class UrlPathPageParametersEncoderTest extends Assert
 		Url url = Url.parse("name1/value1/name2/value2");
 
 		UrlPathPageParametersEncoder decoder = new UrlPathPageParametersEncoder();
-		PageParameters parameters = decoder.decodePageParameters(url);
+		IPageParameters parameters = decoder.decodePageParameters(url);
 
 		assertEquals(2, parameters.getAllNamed().size());
 		assertEquals("value1", parameters.get("name1").toString());
@@ -100,7 +100,7 @@ public class UrlPathPageParametersEncoderTest extends Assert
 		Url url = Url.parse("name1/value1/name2/value2/");
 
 		UrlPathPageParametersEncoder decoder = new UrlPathPageParametersEncoder();
-		PageParameters parameters = decoder.decodePageParameters(url);
+		IPageParameters parameters = decoder.decodePageParameters(url);
 
 		assertEquals(2, parameters.getAllNamed().size());
 		assertEquals("value1", parameters.get("name1").toString());
@@ -117,7 +117,7 @@ public class UrlPathPageParametersEncoderTest extends Assert
 		Url url = Url.parse("name1/value1/name2/value2/name3");
 
 		UrlPathPageParametersEncoder decoder = new UrlPathPageParametersEncoder();
-		PageParameters parameters = decoder.decodePageParameters(url);
+		IPageParameters parameters = decoder.decodePageParameters(url);
 
 		assertEquals(2, parameters.getAllNamed().size());
 		assertEquals("value1", parameters.get("name1").toString());
@@ -133,7 +133,7 @@ public class UrlPathPageParametersEncoderTest extends Assert
 		Url url = Url.parse("/name1/value1/name2/value2");
 
 		UrlPathPageParametersEncoder decoder = new UrlPathPageParametersEncoder();
-		PageParameters parameters = decoder.decodePageParameters(url);
+		IPageParameters parameters = decoder.decodePageParameters(url);
 
 		assertEquals(2, parameters.getAllNamed().size());
 		assertEquals("value1", parameters.get("name1").toString());
@@ -150,7 +150,7 @@ public class UrlPathPageParametersEncoderTest extends Assert
 		Url url = Url.parse("name1/value1////name2/value2");
 
 		UrlPathPageParametersEncoder decoder = new UrlPathPageParametersEncoder();
-		PageParameters parameters = decoder.decodePageParameters(url);
+		IPageParameters parameters = decoder.decodePageParameters(url);
 
 		assertEquals(2, parameters.getAllNamed().size());
 		assertEquals("value1", parameters.get("name1").toString());
@@ -167,7 +167,7 @@ public class UrlPathPageParametersEncoderTest extends Assert
 		Url url = Url.parse("name1/value1////name2//");
 
 		UrlPathPageParametersEncoder decoder = new UrlPathPageParametersEncoder();
-		PageParameters parameters = decoder.decodePageParameters(url);
+		IPageParameters parameters = decoder.decodePageParameters(url);
 
 		assertEquals(2, parameters.getAllNamed().size());
 		assertEquals("value1", parameters.get("name1").toString());


[2/2] git commit: WICKET-4774 Introduce read-only interface for PageParameters

Posted by mg...@apache.org.
WICKET-4774 Introduce read-only interface for PageParameters

Use readonly IPageParameters 98% of the time and make it mutable where really needed.


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

Branch: refs/heads/wicket-4774
Commit: 665a3e8003e035a412cd40951728eff7cedc8fe8
Parents: 9759e26
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Wed May 1 16:01:20 2013 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Wed May 1 16:01:20 2013 +0200

----------------------------------------------------------------------
 .../java/org/apache/wicket/cdi/CdiContainer.java   |    2 +-
 .../apache/wicket/cdi/ConversationPropagator.java  |    8 +-
 .../src/main/java/org/apache/wicket/Component.java |   13 +-
 .../org/apache/wicket/DefaultMapperContext.java    |    6 +-
 .../main/java/org/apache/wicket/IPageFactory.java  |    4 +-
 .../src/main/java/org/apache/wicket/Page.java      |    5 +-
 .../org/apache/wicket/ajax/AjaxRequestHandler.java |    4 +-
 ...ookmarkableListenerInterfaceRequestHandler.java |    4 +-
 .../handler/BookmarkablePageRequestHandler.java    |    4 +-
 .../request/handler/IPageClassRequestHandler.java  |    4 +-
 .../wicket/core/request/handler/IPageProvider.java |    3 +-
 .../handler/ListenerInterfaceRequestHandler.java   |    4 +-
 .../request/handler/PageAndComponentProvider.java  |   13 +-
 .../wicket/core/request/handler/PageProvider.java  |   13 +-
 .../request/handler/RenderPageRequestHandler.java  |    4 +-
 .../core/request/handler/logger/PageLogData.java   |    6 +-
 .../handler/logger/ResourceReferenceLogData.java   |    6 +-
 .../request/mapper/AbstractBookmarkableMapper.java |   17 ++--
 .../mapper/BasicResourceReferenceMapper.java       |    9 +-
 .../core/request/mapper/BookmarkableMapper.java    |    4 +-
 .../wicket/core/request/mapper/IPageSource.java    |    4 +-
 .../wicket/core/request/mapper/MountedMapper.java  |   11 +-
 .../wicket/core/request/mapper/PackageMapper.java  |    4 +-
 .../wicket/core/request/mapper/ResourceMapper.java |    7 +-
 .../wicket/markup/html/form/StatelessForm.java     |    7 +-
 .../wicket/request/component/IRequestablePage.java |    3 +-
 .../apache/wicket/request/cycle/RequestCycle.java  |   11 +-
 .../resource/ResourceReferenceRequestHandler.java  |    9 +-
 .../handler/resource/ResourceRequestHandler.java   |    7 +-
 .../apache/wicket/request/resource/IResource.java  |    8 +-
 ...ryStringWithVersionResourceCachingStrategy.java |    8 +-
 .../request/resource/caching/ResourceUrl.java      |    8 +-
 .../apache/wicket/session/DefaultPageFactory.java  |   13 +-
 .../src/test/java/org/apache/wicket/MockPage.java  |    3 +-
 .../mapper/AbstractBookmarkableMapperTest.java     |   12 --
 .../mapper/BasicResourceReferenceMapperTest.java   |   20 +---
 .../request/mapper/BookmarkableMapperTest.java     |   53 +++++----
 .../core/request/mapper/CryptoMapperTest.java      |    5 +-
 .../core/request/mapper/MountedMapperTest.java     |   69 +++++++-----
 .../core/request/mapper/PackageMapperTest.java     |   53 +++++----
 .../core/request/mapper/ResourceMapperTest.java    |   12 +-
 .../core/request/mapper/TestMapperContext.java     |    8 +-
 .../requestmapper/MapperDemoResourceReference.java |    4 +-
 .../wicket/examples/stateless/StatelessPage3.java  |    2 +-
 .../protocol/ws/api/WebSocketRequestHandler.java   |    4 +-
 .../wicket/request/mapper/AbstractMapper.java      |    5 +-
 .../mapper/parameter/IIndexedParameters.java       |    9 +-
 .../request/mapper/parameter/INamedParameters.java |    6 +-
 .../request/mapper/parameter/IPageParameters.java  |   87 +++++++++++++++
 .../mapper/parameter/IPageParametersEncoder.java   |    4 +-
 .../request/mapper/parameter/PageParameters.java   |   64 ++++++++----
 .../mapper/parameter/PageParametersEncoder.java    |    6 +-
 .../parameter/UrlPathPageParametersEncoder.java    |    4 +-
 .../parameter/PageParametersEncoderTest.java       |    2 +-
 .../UrlPathPageParametersEncoderTest.java          |   12 +-
 55 files changed, 401 insertions(+), 276 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-cdi/src/main/java/org/apache/wicket/cdi/CdiContainer.java
----------------------------------------------------------------------
diff --git a/wicket-cdi/src/main/java/org/apache/wicket/cdi/CdiContainer.java b/wicket-cdi/src/main/java/org/apache/wicket/cdi/CdiContainer.java
index 3a5cc96..ebc0ea0 100644
--- a/wicket-cdi/src/main/java/org/apache/wicket/cdi/CdiContainer.java
+++ b/wicket-cdi/src/main/java/org/apache/wicket/cdi/CdiContainer.java
@@ -123,7 +123,7 @@ public class CdiContainer
 		Args.notNull(page, "page");
 
 		page.setMetaData(ConversationIdMetaKey.INSTANCE, null);
-		page.getPageParameters().remove(ConversationPropagator.CID);
+		page.getPageParameters().mutable().remove(ConversationPropagator.CID);
 	}
 
 	/**

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-cdi/src/main/java/org/apache/wicket/cdi/ConversationPropagator.java
----------------------------------------------------------------------
diff --git a/wicket-cdi/src/main/java/org/apache/wicket/cdi/ConversationPropagator.java b/wicket-cdi/src/main/java/org/apache/wicket/cdi/ConversationPropagator.java
index 568e117..fdbab4b 100644
--- a/wicket-cdi/src/main/java/org/apache/wicket/cdi/ConversationPropagator.java
+++ b/wicket-cdi/src/main/java/org/apache/wicket/cdi/ConversationPropagator.java
@@ -37,7 +37,7 @@ import org.apache.wicket.request.cycle.AbstractRequestCycleListener;
 import org.apache.wicket.request.cycle.IRequestCycleListener;
 import org.apache.wicket.request.cycle.RequestCycle;
 import org.apache.wicket.request.handler.resource.ResourceReferenceRequestHandler;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 import org.apache.wicket.request.resource.PackageResourceReference;
 import org.apache.wicket.util.lang.Args;
 import org.apache.wicket.util.lang.Objects;
@@ -278,10 +278,10 @@ public class ConversationPropagator extends AbstractRequestCycleListener
 				"Propagating non-transient conversation {} via page parameters of handler {}",
 				conversation.getId(), handler);
 
-			PageParameters parameters = getPageParameters(handler);
+			IPageParameters parameters = getPageParameters(handler);
 			if (parameters != null)
 			{
-				parameters.set(CID, conversation.getId());
+				parameters.mutable().set(CID, conversation.getId());
 			}
 		}
 	}
@@ -460,7 +460,7 @@ public class ConversationPropagator extends AbstractRequestCycleListener
 	 * @param handler
 	 * @return page parameters or {@code null} if none
 	 */
-	protected PageParameters getPageParameters(IRequestHandler handler)
+	protected IPageParameters getPageParameters(IRequestHandler handler)
 	{
 		if (handler instanceof IPageClassRequestHandler)
 		{

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/main/java/org/apache/wicket/Component.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/Component.java b/wicket-core/src/main/java/org/apache/wicket/Component.java
index eed72f5..5306d6a 100644
--- a/wicket-core/src/main/java/org/apache/wicket/Component.java
+++ b/wicket-core/src/main/java/org/apache/wicket/Component.java
@@ -75,6 +75,7 @@ import org.apache.wicket.request.Response;
 import org.apache.wicket.request.component.IRequestableComponent;
 import org.apache.wicket.request.component.IRequestablePage;
 import org.apache.wicket.request.cycle.RequestCycle;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.request.resource.ResourceReference;
 import org.apache.wicket.response.StringResponse;
@@ -3163,10 +3164,10 @@ public abstract class Component
 	 *            The response page class
 	 * @param parameters
 	 *            The parameters for this bookmarkable page.
-	 * @see RequestCycle#setResponsePage(Class, PageParameters)
+	 * @see RequestCycle#setResponsePage(Class, IPageParameters)
 	 */
 	public final <C extends IRequestablePage> void setResponsePage(final Class<C> cls,
-		PageParameters parameters)
+		IPageParameters parameters)
 	{
 		getRequestCycle().setResponsePage(cls, parameters);
 	}
@@ -3302,7 +3303,7 @@ public abstract class Component
 	 * 
 	 * @param <C>
 	 * 
-	 * @see RequestCycle#urlFor(Class, org.apache.wicket.request.mapper.parameter.PageParameters)
+	 * @see RequestCycle#urlFor(Class, org.apache.wicket.request.mapper.parameter.IPageParameters)
 	 * 
 	 * @param pageClass
 	 *            Class of page
@@ -3311,7 +3312,7 @@ public abstract class Component
 	 * @return Bookmarkable URL to page
 	 */
 	public final <C extends Page> CharSequence urlFor(final Class<C> pageClass,
-		final PageParameters parameters)
+		final IPageParameters parameters)
 	{
 		return getRequestCycle().urlFor(pageClass, parameters);
 	}
@@ -3329,7 +3330,7 @@ public abstract class Component
 	 * @return The URL
 	 */
 	public final CharSequence urlFor(final Behavior behaviour,
-		final RequestListenerInterface listener, final PageParameters parameters)
+		final RequestListenerInterface listener, final IPageParameters parameters)
 	{
 		int id = getBehaviorId(behaviour);
 		Page page = getPage();
@@ -3373,7 +3374,7 @@ public abstract class Component
 	 * @return The URL
 	 */
 	public final CharSequence urlFor(final RequestListenerInterface listener,
-		final PageParameters parameters)
+		final IPageParameters parameters)
 	{
 		Page page = getPage();
 		PageAndComponentProvider provider = new PageAndComponentProvider(page, this, parameters);

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/main/java/org/apache/wicket/DefaultMapperContext.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/DefaultMapperContext.java b/wicket-core/src/main/java/org/apache/wicket/DefaultMapperContext.java
index ea5fce3..86abc76 100644
--- a/wicket-core/src/main/java/org/apache/wicket/DefaultMapperContext.java
+++ b/wicket-core/src/main/java/org/apache/wicket/DefaultMapperContext.java
@@ -20,7 +20,7 @@ import org.apache.wicket.core.request.mapper.IMapperContext;
 import org.apache.wicket.markup.MarkupParser;
 import org.apache.wicket.page.IManageablePage;
 import org.apache.wicket.request.component.IRequestablePage;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 import org.apache.wicket.request.resource.ResourceReferenceRegistry;
 
 /**
@@ -122,11 +122,11 @@ public class DefaultMapperContext implements IMapperContext
 	/**
 	 * 
 	 * @see org.apache.wicket.core.request.mapper.IPageSource#newPageInstance(java.lang.Class,
-	 *      org.apache.wicket.request.mapper.parameter.PageParameters)
+	 *      org.apache.wicket.request.mapper.parameter.IPageParameters)
 	 */
 	@Override
 	public IRequestablePage newPageInstance(final Class<? extends IRequestablePage> pageClass,
-		final PageParameters pageParameters)
+		final IPageParameters pageParameters)
 	{
 		if (pageParameters == null)
 		{

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/main/java/org/apache/wicket/IPageFactory.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/IPageFactory.java b/wicket-core/src/main/java/org/apache/wicket/IPageFactory.java
index 7006003..ecaa7fd 100644
--- a/wicket-core/src/main/java/org/apache/wicket/IPageFactory.java
+++ b/wicket-core/src/main/java/org/apache/wicket/IPageFactory.java
@@ -17,7 +17,7 @@
 package org.apache.wicket;
 
 import org.apache.wicket.request.component.IRequestablePage;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 
 
 /**
@@ -64,7 +64,7 @@ public interface IPageFactory
 	 * @throws WicketRuntimeException
 	 *             Thrown if the page cannot be constructed
 	 */
-	<C extends IRequestablePage> C newPage(final Class<C> pageClass, final PageParameters parameters);
+	<C extends IRequestablePage> C newPage(final Class<C> pageClass, final IPageParameters parameters);
 
 	/**
 	 * Checks whether a page can be instantiated using a bookmarkable URL.

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/main/java/org/apache/wicket/Page.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/Page.java b/wicket-core/src/main/java/org/apache/wicket/Page.java
index 1c811aa..1e49607 100644
--- a/wicket-core/src/main/java/org/apache/wicket/Page.java
+++ b/wicket-core/src/main/java/org/apache/wicket/Page.java
@@ -34,6 +34,7 @@ import org.apache.wicket.page.IPageManager;
 import org.apache.wicket.pageStore.IPageStore;
 import org.apache.wicket.request.component.IRequestablePage;
 import org.apache.wicket.request.cycle.RequestCycle;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.settings.IDebugSettings;
 import org.apache.wicket.settings.IPageSettings;
@@ -185,7 +186,7 @@ public abstract class Page extends MarkupContainer implements IRedirectListener,
 	 * @return {@link PageParameters} The construction page parameter
 	 */
 	@Override
-	public PageParameters getPageParameters()
+	public IPageParameters getPageParameters()
 	{
 		return pageParameters;
 	}
@@ -203,7 +204,7 @@ public abstract class Page extends MarkupContainer implements IRedirectListener,
 		{
 			if (renderedComponents == null)
 			{
-				renderedComponents = new HashSet<Component>();
+				renderedComponents = new HashSet<>();
 			}
 			if (renderedComponents.add(component) == false)
 			{

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestHandler.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestHandler.java b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestHandler.java
index 0cad83b..f9bc35e 100644
--- a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestHandler.java
+++ b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestHandler.java
@@ -40,7 +40,7 @@ import org.apache.wicket.request.component.IRequestablePage;
 import org.apache.wicket.request.cycle.RequestCycle;
 import org.apache.wicket.request.http.WebRequest;
 import org.apache.wicket.request.http.WebResponse;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 import org.apache.wicket.response.StringResponse;
 import org.apache.wicket.response.filter.IResponseFilter;
 import org.apache.wicket.util.lang.Args;
@@ -445,7 +445,7 @@ public class AjaxRequestHandler implements AjaxRequestTarget
 	 * @see org.apache.wicket.core.request.handler.IPageRequestHandler#getPageParameters()
 	 */
 	@Override
-	public PageParameters getPageParameters()
+	public IPageParameters getPageParameters()
 	{
 		return page.getPageParameters();
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/main/java/org/apache/wicket/core/request/handler/BookmarkableListenerInterfaceRequestHandler.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/BookmarkableListenerInterfaceRequestHandler.java b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/BookmarkableListenerInterfaceRequestHandler.java
index cc7e1b9..db3c734 100644
--- a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/BookmarkableListenerInterfaceRequestHandler.java
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/BookmarkableListenerInterfaceRequestHandler.java
@@ -20,7 +20,7 @@ import org.apache.wicket.RequestListenerInterface;
 import org.apache.wicket.request.IRequestCycle;
 import org.apache.wicket.request.component.IRequestableComponent;
 import org.apache.wicket.request.component.IRequestablePage;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 import org.apache.wicket.util.lang.Args;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -121,7 +121,7 @@ public class BookmarkableListenerInterfaceRequestHandler
 	 * @see org.apache.wicket.core.request.handler.IPageClassRequestHandler#getPageParameters()
 	 */
 	@Override
-	public PageParameters getPageParameters()
+	public IPageParameters getPageParameters()
 	{
 		return pageComponentProvider.getPageParameters();
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/main/java/org/apache/wicket/core/request/handler/BookmarkablePageRequestHandler.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/BookmarkablePageRequestHandler.java b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/BookmarkablePageRequestHandler.java
index 59ef0a4..45e6004 100644
--- a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/BookmarkablePageRequestHandler.java
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/BookmarkablePageRequestHandler.java
@@ -20,7 +20,7 @@ import org.apache.wicket.core.request.handler.logger.PageLogData;
 import org.apache.wicket.request.ILoggableRequestHandler;
 import org.apache.wicket.request.IRequestCycle;
 import org.apache.wicket.request.component.IRequestablePage;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 import org.apache.wicket.util.lang.Args;
 
 /**
@@ -64,7 +64,7 @@ public class BookmarkablePageRequestHandler
 	 * @see IPageClassRequestHandler#getPageParameters()
 	 */
 	@Override
-	public PageParameters getPageParameters()
+	public IPageParameters getPageParameters()
 	{
 		return pageProvider.getPageParameters();
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/main/java/org/apache/wicket/core/request/handler/IPageClassRequestHandler.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/IPageClassRequestHandler.java b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/IPageClassRequestHandler.java
index 929ad53..8465789 100644
--- a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/IPageClassRequestHandler.java
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/IPageClassRequestHandler.java
@@ -18,7 +18,7 @@ package org.apache.wicket.core.request.handler;
 
 import org.apache.wicket.request.IRequestHandler;
 import org.apache.wicket.request.component.IRequestablePage;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 
 /**
  * Request handler that works with page class.
@@ -37,5 +37,5 @@ public interface IPageClassRequestHandler extends IRequestHandler
 	/**
 	 * @return page parameters
 	 */
-	PageParameters getPageParameters();
+	IPageParameters getPageParameters();
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/main/java/org/apache/wicket/core/request/handler/IPageProvider.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/IPageProvider.java b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/IPageProvider.java
index 3618050..8b8a27c 100644
--- a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/IPageProvider.java
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/IPageProvider.java
@@ -18,6 +18,7 @@ package org.apache.wicket.core.request.handler;
 
 import org.apache.wicket.core.request.mapper.StalePageException;
 import org.apache.wicket.request.component.IRequestablePage;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 
 
@@ -49,7 +50,7 @@ public interface IPageProvider
 	 *
 	 * @return page parameters
 	 */
-	PageParameters getPageParameters();
+	IPageParameters getPageParameters();
 
 	/**
 	 * Returns whether calling getPageInstance() will result in creating new page instance or

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/main/java/org/apache/wicket/core/request/handler/ListenerInterfaceRequestHandler.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/ListenerInterfaceRequestHandler.java b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/ListenerInterfaceRequestHandler.java
index 46c631f..c45c3ad 100644
--- a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/ListenerInterfaceRequestHandler.java
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/ListenerInterfaceRequestHandler.java
@@ -27,7 +27,7 @@ import org.apache.wicket.request.IRequestCycle;
 import org.apache.wicket.request.component.IRequestableComponent;
 import org.apache.wicket.request.component.IRequestablePage;
 import org.apache.wicket.request.http.WebRequest;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 import org.apache.wicket.util.lang.Args;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -109,7 +109,7 @@ public class ListenerInterfaceRequestHandler
 	}
 
 	@Override
-	public PageParameters getPageParameters()
+	public IPageParameters getPageParameters()
 	{
 		return pageComponentProvider.getPageParameters();
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/main/java/org/apache/wicket/core/request/handler/PageAndComponentProvider.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/PageAndComponentProvider.java b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/PageAndComponentProvider.java
index 402654a..ff3844b 100644
--- a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/PageAndComponentProvider.java
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/PageAndComponentProvider.java
@@ -19,6 +19,7 @@ package org.apache.wicket.core.request.handler;
 import org.apache.wicket.Page;
 import org.apache.wicket.request.component.IRequestableComponent;
 import org.apache.wicket.request.component.IRequestablePage;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.util.lang.Args;
 
@@ -64,14 +65,14 @@ public class PageAndComponentProvider extends PageProvider implements IPageAndCo
 	}
 
 	/**
-	 * @see PageProvider#PageProvider(Class, PageParameters)
+	 * @see PageProvider#PageProvider(Class, IPageParameters)
 	 *
 	 * @param pageClass
 	 * @param pageParameters
 	 * @param componentPath
 	 */
 	public PageAndComponentProvider(Class<? extends IRequestablePage> pageClass,
-		PageParameters pageParameters, String componentPath)
+		IPageParameters pageParameters, String componentPath)
 	{
 		super(pageClass, pageParameters);
 		setComponentPath(componentPath);
@@ -91,7 +92,7 @@ public class PageAndComponentProvider extends PageProvider implements IPageAndCo
 	}
 
 	/**
-	 * @see PageProvider#PageProvider(int, Class, Integer)
+	 * @see PageProvider#PageProvider(Integer, Class, Integer)
 	 *
 	 * @param pageId
 	 * @param pageClass
@@ -106,7 +107,7 @@ public class PageAndComponentProvider extends PageProvider implements IPageAndCo
 	}
 
 	/**
-	 * @see PageProvider#PageProvider(int, Class, PageParameters, Integer)
+	 * @see PageProvider#PageProvider(Integer, Class, IPageParameters, Integer)
 	 *
 	 * @param pageId
 	 * @param pageClass
@@ -115,7 +116,7 @@ public class PageAndComponentProvider extends PageProvider implements IPageAndCo
 	 * @param componentPath
 	 */
 	public PageAndComponentProvider(Integer pageId, Class<? extends IRequestablePage> pageClass,
-		PageParameters pageParameters, Integer renderCount, String componentPath)
+		IPageParameters pageParameters, Integer renderCount, String componentPath)
 	{
 		super(pageId, pageClass, pageParameters, renderCount);
 		setComponentPath(componentPath);
@@ -135,7 +136,7 @@ public class PageAndComponentProvider extends PageProvider implements IPageAndCo
 	}
 
 	public PageAndComponentProvider(IRequestablePage page, IRequestableComponent component,
-		PageParameters parameters)
+		IPageParameters parameters)
 	{
 		super(page);
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/main/java/org/apache/wicket/core/request/handler/PageProvider.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/PageProvider.java b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/PageProvider.java
index 2c015a4..13f2ab2 100644
--- a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/PageProvider.java
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/PageProvider.java
@@ -25,6 +25,7 @@ import org.apache.wicket.protocol.http.PageExpiredException;
 import org.apache.wicket.request.IRequestHandler;
 import org.apache.wicket.request.IRequestMapper;
 import org.apache.wicket.request.component.IRequestablePage;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.util.lang.Args;
 
@@ -58,7 +59,7 @@ public class PageProvider implements IPageProvider
 
 	private Class<? extends IRequestablePage> pageClass;
 
-	private PageParameters pageParameters;
+	private IPageParameters pageParameters;
 
 	/**
 	 * Creates a new page provider object. Upon calling of {@link #getPageInstance()} this provider
@@ -102,7 +103,7 @@ public class PageProvider implements IPageProvider
 	 *            optional argument
 	 */
 	public PageProvider(final Integer pageId, final Class<? extends IRequestablePage> pageClass,
-		final PageParameters pageParameters, final Integer renderCount)
+		final IPageParameters pageParameters, final Integer renderCount)
 	{
 		this.pageId = pageId;
 		setPageClass(pageClass);
@@ -118,7 +119,7 @@ public class PageProvider implements IPageProvider
 	 * @param pageParameters
 	 */
 	public PageProvider(final Class<? extends IRequestablePage> pageClass,
-		final PageParameters pageParameters)
+		final IPageParameters pageParameters)
 	{
 		setPageClass(pageClass);
 		if (pageParameters != null)
@@ -177,7 +178,7 @@ public class PageProvider implements IPageProvider
 	 * @see IPageProvider#getPageParameters()
 	 */
 	@Override
-	public PageParameters getPageParameters()
+	public IPageParameters getPageParameters()
 	{
 		if (pageParameters != null)
 		{
@@ -250,7 +251,7 @@ public class PageProvider implements IPageProvider
 	}
 
 	private void resolvePageInstance(Integer pageId, Class<? extends IRequestablePage> pageClass,
-		PageParameters pageParameters, Integer renderCount)
+		IPageParameters pageParameters, Integer renderCount)
 	{
 		IRequestablePage page = null;
 
@@ -355,7 +356,7 @@ public class PageProvider implements IPageProvider
 	 * 
 	 * @param pageParameters
 	 */
-	protected void setPageParameters(PageParameters pageParameters)
+	protected void setPageParameters(IPageParameters pageParameters)
 	{
 		this.pageParameters = pageParameters;
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/main/java/org/apache/wicket/core/request/handler/RenderPageRequestHandler.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/RenderPageRequestHandler.java b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/RenderPageRequestHandler.java
index 94dec22..dc199e1 100644
--- a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/RenderPageRequestHandler.java
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/RenderPageRequestHandler.java
@@ -24,7 +24,7 @@ import org.apache.wicket.request.IRequestHandler;
 import org.apache.wicket.request.component.IRequestablePage;
 import org.apache.wicket.request.cycle.RequestCycle;
 import org.apache.wicket.request.handler.render.PageRenderer;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 import org.apache.wicket.util.lang.Args;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -133,7 +133,7 @@ public class RenderPageRequestHandler
 	}
 
 	@Override
-	public PageParameters getPageParameters()
+	public IPageParameters getPageParameters()
 	{
 		return pageProvider.getPageParameters();
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/main/java/org/apache/wicket/core/request/handler/logger/PageLogData.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/logger/PageLogData.java b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/logger/PageLogData.java
index fd3b53f..9b26f00 100644
--- a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/logger/PageLogData.java
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/logger/PageLogData.java
@@ -22,7 +22,7 @@ import org.apache.wicket.core.request.handler.IPageProvider;
 import org.apache.wicket.core.request.handler.IPageRequestHandler;
 import org.apache.wicket.request.ILogData;
 import org.apache.wicket.request.component.IRequestablePage;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 
 /**
  * Contains logging data for request handlers that are related to pages; most likely
@@ -36,7 +36,7 @@ public class PageLogData implements ILogData
 
 	private final Class<? extends IRequestablePage> pageClass;
 	private final Integer pageId;
-	private final PageParameters pageParameters;
+	private final IPageParameters pageParameters;
 	private final Integer renderCount;
 
 	/**
@@ -97,7 +97,7 @@ public class PageLogData implements ILogData
 	/**
 	 * @return pageParameters
 	 */
-	public final PageParameters getPageParameters()
+	public final IPageParameters getPageParameters()
 	{
 		return pageParameters;
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/main/java/org/apache/wicket/core/request/handler/logger/ResourceReferenceLogData.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/logger/ResourceReferenceLogData.java b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/logger/ResourceReferenceLogData.java
index f4c634b..fd724e8 100644
--- a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/logger/ResourceReferenceLogData.java
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/logger/ResourceReferenceLogData.java
@@ -18,7 +18,7 @@ package org.apache.wicket.core.request.handler.logger;
 
 import org.apache.wicket.request.handler.resource.ResourceLogData;
 import org.apache.wicket.request.handler.resource.ResourceReferenceRequestHandler;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 import org.apache.wicket.request.resource.ResourceReference;
 
 /**
@@ -32,7 +32,7 @@ public class ResourceReferenceLogData extends ResourceLogData
 
 	private final Class<? extends ResourceReference> resourceReferenceClass;
 	private final Class<?> scope;
-	private final PageParameters pageParameters;
+	private final IPageParameters pageParameters;
 
 	/**
 	 * Construct.
@@ -67,7 +67,7 @@ public class ResourceReferenceLogData extends ResourceLogData
 	/***
 	 * @return pageParameters
 	 */
-	public final PageParameters getPageParameters()
+	public final IPageParameters getPageParameters()
 	{
 		return pageParameters;
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java
index 93c22d2..b6e1308 100644
--- a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java
@@ -36,6 +36,7 @@ import org.apache.wicket.request.http.WebRequest;
 import org.apache.wicket.request.mapper.info.ComponentInfo;
 import org.apache.wicket.request.mapper.info.PageComponentInfo;
 import org.apache.wicket.request.mapper.info.PageInfo;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.util.lang.Args;
 import org.slf4j.Logger;
@@ -58,7 +59,7 @@ public abstract class AbstractBookmarkableMapper extends AbstractComponentMapper
 	protected static final class UrlInfo
 	{
 		private final PageComponentInfo pageComponentInfo;
-		private final PageParameters pageParameters;
+		private final IPageParameters pageParameters;
 		private final Class<? extends IRequestablePage> pageClass;
 
 		/**
@@ -72,7 +73,7 @@ public abstract class AbstractBookmarkableMapper extends AbstractComponentMapper
 		 *            optional parameter providing pageParameters
 		 */
 		public UrlInfo(PageComponentInfo pageComponentInfo,
-			Class<? extends IRequestablePage> pageClass, PageParameters pageParameters)
+			Class<? extends IRequestablePage> pageClass, IPageParameters pageParameters)
 		{
 			Args.notNull(pageClass, "pageClass");
 
@@ -89,7 +90,7 @@ public abstract class AbstractBookmarkableMapper extends AbstractComponentMapper
 		 *            the current request's non-modified parameters
 		 * @return all parameters but Wicket internal ones
 		 */
-		private PageParameters cleanPageParameters(final PageParameters originalParameters)
+		private IPageParameters cleanPageParameters(final IPageParameters originalParameters)
 		{
 			PageParameters cleanParameters = null;
 			if (originalParameters != null)
@@ -129,7 +130,7 @@ public abstract class AbstractBookmarkableMapper extends AbstractComponentMapper
 		/**
 		 * @return PageParameters instance (never <code>null</code>)
 		 */
-		public PageParameters getPageParameters()
+		public IPageParameters getPageParameters()
 		{
 			return pageParameters;
 		}
@@ -185,7 +186,7 @@ public abstract class AbstractBookmarkableMapper extends AbstractComponentMapper
 	 * @return a {@code IRequestHandler} capable of processing the bookmarkable request.
 	 */
 	protected IRequestHandler processBookmarkable(Class<? extends IRequestablePage> pageClass,
-		PageParameters pageParameters)
+		IPageParameters pageParameters)
 	{
 		PageProvider provider = new PageProvider(pageClass, pageParameters);
 		provider.setPageSource(getContext());
@@ -204,7 +205,7 @@ public abstract class AbstractBookmarkableMapper extends AbstractComponentMapper
 	 * @return a {@code IRequestHandler} capable of processing the hybrid request.
 	 */
 	protected IRequestHandler processHybrid(PageInfo pageInfo,
-		Class<? extends IRequestablePage> pageClass, PageParameters pageParameters,
+		Class<? extends IRequestablePage> pageClass, IPageParameters pageParameters,
 		Integer renderCount)
 	{
 		PageProvider provider = new PageProvider(pageInfo.getPageId(), pageClass, pageParameters,
@@ -231,7 +232,7 @@ public abstract class AbstractBookmarkableMapper extends AbstractComponentMapper
 	 * @return a {@code IRequestHandler} that invokes the listener interface
 	 */
 	protected IRequestHandler processListener(PageComponentInfo pageComponentInfo,
-		Class<? extends IRequestablePage> pageClass, PageParameters pageParameters)
+		Class<? extends IRequestablePage> pageClass, IPageParameters pageParameters)
 	{
 		PageInfo pageInfo = pageComponentInfo.getPageInfo();
 		ComponentInfo componentInfo = pageComponentInfo.getComponentInfo();
@@ -292,7 +293,7 @@ public abstract class AbstractBookmarkableMapper extends AbstractComponentMapper
 		{
 			PageComponentInfo info = urlInfo.getPageComponentInfo();
 			Class<? extends IRequestablePage> pageClass = urlInfo.getPageClass();
-			PageParameters pageParameters = urlInfo.getPageParameters();
+			IPageParameters pageParameters = urlInfo.getPageParameters();
 
 			if (info == null)
 			{

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/BasicResourceReferenceMapper.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/BasicResourceReferenceMapper.java b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/BasicResourceReferenceMapper.java
index 665dafe..0f9a9ea 100755
--- a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/BasicResourceReferenceMapper.java
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/BasicResourceReferenceMapper.java
@@ -24,6 +24,7 @@ import org.apache.wicket.request.IRequestHandler;
 import org.apache.wicket.request.Request;
 import org.apache.wicket.request.Url;
 import org.apache.wicket.request.handler.resource.ResourceReferenceRequestHandler;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 import org.apache.wicket.request.mapper.parameter.IPageParametersEncoder;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.request.resource.IResource;
@@ -90,7 +91,7 @@ public class BasicResourceReferenceMapper extends AbstractResourceReferenceMappe
 			final int segmentsSize = url.getSegments().size();
 
 			// extract the PageParameters from URL if there are any
-			PageParameters pageParameters = extractPageParameters(request, segmentsSize,
+			IPageParameters pageParameters = extractPageParameters(request, segmentsSize,
 					pageParametersEncoder);
 
 			String className = url.getSegments().get(2);
@@ -199,7 +200,7 @@ public class BasicResourceReferenceMapper extends AbstractResourceReferenceMappe
 			segments.add(getClassName(reference.getScope()));
 
 			// setup resource parameters
-			PageParameters parameters = referenceRequestHandler.getPageParameters();
+			IPageParameters parameters = referenceRequestHandler.getPageParameters();
 
 			if (parameters == null)
 			{
@@ -210,7 +211,7 @@ public class BasicResourceReferenceMapper extends AbstractResourceReferenceMappe
 				parameters = new PageParameters(parameters);
 
 				// need to remove indexed parameters otherwise the URL won't be able to decode
-				parameters.clearIndexed();
+				parameters.mutable().clearIndexed();
 			}
 			encodeResourceReferenceAttributes(url, reference);
 
@@ -234,7 +235,7 @@ public class BasicResourceReferenceMapper extends AbstractResourceReferenceMappe
 						if(cacheable.isCachingEnabled())
 						{
 							// apply caching scheme to resource url
-							final ResourceUrl resourceUrl = new ResourceUrl(token, parameters);
+							final ResourceUrl resourceUrl = new ResourceUrl(token, parameters.mutable());
 							getCachingStrategy().decorateUrl(resourceUrl, cacheable);
 							token = resourceUrl.getFileName();
 	

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/BookmarkableMapper.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/BookmarkableMapper.java b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/BookmarkableMapper.java
index b1418bf..9f37f35 100644
--- a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/BookmarkableMapper.java
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/BookmarkableMapper.java
@@ -23,8 +23,8 @@ import org.apache.wicket.request.Request;
 import org.apache.wicket.request.Url;
 import org.apache.wicket.request.component.IRequestablePage;
 import org.apache.wicket.request.mapper.info.PageComponentInfo;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 import org.apache.wicket.request.mapper.parameter.IPageParametersEncoder;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.request.mapper.parameter.PageParametersEncoder;
 import org.apache.wicket.util.lang.Args;
 
@@ -126,7 +126,7 @@ public class BookmarkableMapper extends AbstractBookmarkableMapper
 				}
 
 				// extract the PageParameters from URL if there are any
-				PageParameters pageParameters = extractPageParameters(request, 3,
+				IPageParameters pageParameters = extractPageParameters(request, 3,
 					pageParametersEncoder);
 
 				return new UrlInfo(info, pageClass, pageParameters);

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/IPageSource.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/IPageSource.java b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/IPageSource.java
index 3738551..dcea504 100644
--- a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/IPageSource.java
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/IPageSource.java
@@ -17,7 +17,7 @@
 package org.apache.wicket.core.request.mapper;
 
 import org.apache.wicket.request.component.IRequestablePage;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 
 /**
  * Interface for objects that are capable of getting and creating page instance.
@@ -44,6 +44,6 @@ public interface IPageSource
 	 * @return new page instance
 	 */
 	IRequestablePage newPageInstance(Class<? extends IRequestablePage> pageClass,
-		PageParameters pageParameters);
+		IPageParameters pageParameters);
 
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/MountedMapper.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/MountedMapper.java b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/MountedMapper.java
index 17e9af3..7f8bddb 100644
--- a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/MountedMapper.java
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/MountedMapper.java
@@ -29,6 +29,7 @@ import org.apache.wicket.request.component.IRequestablePage;
 import org.apache.wicket.request.mapper.info.ComponentInfo;
 import org.apache.wicket.request.mapper.info.PageComponentInfo;
 import org.apache.wicket.request.mapper.info.PageInfo;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 import org.apache.wicket.request.mapper.parameter.IPageParametersEncoder;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.request.mapper.parameter.PageParametersEncoder;
@@ -280,7 +281,7 @@ public class MountedMapper extends AbstractBookmarkableMapper
 			// try to extract page and component information from URL
 			PageComponentInfo info = getPageComponentInfo(url);
 			Class<? extends IRequestablePage> pageClass = getPageClass();
-			PageParameters pageParameters = extractPageParameters(request, url);
+			IPageParameters pageParameters = extractPageParameters(request, url);
 
 			return new UrlInfo(info, pageClass, pageParameters);
 		}
@@ -293,13 +294,13 @@ public class MountedMapper extends AbstractBookmarkableMapper
 	/*
 	 * extract the PageParameters from URL if there are any
 	 */
-	private PageParameters extractPageParameters(Request request, Url url)
+	private IPageParameters extractPageParameters(Request request, Url url)
 	{
 		int[] matchedParameters = getMatchedSegmentSizes(url);
 		int total = 0;
 		for (int curMatchSize : matchedParameters)
 			total += curMatchSize;
-		PageParameters pageParameters = extractPageParameters(request, total, pageParametersEncoder);
+		IPageParameters pageParameters = extractPageParameters(request, total, pageParametersEncoder);
 
 		int skippedParameters = 0;
 		for (int pathSegmentIndex = 0; pathSegmentIndex < pathSegments.size(); pathSegmentIndex++)
@@ -321,12 +322,12 @@ public class MountedMapper extends AbstractBookmarkableMapper
 				// extract the parameter from URL
 				if (placeholder != null)
 				{
-					pageParameters.add(placeholder,
+					pageParameters.mutable().add(placeholder,
 						url.getSegments().get(curSegmentIndex - skippedParameters));
 				}
 				else if (optionalPlaceholder != null && optionalParameterMatch > 0)
 				{
-					pageParameters.add(optionalPlaceholder,
+					pageParameters.mutable().add(optionalPlaceholder,
 						url.getSegments().get(curSegmentIndex - skippedParameters));
 					optionalParameterMatch--;
 				}

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/PackageMapper.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/PackageMapper.java b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/PackageMapper.java
index 54729e9..dc5f12e 100644
--- a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/PackageMapper.java
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/PackageMapper.java
@@ -23,8 +23,8 @@ import org.apache.wicket.request.Request;
 import org.apache.wicket.request.Url;
 import org.apache.wicket.request.component.IRequestablePage;
 import org.apache.wicket.request.mapper.info.PageComponentInfo;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 import org.apache.wicket.request.mapper.parameter.IPageParametersEncoder;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.request.mapper.parameter.PageParametersEncoder;
 import org.apache.wicket.util.lang.Args;
 import org.apache.wicket.util.lang.PackageName;
@@ -151,7 +151,7 @@ public class PackageMapper extends AbstractBookmarkableMapper
 				IRequestablePage.class.isAssignableFrom(pageClass))
 			{
 				// extract the PageParameters from URL if there are any
-				PageParameters pageParameters = extractPageParameters(request, 1,
+				IPageParameters pageParameters = extractPageParameters(request, 1,
 					pageParametersEncoder);
 
 				return new UrlInfo(info, pageClass, pageParameters);

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/ResourceMapper.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/ResourceMapper.java b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/ResourceMapper.java
index 3455ec5..8d31de6 100644
--- a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/ResourceMapper.java
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/ResourceMapper.java
@@ -25,6 +25,7 @@ import org.apache.wicket.request.Request;
 import org.apache.wicket.request.Url;
 import org.apache.wicket.request.handler.resource.ResourceReferenceRequestHandler;
 import org.apache.wicket.request.mapper.AbstractMapper;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 import org.apache.wicket.request.mapper.parameter.IPageParametersEncoder;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.request.mapper.parameter.PageParametersEncoder;
@@ -121,7 +122,7 @@ public class ResourceMapper extends AbstractMapper implements IRequestMapper
 		final Url url = new Url(request.getUrl());
 
 		// now extract the page parameters from the request url
-		PageParameters parameters = extractPageParameters(request, mountSegments.length,
+		IPageParameters parameters = extractPageParameters(request, mountSegments.length,
 			parametersEncoder);
 
 		// remove caching information from current request
@@ -145,7 +146,7 @@ public class ResourceMapper extends AbstractMapper implements IRequestMapper
 				{
 					parameters = new PageParameters();
 				}
-				parameters.add(placeholder, url.getSegments().get(index));
+				parameters.mutable().add(placeholder, url.getSegments().get(index));
 			}
 		}
 		return new ResourceReferenceRequestHandler(resourceReference, parameters);
@@ -238,7 +239,7 @@ public class ResourceMapper extends AbstractMapper implements IRequestMapper
 		}
 	}
 
-	protected void removeCachingDecoration(Url url, PageParameters parameters)
+	protected void removeCachingDecoration(Url url, IPageParameters parameters)
 	{
 		final List<String> segments = url.getSegments();
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/main/java/org/apache/wicket/markup/html/form/StatelessForm.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/StatelessForm.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/StatelessForm.java
index e8d302d..9b6681c 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/StatelessForm.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/StatelessForm.java
@@ -21,6 +21,7 @@ import java.util.List;
 
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.request.mapper.parameter.INamedParameters;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.util.string.Strings;
 import org.apache.wicket.util.visit.IVisit;
@@ -91,12 +92,14 @@ public class StatelessForm<T> extends Form<T>
 	{
 		// get the parameters before processing the form because the
 		// application may remove this form from its parent in #onSubmit() (WICKET-5158)
-		final PageParameters parameters = getPage().getPageParameters();
+		final IPageParameters params = getPage().getPageParameters();
 
 		super.process(submittingComponent);
 
-		if (parameters != null)
+		if (params != null)
 		{
+			final PageParameters parameters = params.mutable();
+
 			visitFormComponents(new IVisitor<FormComponent<?>, Void>()
 			{
 				@Override

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/main/java/org/apache/wicket/request/component/IRequestablePage.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/component/IRequestablePage.java b/wicket-core/src/main/java/org/apache/wicket/request/component/IRequestablePage.java
index c361502..0f1438f 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/component/IRequestablePage.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/component/IRequestablePage.java
@@ -17,6 +17,7 @@
 package org.apache.wicket.request.component;
 
 import org.apache.wicket.page.IManageablePage;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 
 
@@ -71,5 +72,5 @@ public interface IRequestablePage extends IRequestableComponent, IManageablePage
 	 * 
 	 * @return page parameters or <code>null</code>
 	 */
-	public PageParameters getPageParameters();
+	public IPageParameters getPageParameters();
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java b/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java
index b8eb565..698e601 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java
@@ -42,6 +42,7 @@ import org.apache.wicket.request.UrlRenderer;
 import org.apache.wicket.request.component.IRequestablePage;
 import org.apache.wicket.request.handler.resource.ResourceReferenceRequestHandler;
 import org.apache.wicket.request.handler.resource.ResourceRequestHandler;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.request.resource.IResource;
 import org.apache.wicket.request.resource.ResourceReference;
@@ -434,7 +435,7 @@ public class RequestCycle implements IRequestCycle, IEventSink
 	 * <p>
 	 * <strong>Note</strong>: The produced URL is relative to the filter path. Application code most
 	 * probably need URL relative to the currently used page, for this use
-	 * {@linkplain #urlFor(org.apache.wicket.request.resource.ResourceReference, org.apache.wicket.request.mapper.parameter.PageParameters)}
+	 * {@linkplain #urlFor(org.apache.wicket.request.resource.ResourceReference, org.apache.wicket.request.mapper.parameter.IPageParameters)}
 	 * </p>
 	 * 
 	 * @param reference
@@ -455,7 +456,7 @@ public class RequestCycle implements IRequestCycle, IEventSink
 	 * <p>
 	 * <strong>Note</strong>: The produced URL is relative to the filter path. Application code most
 	 * probably need URL relative to the currently used page, for this use
-	 * {@linkplain #urlFor(Class, org.apache.wicket.request.mapper.parameter.PageParameters)}
+	 * {@linkplain #urlFor(Class, org.apache.wicket.request.mapper.parameter.IPageParameters)}
 	 * </p>
 	 * 
 	 * @param <C>
@@ -483,7 +484,7 @@ public class RequestCycle implements IRequestCycle, IEventSink
 	 *            parameters for the resource or {@code null} if none
 	 * @return {@link Url} for the reference
 	 */
-	public final CharSequence urlFor(ResourceReference reference, PageParameters params)
+	public final CharSequence urlFor(ResourceReference reference, IPageParameters params)
 	{
 		ResourceReferenceRequestHandler handler = new ResourceReferenceRequestHandler(reference,
 			params);
@@ -504,7 +505,7 @@ public class RequestCycle implements IRequestCycle, IEventSink
 	 * @return Bookmarkable URL to page
 	 */
 	public final <C extends Page> CharSequence urlFor(final Class<C> pageClass,
-		final PageParameters parameters)
+		final IPageParameters parameters)
 	{
 		IRequestHandler handler = new BookmarkablePageRequestHandler(new PageProvider(pageClass,
 			parameters));
@@ -681,7 +682,7 @@ public class RequestCycle implements IRequestCycle, IEventSink
 	 * @param parameters
 	 */
 	public void setResponsePage(Class<? extends IRequestablePage> pageClass,
-		PageParameters parameters)
+		IPageParameters parameters)
 	{
 		IPageProvider provider = new PageProvider(pageClass, parameters);
 		scheduleRequestHandlerAfterCurrent(new RenderPageRequestHandler(provider,

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/main/java/org/apache/wicket/request/handler/resource/ResourceReferenceRequestHandler.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/handler/resource/ResourceReferenceRequestHandler.java b/wicket-core/src/main/java/org/apache/wicket/request/handler/resource/ResourceReferenceRequestHandler.java
index f09382e..b00856b 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/handler/resource/ResourceReferenceRequestHandler.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/handler/resource/ResourceReferenceRequestHandler.java
@@ -18,10 +18,11 @@ package org.apache.wicket.request.handler.resource;
 
 import java.util.Locale;
 
+import org.apache.wicket.core.request.handler.logger.ResourceReferenceLogData;
 import org.apache.wicket.request.ILoggableRequestHandler;
 import org.apache.wicket.request.IRequestCycle;
 import org.apache.wicket.request.IRequestHandler;
-import org.apache.wicket.core.request.handler.logger.ResourceReferenceLogData;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.request.resource.IResource;
 import org.apache.wicket.request.resource.ResourceReference;
@@ -36,7 +37,7 @@ public class ResourceReferenceRequestHandler implements IRequestHandler, ILoggab
 {
 	private final ResourceReference resourceReference;
 
-	private final PageParameters pageParameters;
+	private final IPageParameters pageParameters;
 
 	private ResourceReferenceLogData logData;
 
@@ -57,7 +58,7 @@ public class ResourceReferenceRequestHandler implements IRequestHandler, ILoggab
 	 * @param pageParameters
 	 */
 	public ResourceReferenceRequestHandler(ResourceReference resourceReference,
-		PageParameters pageParameters)
+		IPageParameters pageParameters)
 	{
 		Args.notNull(resourceReference, "resourceReference");
 
@@ -76,7 +77,7 @@ public class ResourceReferenceRequestHandler implements IRequestHandler, ILoggab
 	/**
 	 * @return page parameters
 	 */
-	public PageParameters getPageParameters()
+	public IPageParameters getPageParameters()
 	{
 		return pageParameters;
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/main/java/org/apache/wicket/request/handler/resource/ResourceRequestHandler.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/handler/resource/ResourceRequestHandler.java b/wicket-core/src/main/java/org/apache/wicket/request/handler/resource/ResourceRequestHandler.java
index 09537e2..a6d0d97 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/handler/resource/ResourceRequestHandler.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/handler/resource/ResourceRequestHandler.java
@@ -18,6 +18,7 @@ package org.apache.wicket.request.handler.resource;
 
 import org.apache.wicket.request.IRequestCycle;
 import org.apache.wicket.request.IRequestHandler;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.request.resource.IResource;
 import org.apache.wicket.util.lang.Args;
@@ -30,7 +31,7 @@ import org.apache.wicket.util.lang.Args;
 public class ResourceRequestHandler implements IRequestHandler
 {
 	private final IResource resource;
-	private final PageParameters pageParameters;
+	private final IPageParameters pageParameters;
 
 	/**
 	 * Construct.
@@ -38,7 +39,7 @@ public class ResourceRequestHandler implements IRequestHandler
 	 * @param resource
 	 * @param pageParameters
 	 */
-	public ResourceRequestHandler(IResource resource, PageParameters pageParameters)
+	public ResourceRequestHandler(IResource resource, IPageParameters pageParameters)
 	{
 		Args.notNull(resource, "resource");
 
@@ -51,7 +52,7 @@ public class ResourceRequestHandler implements IRequestHandler
 	/**
 	 * @return page parameters
 	 */
-	public PageParameters getPageParameters()
+	public IPageParameters getPageParameters()
 	{
 		return pageParameters;
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/main/java/org/apache/wicket/request/resource/IResource.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/IResource.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/IResource.java
index 26eaebb..4a50ebe 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/resource/IResource.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/IResource.java
@@ -19,7 +19,7 @@ package org.apache.wicket.request.resource;
 import org.apache.wicket.request.Request;
 import org.apache.wicket.request.Response;
 import org.apache.wicket.request.handler.resource.ResourceRequestHandler;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 import org.apache.wicket.util.io.IClusterable;
 import org.apache.wicket.util.lang.Args;
 
@@ -40,7 +40,7 @@ public interface IResource extends IClusterable
 	{
 		private final Request request;
 		private final Response response;
-		private final PageParameters parameters;
+		private final IPageParameters parameters;
 
 		/**
 		 * Construct.
@@ -50,7 +50,7 @@ public interface IResource extends IClusterable
 		 * @param response
 		 * @param parameters
 		 */
-		public Attributes(Request request, Response response, PageParameters parameters)
+		public Attributes(Request request, Response response, IPageParameters parameters)
 		{
 			Args.notNull(request, "request");
 			Args.notNull(response, "response");
@@ -100,7 +100,7 @@ public interface IResource extends IClusterable
 		 * 
 		 * @return page parameters or <code>null</code>
 		 */
-		public PageParameters getParameters()
+		public IPageParameters getParameters()
 		{
 			return parameters;
 		}

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/QueryStringWithVersionResourceCachingStrategy.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/QueryStringWithVersionResourceCachingStrategy.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/QueryStringWithVersionResourceCachingStrategy.java
index 34826f8..216baab 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/QueryStringWithVersionResourceCachingStrategy.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/QueryStringWithVersionResourceCachingStrategy.java
@@ -17,7 +17,7 @@
 package org.apache.wicket.request.resource.caching;
 
 import org.apache.wicket.request.http.WebResponse;
-import org.apache.wicket.request.mapper.parameter.INamedParameters;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 import org.apache.wicket.request.resource.AbstractResource;
 import org.apache.wicket.request.resource.caching.version.IResourceVersion;
 import org.apache.wicket.util.lang.Args;
@@ -98,18 +98,18 @@ public class QueryStringWithVersionResourceCachingStrategy implements IResourceC
 
 		if (version != null)
 		{
-			url.getParameters().set(versionParameter, version);
+			url.getParameters().mutable().set(versionParameter, version);
 		}
 	}
 
 	@Override
 	public void undecorateUrl(ResourceUrl url)
 	{
-		final INamedParameters parameters = url.getParameters();
+		final IPageParameters parameters = url.getParameters();
 		
 		if (parameters != null)
 		{
-			parameters.remove(versionParameter);
+			parameters.mutable().remove(versionParameter);
 		}
 	}
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/ResourceUrl.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/ResourceUrl.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/ResourceUrl.java
index a1a3ef5..45e58b7 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/ResourceUrl.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/ResourceUrl.java
@@ -16,7 +16,7 @@
  */
 package org.apache.wicket.request.resource.caching;
 
-import org.apache.wicket.request.mapper.parameter.INamedParameters;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 
 /**
  * Url view given to the {@link IResourceCachingStrategy} to manipulate
@@ -26,7 +26,7 @@ import org.apache.wicket.request.mapper.parameter.INamedParameters;
 public class ResourceUrl
 {
 	private String fileName;
-	private INamedParameters parameters;
+	private IPageParameters parameters;
 
 	/**
 	 * Constructor
@@ -36,7 +36,7 @@ public class ResourceUrl
 	 * @param urlParameters
 	 *            query string parameters
 	 */
-	public ResourceUrl(String fileName, INamedParameters urlParameters)
+	public ResourceUrl(String fileName, IPageParameters urlParameters)
 	{
 		this.fileName = fileName;
 		parameters = urlParameters;
@@ -62,7 +62,7 @@ public class ResourceUrl
 	/**
 	 * @return query string parameters
 	 */
-	public INamedParameters getParameters()
+	public IPageParameters getParameters()
 	{
 		return parameters;
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/main/java/org/apache/wicket/session/DefaultPageFactory.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/session/DefaultPageFactory.java b/wicket-core/src/main/java/org/apache/wicket/session/DefaultPageFactory.java
index 5d8d29f..f8e0220 100644
--- a/wicket-core/src/main/java/org/apache/wicket/session/DefaultPageFactory.java
+++ b/wicket-core/src/main/java/org/apache/wicket/session/DefaultPageFactory.java
@@ -27,6 +27,7 @@ import org.apache.wicket.authorization.AuthorizationException;
 import org.apache.wicket.markup.MarkupException;
 import org.apache.wicket.request.RequestHandlerStack.ReplaceHandlerException;
 import org.apache.wicket.request.component.IRequestablePage;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.util.lang.Generics;
 import org.slf4j.Logger;
@@ -84,7 +85,7 @@ public final class DefaultPageFactory implements IPageFactory
 
 	@Override
 	public final <C extends IRequestablePage> C newPage(final Class<C> pageClass,
-		final PageParameters parameters)
+		final IPageParameters parameters)
 	{
 		// Try to get constructor that takes PageParameters
 		Constructor<C> constructor = constructor(pageClass, PageParameters.class);
@@ -92,7 +93,7 @@ public final class DefaultPageFactory implements IPageFactory
 		// If we got a PageParameters constructor
 		if (constructor != null)
 		{
-			final PageParameters nullSafeParams = parameters == null ? new PageParameters() : parameters;
+			final IPageParameters nullSafeParams = parameters == null ? new PageParameters() : parameters;
 
 			// return new Page(parameters)
 			return processPage(newPage(constructor, nullSafeParams), nullSafeParams);
@@ -113,7 +114,7 @@ public final class DefaultPageFactory implements IPageFactory
 	 *         argument type.
 	 */
 	private <C extends IRequestablePage> Constructor<C> constructor(final Class<C> pageClass,
-		final Class<PageParameters> argumentType)
+		final Class<? extends IPageParameters> argumentType)
 	{
 		// Get constructor for page class from cache
 		Constructor<C> constructor = (Constructor<C>) constructorForClass.get(pageClass);
@@ -161,7 +162,7 @@ public final class DefaultPageFactory implements IPageFactory
 	 *             Thrown if the Page cannot be instantiated using the given constructor and
 	 *             argument.
 	 */
-	private <C extends IRequestablePage> C newPage(final Constructor<C> constructor, final PageParameters argument)
+	private <C extends IRequestablePage> C newPage(final Constructor<C> constructor, final IPageParameters argument)
 	{
 		try
 		{
@@ -194,13 +195,13 @@ public final class DefaultPageFactory implements IPageFactory
 		}
 	}
 
-	private <C extends IRequestablePage> C processPage(final C page, final PageParameters pageParameters)
+	private <C extends IRequestablePage> C processPage(final C page, final IPageParameters pageParameters)
 	{
 		// the page might have not propagate page parameters from constructor. if that's the case
 		// we force the parameters
 		if ((pageParameters != null) && (page.getPageParameters() != pageParameters))
 		{
-			page.getPageParameters().overwriteWith(pageParameters);
+			page.getPageParameters().mutable().overwriteWith(pageParameters);
 		}
 
 		((Page)page).setWasCreatedBookmarkable(true);

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/test/java/org/apache/wicket/MockPage.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/MockPage.java b/wicket-core/src/test/java/org/apache/wicket/MockPage.java
index 4a31fbf..2ba98c9 100644
--- a/wicket-core/src/test/java/org/apache/wicket/MockPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/MockPage.java
@@ -17,6 +17,7 @@
 package org.apache.wicket;
 
 import org.apache.wicket.request.component.IRequestablePage;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 
 /**
@@ -76,7 +77,7 @@ public class MockPage extends MockComponent implements IRequestablePage
 	private final PageParameters pageParameters = new PageParameters();
 
 	@Override
-	public PageParameters getPageParameters()
+	public IPageParameters getPageParameters()
 	{
 		return pageParameters;
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapperTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapperTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapperTest.java
index 2c17c09..83585cb 100644
--- a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapperTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapperTest.java
@@ -19,12 +19,9 @@ package org.apache.wicket.core.request.mapper;
 import org.apache.wicket.MockPage;
 import org.apache.wicket.WicketTestCase;
 import org.apache.wicket.protocol.http.PageExpiredException;
-import org.apache.wicket.request.IRequestHandler;
 import org.apache.wicket.request.Request;
 import org.apache.wicket.request.Url;
-import org.apache.wicket.request.component.IRequestablePage;
 import org.apache.wicket.request.mapper.info.PageInfo;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -77,15 +74,6 @@ public class AbstractBookmarkableMapperTest extends WicketTestCase
 		{
 			return 0;
 		}
-
-		@Override
-		protected IRequestHandler processHybrid(PageInfo pageInfo,
-			Class<? extends IRequestablePage> pageClass, PageParameters pageParameters,
-			Integer renderCount)
-		{
-			return super.processHybrid(pageInfo, pageClass, pageParameters, renderCount);
-		}
-
 	}
 
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/BasicResourceReferenceMapperTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/BasicResourceReferenceMapperTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/BasicResourceReferenceMapperTest.java
index 7dcf36e..f9dccdf 100644
--- a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/BasicResourceReferenceMapperTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/BasicResourceReferenceMapperTest.java
@@ -22,11 +22,9 @@ import java.util.Locale;
 import org.apache.wicket.request.IRequestHandler;
 import org.apache.wicket.request.Url;
 import org.apache.wicket.request.handler.resource.ResourceReferenceRequestHandler;
-import org.apache.wicket.request.mapper.parameter.INamedParameters;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.request.mapper.parameter.PageParametersEncoder;
-import org.apache.wicket.request.resource.IResource;
-import org.apache.wicket.request.resource.ResourceReference;
 import org.apache.wicket.request.resource.caching.FilenameWithVersionResourceCachingStrategy;
 import org.apache.wicket.request.resource.caching.IResourceCachingStrategy;
 import org.apache.wicket.request.resource.caching.IStaticCacheableResource;
@@ -44,7 +42,7 @@ import org.junit.Test;
  */
 public class BasicResourceReferenceMapperTest extends AbstractResourceReferenceMapperTest
 {
-	private static final IProvider<IResourceCachingStrategy> NO_CACHING = new ValueProvider<IResourceCachingStrategy>(
+	private static final IProvider<IResourceCachingStrategy> NO_CACHING = new ValueProvider<>(
 		NoOpResourceCachingStrategy.INSTANCE);
 
 	private final BasicResourceReferenceMapper encoder = new BasicResourceReferenceMapper(
@@ -485,22 +483,10 @@ public class BasicResourceReferenceMapperTest extends AbstractResourceReferenceM
 			}
 		};
 
-		final ResourceReference reference = new ResourceReference(getClass(), "versioned",
-			Locale.ENGLISH, "style", null)
-		{
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			public IResource getResource()
-			{
-				return resource;
-			}
-		};
-
 		IResourceCachingStrategy strategy = new FilenameWithVersionResourceCachingStrategy(
 			"-version-", new StaticResourceVersion("foobar"));
 
-		INamedParameters params = new PageParameters();
+		IPageParameters params = new PageParameters();
 		ResourceUrl url = new ResourceUrl("test.js", params);
 		strategy.decorateUrl(url, resource);
 		assertEquals("test-version-foobar.js", url.getFileName());

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/BookmarkableMapperTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/BookmarkableMapperTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/BookmarkableMapperTest.java
index af91e93..1ef1003 100644
--- a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/BookmarkableMapperTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/BookmarkableMapperTest.java
@@ -18,11 +18,6 @@ package org.apache.wicket.core.request.mapper;
 
 import org.apache.wicket.MockPage;
 import org.apache.wicket.core.request.handler.BookmarkableListenerInterfaceRequestHandler;
-import org.apache.wicket.markup.html.link.ILinkListener;
-import org.apache.wicket.request.IRequestHandler;
-import org.apache.wicket.request.Url;
-import org.apache.wicket.request.component.IRequestableComponent;
-import org.apache.wicket.request.component.IRequestablePage;
 import org.apache.wicket.core.request.handler.BookmarkablePageRequestHandler;
 import org.apache.wicket.core.request.handler.IPageProvider;
 import org.apache.wicket.core.request.handler.IPageRequestHandler;
@@ -30,6 +25,12 @@ import org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler;
 import org.apache.wicket.core.request.handler.PageAndComponentProvider;
 import org.apache.wicket.core.request.handler.PageProvider;
 import org.apache.wicket.core.request.handler.RenderPageRequestHandler;
+import org.apache.wicket.markup.html.link.ILinkListener;
+import org.apache.wicket.request.IRequestHandler;
+import org.apache.wicket.request.Url;
+import org.apache.wicket.request.component.IRequestableComponent;
+import org.apache.wicket.request.component.IRequestablePage;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.junit.Test;
 
@@ -79,7 +80,7 @@ public class BookmarkableMapperTest extends AbstractMapperTest
 		IRequestablePage page = ((RenderPageRequestHandler)handler).getPage();
 		assertEquals(PAGE_CLASS_NAME, page.getClass().getName());
 
-		PageParameters p = page.getPageParameters();
+		IPageParameters p = page.getPageParameters();
 		assertEquals(1, p.getIndexedCount());
 		assertEquals("indexed1", p.get(0).toString());
 
@@ -115,7 +116,7 @@ public class BookmarkableMapperTest extends AbstractMapperTest
 		IRequestablePage page = ((RenderPageRequestHandler)handler).getPage();
 		checkPage(page, 15);
 
-		PageParameters p = page.getPageParameters();
+		IPageParameters p = page.getPageParameters();
 		assertEquals(0, p.getIndexedCount());
 
 		assertEquals(0, p.getNamedKeys().size());
@@ -161,7 +162,7 @@ public class BookmarkableMapperTest extends AbstractMapperTest
 		assertEquals(ILinkListener.INTERFACE, h.getListenerInterface());
 		assertEquals("foo:bar", h.getComponent().getPageRelativePath());
 
-		PageParameters p = page.getPageParameters();
+		IPageParameters p = page.getPageParameters();
 		assertEquals(0, p.getIndexedCount());
 
 		assertEquals(0, p.getNamedKeys().size());
@@ -295,10 +296,11 @@ public class BookmarkableMapperTest extends AbstractMapperTest
 	public void encode4()
 	{
 		MockPage page = new MockPage(15);
-		page.getPageParameters().set(0, "i1");
-		page.getPageParameters().set(1, "i2");
-		page.getPageParameters().set("a", "b");
-		page.getPageParameters().set("b", "c");
+		PageParameters pageParameters = page.getPageParameters().mutable();
+		pageParameters.set(0, "i1");
+		pageParameters.set(1, "i2");
+		pageParameters.set("a", "b");
+		pageParameters.set("b", "c");
 		page.setCreatedBookmarkable(true);
 
 		IPageProvider provider = new PageProvider(page);
@@ -315,10 +317,11 @@ public class BookmarkableMapperTest extends AbstractMapperTest
 	public void encode5()
 	{
 		MockPage page = new MockPage(15);
-		page.getPageParameters().set(0, "i1");
-		page.getPageParameters().set(1, "i2");
-		page.getPageParameters().set("a", "b");
-		page.getPageParameters().set("b", "c");
+		PageParameters pageParameters = page.getPageParameters().mutable();
+		pageParameters.set(0, "i1");
+		pageParameters.set(1, "i2");
+		pageParameters.set("a", "b");
+		pageParameters.set("b", "c");
 
 		page.setCreatedBookmarkable(false);
 
@@ -339,10 +342,11 @@ public class BookmarkableMapperTest extends AbstractMapperTest
 	public void encode6()
 	{
 		MockPage page = new MockPage(15);
-		page.getPageParameters().set(0, "i1");
-		page.getPageParameters().set(1, "i2");
-		page.getPageParameters().set("a", "b");
-		page.getPageParameters().set("b", "c");
+		PageParameters pageParameters = page.getPageParameters().mutable();
+		pageParameters.set(0, "i1");
+		pageParameters.set(1, "i2");
+		pageParameters.set("a", "b");
+		pageParameters.set("b", "c");
 
 		// shouldn't make any difference for BookmarkableListenerInterfaceRequestHandler,
 		// as this explicitely says the url must be bookmarkable
@@ -367,10 +371,11 @@ public class BookmarkableMapperTest extends AbstractMapperTest
 	public void encode7()
 	{
 		MockPage page = new MockPage(15);
-		page.getPageParameters().set(0, "i1");
-		page.getPageParameters().set(1, "i2");
-		page.getPageParameters().set("a", "b");
-		page.getPageParameters().set("b", "c");
+		PageParameters pageParameters = page.getPageParameters().mutable();
+		pageParameters.set(0, "i1");
+		pageParameters.set(1, "i2");
+		pageParameters.set("a", "b");
+		pageParameters.set("b", "c");
 
 		// shouldn't make any difference for BookmarkableListenerInterfaceRequestHandler,
 		// as this explicitely says the url must be bookmarkable

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/CryptoMapperTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/CryptoMapperTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/CryptoMapperTest.java
index 2c0577c..82a96da 100644
--- a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/CryptoMapperTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/CryptoMapperTest.java
@@ -29,6 +29,7 @@ import org.apache.wicket.request.Request;
 import org.apache.wicket.request.Url;
 import org.apache.wicket.request.component.IRequestableComponent;
 import org.apache.wicket.request.handler.resource.ResourceReferenceRequestHandler;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.request.resource.PackageResourceReference;
 import org.apache.wicket.util.string.StringValue;
@@ -170,7 +171,7 @@ public class CryptoMapperTest extends AbstractMapperTest
 
 		RenderPageRequestHandler handler = (RenderPageRequestHandler)requestHandler;
 		assertEquals(DummyHomePage.class, handler.getPageClass());
-		PageParameters actualParameters = handler.getPageParameters();
+		IPageParameters actualParameters = handler.getPageParameters();
 		assertEquals(expectedParameters, actualParameters);
 	}
 
@@ -198,7 +199,7 @@ public class CryptoMapperTest extends AbstractMapperTest
 
 		RenderPageRequestHandler handler = (RenderPageRequestHandler)requestHandler;
 		assertEquals(tester.getApplication().getHomePage(), handler.getPageClass());
-		PageParameters actualParameters = handler.getPageParameters();
+		IPageParameters actualParameters = handler.getPageParameters();
 		assertEquals(expectedParameters, actualParameters);
 	}
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/665a3e80/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/MountedMapperTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/MountedMapperTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/MountedMapperTest.java
index 3815361..aefeaa9 100644
--- a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/MountedMapperTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/MountedMapperTest.java
@@ -32,6 +32,7 @@ import org.apache.wicket.request.Url;
 import org.apache.wicket.request.component.IRequestableComponent;
 import org.apache.wicket.request.component.IRequestablePage;
 import org.apache.wicket.request.http.WebRequest;
+import org.apache.wicket.request.mapper.parameter.IPageParameters;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.junit.Test;
 
@@ -123,7 +124,7 @@ public class MountedMapperTest extends AbstractMapperTest
 		assertTrue(handler instanceof RenderPageRequestHandler);
 		IRequestablePage page = ((RenderPageRequestHandler)handler).getPage();
 
-		PageParameters p = page.getPageParameters();
+		IPageParameters p = page.getPageParameters();
 		assertEquals(1, p.getIndexedCount());
 		assertEquals("indexed1", p.get(0).toString());
 
@@ -159,7 +160,7 @@ public class MountedMapperTest extends AbstractMapperTest
 		IRequestablePage page = ((RenderPageRequestHandler)handler).getPage();
 		checkPage(page, 15);
 
-		PageParameters p = page.getPageParameters();
+		IPageParameters p = page.getPageParameters();
 		assertEquals(0, p.getIndexedCount());
 
 		assertEquals(0, p.getNamedKeys().size());
@@ -204,7 +205,7 @@ public class MountedMapperTest extends AbstractMapperTest
 		assertEquals(ILinkListener.INTERFACE, h.getListenerInterface());
 		assertEquals("foo:bar", h.getComponent().getPageRelativePath());
 
-		PageParameters p = page.getPageParameters();
+		IPageParameters p = page.getPageParameters();
 		assertEquals(0, p.getIndexedCount());
 
 		assertEquals(0, p.getNamedKeys().size());
@@ -306,7 +307,7 @@ public class MountedMapperTest extends AbstractMapperTest
 		assertEquals("foo:bar", h.getComponent().getPageRelativePath());
 		assertNull(h.getBehaviorIndex());
 
-		PageParameters p = page.getPageParameters();
+		IPageParameters p = page.getPageParameters();
 		assertEquals(2, p.getIndexedCount());
 
 		assertEquals(2, p.getNamedKeys().size());
@@ -370,10 +371,11 @@ public class MountedMapperTest extends AbstractMapperTest
 	public void encode4()
 	{
 		MockPage page = new MockPage(15);
-		page.getPageParameters().set(0, "i1");
-		page.getPageParameters().set(1, "i2");
-		page.getPageParameters().set("a", "b");
-		page.getPageParameters().set("b", "c");
+		PageParameters pageParameters = page.getPageParameters().mutable();
+		pageParameters.set(0, "i1");
+		pageParameters.set(1, "i2");
+		pageParameters.set("a", "b");
+		pageParameters.set("b", "c");
 		page.setCreatedBookmarkable(true);
 
 		IPageProvider provider = new PageProvider(page);
@@ -390,10 +392,11 @@ public class MountedMapperTest extends AbstractMapperTest
 	public void encode5()
 	{
 		MockPage page = new MockPage(15);
-		page.getPageParameters().set(0, "i1");
-		page.getPageParameters().set(1, "i2");
-		page.getPageParameters().set("a", "b");
-		page.getPageParameters().set("b", "c");
+		PageParameters pageParameters = page.getPageParameters().mutable();
+		pageParameters.set(0, "i1");
+		pageParameters.set(1, "i2");
+		pageParameters.set("a", "b");
+		pageParameters.set("b", "c");
 
 		page.setCreatedBookmarkable(false);
 
@@ -415,10 +418,11 @@ public class MountedMapperTest extends AbstractMapperTest
 	public void encode6()
 	{
 		MockPage page = new MockPage(15);
-		page.getPageParameters().set(0, "i1");
-		page.getPageParameters().set(1, "i2");
-		page.getPageParameters().set("a", "b");
-		page.getPageParameters().set("b", "c");
+		PageParameters pageParameters = page.getPageParameters().mutable();
+		pageParameters.set(0, "i1");
+		pageParameters.set(1, "i2");
+		pageParameters.set("a", "b");
+		pageParameters.set("b", "c");
 		page.setRenderCount(4);
 
 		// shouldn't make any difference for BookmarkableListenerInterfaceRequestHandler,
@@ -446,14 +450,15 @@ public class MountedMapperTest extends AbstractMapperTest
 	public void encode6_1()
 	{
 		MockPage page = new MockPage(15);
-		page.getPageParameters().set(0, "i1");
-		page.getPageParameters().set(1, "i2");
-		page.getPageParameters().set("a", "b");
-		page.getPageParameters().set("b", "c");
+		PageParameters pageParameters = page.getPageParameters().mutable();
+		pageParameters.set(0, "i1");
+		pageParameters.set(1, "i2");
+		pageParameters.set("a", "b");
+		pageParameters.set("b", "c");
 
 		// WICKET-4038
-		page.getPageParameters().add(WebRequest.PARAM_AJAX, "true");
-		page.getPageParameters().add(WebRequest.PARAM_AJAX_BASE_URL, "some/base/url");
+		pageParameters.add(WebRequest.PARAM_AJAX, "true");
+		pageParameters.add(WebRequest.PARAM_AJAX_BASE_URL, "some/base/url");
 
 		page.setRenderCount(4);
 
@@ -479,10 +484,11 @@ public class MountedMapperTest extends AbstractMapperTest
 	public void encode7()
 	{
 		MockPage page = new MockPage(15);
-		page.getPageParameters().set(0, "i1");
-		page.getPageParameters().set(1, "i2");
-		page.getPageParameters().set("a", "b");
-		page.getPageParameters().set("b", "c");
+		PageParameters pageParameters = page.getPageParameters().mutable();
+		pageParameters.set(0, "i1");
+		pageParameters.set(1, "i2");
+		pageParameters.set("a", "b");
+		pageParameters.set("b", "c");
 		page.setRenderCount(5);
 
 		// shouldn't make any difference for BookmarkableListenerInterfaceRequestHandler,
@@ -510,10 +516,11 @@ public class MountedMapperTest extends AbstractMapperTest
 	public void encode7_1()
 	{
 		MockPage page = new MockPage(15);
-		page.getPageParameters().set(0, "i1");
-		page.getPageParameters().set(1, "i2");
-		page.getPageParameters().set("a", "b");
-		page.getPageParameters().set("b", "c");
+		PageParameters pageParameters = page.getPageParameters().mutable();
+		pageParameters.set(0, "i1");
+		pageParameters.set(1, "i2");
+		pageParameters.set("a", "b");
+		pageParameters.set("b", "c");
 		page.setRenderCount(5);
 
 		// shouldn't make any difference for ListenerInterfaceRequestHandler,
@@ -599,7 +606,7 @@ public class MountedMapperTest extends AbstractMapperTest
 		assertTrue(handler instanceof RenderPageRequestHandler);
 		IRequestablePage page = ((RenderPageRequestHandler)handler).getPage();
 
-		PageParameters p = page.getPageParameters();
+		IPageParameters p = page.getPageParameters();
 		assertEquals(1, p.getIndexedCount());
 		assertEquals("indexed1", p.get(0).toString());