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 2017/07/25 19:50:01 UTC

[1/4] wicket git commit: WICKET-6419 Localization of PageParameters

Repository: wicket
Updated Branches:
  refs/heads/master 832202388 -> 04c96171e


WICKET-6419 Localization of PageParameters


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

Branch: refs/heads/master
Commit: 7697741252d9542a9686f8d745a4e8c19465be32
Parents: 3e6aa9b
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Tue Jul 18 23:04:11 2017 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Tue Jul 18 23:04:11 2017 +0200

----------------------------------------------------------------------
 .../mapper/AbstractBookmarkableMapper.java      |  48 ++++++++-
 .../mapper/BasicResourceReferenceMapper.java    |   1 +
 .../core/request/mapper/BookmarkableMapper.java |  37 +------
 .../core/request/mapper/MountedMapper.java      |  11 +-
 .../core/request/mapper/PackageMapper.java      |   3 +-
 .../core/request/mapper/ResourceMapper.java     |   7 +-
 .../org/apache/wicket/RequestEncodingTest.java  |  20 ----
 .../mapper/LocaleAwarePageParametersTest.java   | 106 +++++++++++++++++++
 .../wicket/request/mapper/AbstractMapper.java   |   8 ++
 .../mapper/parameter/PageParameters.java        |  27 ++---
 10 files changed, 186 insertions(+), 82 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/76977412/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 f12aaec8..9cc0597 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
@@ -18,8 +18,10 @@ package org.apache.wicket.core.request.mapper;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Locale;
 
 import org.apache.wicket.IRequestListener;
+import org.apache.wicket.Session;
 import org.apache.wicket.core.request.handler.BookmarkableListenerRequestHandler;
 import org.apache.wicket.core.request.handler.BookmarkablePageRequestHandler;
 import org.apache.wicket.core.request.handler.IPageRequestHandler;
@@ -34,6 +36,7 @@ import org.apache.wicket.request.IRequestHandlerDelegate;
 import org.apache.wicket.request.Request;
 import org.apache.wicket.request.Url;
 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.mapper.info.ComponentInfo;
 import org.apache.wicket.request.mapper.info.PageComponentInfo;
@@ -43,8 +46,6 @@ 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.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * Abstract encoder for Bookmarkable, Hybrid and BookmarkableListener URLs.
@@ -53,7 +54,6 @@ import org.slf4j.LoggerFactory;
  */
 public abstract class AbstractBookmarkableMapper extends AbstractComponentMapper
 {
-	private static Logger logger = LoggerFactory.getLogger(AbstractBookmarkableMapper.class);
 
 	/**
 	 * A flag that is used when comparing the mounted paths' segments against
@@ -479,6 +479,45 @@ public abstract class AbstractBookmarkableMapper extends AbstractComponentMapper
 		return new PageInfo(pageId);
 	}
 
+	/**
+	 * @return a new instance of {@link PageParameters} that will be passed to the page/resource
+	 */
+	protected PageParameters newPageParameters()
+	{
+		final PageParameters parameters = new PageParameters();
+		parameters.setLocale(resolveLocale());
+		return parameters;
+	}
+
+	/**
+	 * Override {@link #resolveLocale()} to return the result of this method if you want to use
+	 * the user's session or request locale for parsing numbers from the page parameters
+	 *
+	 * @return the Session or Request's locale to use for parsing any numbers in the request parameters
+	 */
+	protected Locale resolveUserLocale()
+	{
+		Locale locale = super.resolveLocale();
+		if (Session.exists())
+		{
+			locale = Session.get().getLocale();
+		}
+		else
+		{
+			RequestCycle requestCycle = RequestCycle.get();
+			if (requestCycle != null)
+			{
+				Request request = requestCycle.getRequest();
+				if (request != null)
+				{
+					locale = request.getLocale();
+				}
+			}
+		}
+
+		return locale;
+	}
+
 	protected static class MountPathSegment
 	{
 		private int segmentIndex;
@@ -587,6 +626,7 @@ public abstract class AbstractBookmarkableMapper extends AbstractComponentMapper
 		for (int curMatchSize : matchedParameters)
 			total += curMatchSize;
 		PageParameters pageParameters = extractPageParameters(request, total, pageParametersEncoder);
+		pageParameters.setLocale(resolveLocale());
 
 		int skippedParameters = 0;
 		for (int pathSegmentIndex = 0; pathSegmentIndex < pathSegments.size(); pathSegmentIndex++)
@@ -598,7 +638,7 @@ public abstract class AbstractBookmarkableMapper extends AbstractComponentMapper
 			{
 				if (pageParameters == null)
 				{
-					pageParameters = new PageParameters();
+					pageParameters = newPageParameters();
 				}
 
 				int curSegmentIndex = matchSegment + curPathSegment.getSegmentIndex();

http://git-wip-us.apache.org/repos/asf/wicket/blob/76977412/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 2bdc65e..aeaf81b 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
@@ -93,6 +93,7 @@ public class BasicResourceReferenceMapper extends AbstractResourceReferenceMappe
 			// extract the PageParameters from URL if there are any
 			PageParameters pageParameters = extractPageParameters(request, segmentsSize,
 					pageParametersEncoder);
+			pageParameters.setLocale(resolveLocale());
 
 			String className = url.getSegments().get(2);
 			StringBuilder name = new StringBuilder(segmentsSize * 2);

http://git-wip-us.apache.org/repos/asf/wicket/blob/76977412/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 9b301f1..5388fcb 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
@@ -19,12 +19,9 @@ package org.apache.wicket.core.request.mapper;
 import java.util.List;
 
 import org.apache.wicket.Application;
-import org.apache.wicket.request.IRequestMapper;
 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.ICompoundRequestMapper;
-import org.apache.wicket.request.mapper.IRequestMapperDelegate;
 import org.apache.wicket.request.mapper.info.PageComponentInfo;
 import org.apache.wicket.request.mapper.parameter.IPageParametersEncoder;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
@@ -126,6 +123,7 @@ public class BookmarkableMapper extends AbstractBookmarkableMapper
 				// extract the PageParameters from URL if there are any
 				PageParameters pageParameters = extractPageParameters(request, 3,
 					pageParametersEncoder);
+				pageParameters.setLocale(resolveLocale());
 
 				return new UrlInfo(info, pageClass, pageParameters);
 			}
@@ -133,39 +131,6 @@ public class BookmarkableMapper extends AbstractBookmarkableMapper
 		return null;
 	}
 
-	private boolean isPageMounted(Class<? extends IRequestablePage> pageClass, ICompoundRequestMapper compoundMapper)
-	{
-		for (IRequestMapper requestMapper : compoundMapper)
-		{
-			while (requestMapper instanceof IRequestMapperDelegate)
-			{
-				requestMapper = ((IRequestMapperDelegate)requestMapper).getDelegateMapper();
-			}
-
-			if (requestMapper instanceof ICompoundRequestMapper)
-			{
-				if (isPageMounted(pageClass, (ICompoundRequestMapper)requestMapper))
-				{
-					return true;
-				}
-			}
-			else
-			{
-				if (requestMapper instanceof AbstractBookmarkableMapper  && requestMapper != this)
-				{
-					AbstractBookmarkableMapper mapper = (AbstractBookmarkableMapper) requestMapper;
-
-					if (mapper.checkPageClass(pageClass))
-					{
-						return true;
-					}
-				}
-			}
-		}
-
-		return false;
-	}
-
 	@Override
 	protected boolean pageMustHaveBeenCreatedBookmarkable()
 	{

http://git-wip-us.apache.org/repos/asf/wicket/blob/76977412/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 d308ac1..413e866 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
@@ -148,11 +148,6 @@ public class MountedMapper extends AbstractBookmarkableMapper
 		}
 	}
 
-	protected PageParameters newPageParameters()
-	{
-		return new PageParameters();
-	}
-
 	@Override
 	public Url mapHandler(IRequestHandler requestHandler)
 	{
@@ -175,7 +170,8 @@ public class MountedMapper extends AbstractBookmarkableMapper
 				PageInfo pageInfo = getPageInfo(handler);
 				ComponentInfo componentInfo = new ComponentInfo(renderCount, componentPath, handler.getBehaviorIndex());
 				PageComponentInfo pageComponentInfo = new PageComponentInfo(pageInfo, componentInfo);
-				PageParameters parameters = new PageParameters(page.getPageParameters());
+				PageParameters parameters = newPageParameters();
+				parameters.mergeWith(page.getPageParameters());
 				UrlInfo urlInfo = new UrlInfo(pageComponentInfo, page.getClass(),
 					parameters.mergeWith(handler.getPageParameters()));
 				url = buildUrl(urlInfo);
@@ -198,7 +194,8 @@ public class MountedMapper extends AbstractBookmarkableMapper
 		}
 		encodePageComponentInfo(url, info.getPageComponentInfo());
 
-		PageParameters copy = new PageParameters(info.getPageParameters());
+		PageParameters copy = newPageParameters();
+		copy.mergeWith(info.getPageParameters());
 		if (setPlaceholders(copy, url) == false)
 		{
 			// mandatory parameter is not provided => cannot build Url

http://git-wip-us.apache.org/repos/asf/wicket/blob/76977412/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 6205e78..a5a376e 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
@@ -118,7 +118,8 @@ public class PackageMapper extends AbstractBookmarkableMapper
 			url.getSegments().add(packageRelativeClassName);
 			encodePageComponentInfo(url, info.getPageComponentInfo());
 
-			PageParameters copy = new PageParameters(info.getPageParameters());
+			PageParameters copy = newPageParameters();
+			copy.mergeWith(info.getPageParameters());
 			if (setPlaceholders(copy, url) == false)
 			{
 				// mandatory parameter is not provided => cannot build Url

http://git-wip-us.apache.org/repos/asf/wicket/blob/76977412/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 b6565be..8d8b0fa 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
@@ -126,6 +126,7 @@ public class ResourceMapper extends AbstractBookmarkableMapper
 		// now extract the page parameters from the request url
 		PageParameters parameters = extractPageParameters(request, mountSegments.length,
 			parametersEncoder);
+		parameters.setLocale(resolveLocale());
 
 		// remove caching information from current request
 		removeCachingDecoration(url, parameters);
@@ -146,7 +147,7 @@ public class ResourceMapper extends AbstractBookmarkableMapper
 				// extract the parameter from URL
 				if (parameters == null)
 				{
-					parameters = new PageParameters();
+					parameters = newPageParameters();
 				}
 				parameters.add(placeholder, url.getSegments().get(index), INamedParameters.Type.PATH);
 			}
@@ -174,6 +175,7 @@ public class ResourceMapper extends AbstractBookmarkableMapper
 	{
 		Url originalUrl = new Url(request.getUrl());
 		PageParameters parameters = extractPageParameters(request, mountSegments.length, parametersEncoder);
+		parameters.setLocale(resolveLocale());
 		removeCachingDecoration(originalUrl, parameters);
 		Request requestWithoutDecoration = request.cloneWithUrl(originalUrl);
 
@@ -214,7 +216,8 @@ public class ResourceMapper extends AbstractBookmarkableMapper
 		}
 
 		// replace placeholder parameters
-		PageParameters parameters = new PageParameters(handler.getPageParameters());
+		PageParameters parameters = newPageParameters();
+		parameters.mergeWith(handler.getPageParameters());
 
 		for (int index = 0; index < mountSegments.length; ++index)
 		{

http://git-wip-us.apache.org/repos/asf/wicket/blob/76977412/wicket-core/src/test/java/org/apache/wicket/RequestEncodingTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/RequestEncodingTest.java b/wicket-core/src/test/java/org/apache/wicket/RequestEncodingTest.java
index edfe42d..8b66dce 100644
--- a/wicket-core/src/test/java/org/apache/wicket/RequestEncodingTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/RequestEncodingTest.java
@@ -23,23 +23,13 @@ import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
-/**
- * 
- */
 public class RequestEncodingTest extends Assert
 {
-	/** Log. */
-	private static final Logger log = LoggerFactory.getLogger(RequestEncodingTest.class);
 
 	private RedirectApplication application;
 	private WicketTester tester;
 
-	/**
-	 * @see WicketTestCase#commonBefore()
-	 */
 	@Before
 	public void setUp()
 	{
@@ -49,18 +39,12 @@ public class RequestEncodingTest extends Assert
 		tester.assertRenderedPage(RedirectHomePage.class);
 	}
 
-	/**
-	 * 
-	 */
 	@After
 	public void tearDown()
 	{
 		tester.destroy();
 	}
 
-	/**
-	 * 
-	 */
 	@Test
 	public void defaultTest()
 	{
@@ -81,10 +65,6 @@ public class RequestEncodingTest extends Assert
 		assertTrue(document.contains("umlaut-\u00E4-\u00F6-\u00FC"));
 	}
 
-
-	/**
-	 * 
-	 */
 	@Test
 	public void umlautsInRequestUri()
 	{

http://git-wip-us.apache.org/repos/asf/wicket/blob/76977412/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/LocaleAwarePageParametersTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/LocaleAwarePageParametersTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/LocaleAwarePageParametersTest.java
new file mode 100644
index 0000000..01453e9
--- /dev/null
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/LocaleAwarePageParametersTest.java
@@ -0,0 +1,106 @@
+package org.apache.wicket.core.request.mapper;
+
+import static org.hamcrest.Matchers.is;
+
+import java.util.Locale;
+
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.Page;
+import org.apache.wicket.Session;
+import org.apache.wicket.markup.IMarkupResourceStreamProvider;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.mock.MockApplication;
+import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.request.Request;
+import org.apache.wicket.request.Response;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.util.resource.IResourceStream;
+import org.apache.wicket.util.resource.StringResourceStream;
+import org.apache.wicket.util.tester.WicketTestCase;
+import org.junit.Test;
+
+/**
+ * https://issues.apache.org/jira/browse/WICKET-6419
+ */
+public class LocaleAwarePageParametersTest extends WicketTestCase
+{
+	@Override
+	protected WebApplication newApplication()
+	{
+		return new MockApplication()
+		{
+			@Override
+			protected void init()
+			{
+				super.init();
+
+				mountPage("unaware", LocaleUnawarePageParametersPage.class);
+				mount(new MountedMapper("aware", LocaleAwarePageParametersPage.class)
+				      {
+					      @Override
+					      protected Locale resolveLocale()
+					      {
+						      return resolveUserLocale();
+					      }
+				      }
+				);
+			}
+
+			@Override
+			public Session newSession(Request request, Response response)
+			{
+				final Session session = super.newSession(request, response);
+				session.setLocale(Locale.GERMANY);
+				return session;
+			}
+		};
+	}
+
+	@Test
+	public void localeUnaware()
+	{
+		tester.executeUrl("unaware?number=1.234,0");
+		final Page page = tester.getLastRenderedPage();
+
+		assertThat(page.getPageParameters().get("number").toDouble(), is(1.234));
+	}
+
+	@Test
+	public void localeAware()
+	{
+		tester.executeUrl("aware?number=1.234,0");
+		final Page page = tester.getLastRenderedPage();
+
+		assertThat(page.getPageParameters().get("number").toDouble(), is(1234d));
+	}
+
+	private static class BasePage extends WebPage implements IMarkupResourceStreamProvider
+	{
+		protected BasePage(PageParameters parameters)
+		{
+			super(parameters);
+		}
+
+		@Override
+		public IResourceStream getMarkupResourceStream(MarkupContainer container, Class<?> containerClass)
+		{
+			return new StringResourceStream("<html><body>content</body></html>");
+		}
+	}
+
+	public static class LocaleUnawarePageParametersPage extends BasePage
+	{
+		public LocaleUnawarePageParametersPage(PageParameters parameters)
+		{
+			super(parameters);
+		}
+	}
+
+	public static class LocaleAwarePageParametersPage extends BasePage
+	{
+		public LocaleAwarePageParametersPage(PageParameters parameters)
+		{
+			super(parameters);
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/76977412/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 a9f7143..1fdf955 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
@@ -17,6 +17,7 @@
 package org.apache.wicket.request.mapper;
 
 import java.util.List;
+import java.util.Locale;
 
 import org.apache.wicket.request.IRequestMapper;
 import org.apache.wicket.request.Request;
@@ -251,4 +252,11 @@ public abstract class AbstractMapper implements IRequestMapper
 		return res;
 	}
 
+	/**
+	 * @return the locale to use for parsing any numbers in the request parameters
+	 */
+	protected Locale resolveLocale()
+	{
+		return Locale.getDefault(Locale.Category.DISPLAY);
+	}
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/76977412/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 c985dcb..e1ce701 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
@@ -21,6 +21,7 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Locale;
 import java.util.Set;
 import java.util.TreeSet;
 
@@ -55,6 +56,8 @@ public class PageParameters implements IClusterable, IIndexedParameters, INamedP
 
 	private List<NamedPair> namedParameters;
 
+	private Locale locale = Locale.getDefault(Locale.Category.DISPLAY);
+
 	/**
 	 * Constructor.
 	 */
@@ -72,15 +75,8 @@ public class PageParameters implements IClusterable, IIndexedParameters, INamedP
 	{
 		if (copy != null)
 		{
-			if (copy.indexedParameters != null)
-			{
-				indexedParameters = new ArrayList<>(copy.indexedParameters);
-			}
-
-			if (copy.namedParameters != null)
-			{
-				namedParameters = new ArrayList<>(copy.namedParameters);
-			}
+			mergeWith(copy);
+			setLocale(copy.locale);
 		}
 	}
 
@@ -119,7 +115,7 @@ public class PageParameters implements IClusterable, IIndexedParameters, INamedP
 		{
 			if ((index >= 0) && (index < indexedParameters.size()))
 			{
-				return StringValue.valueOf(indexedParameters.get(index));
+				return StringValue.valueOf(indexedParameters.get(index), locale);
 			}
 		}
 		return StringValue.valueOf((String)null);
@@ -164,7 +160,7 @@ public class PageParameters implements IClusterable, IIndexedParameters, INamedP
 			{
 				if (entry.getKey().equals(name))
 				{
-					return StringValue.valueOf(entry.getValue());
+					return StringValue.valueOf(entry.getValue(), locale);
 				}
 			}
 		}
@@ -183,7 +179,7 @@ public class PageParameters implements IClusterable, IIndexedParameters, INamedP
 			{
 				if (entry.getKey().equals(name))
 				{
-					result.add(StringValue.valueOf(entry.getValue()));
+					result.add(StringValue.valueOf(entry.getValue(), locale));
 				}
 			}
 			return Collections.unmodifiableList(result);
@@ -401,6 +397,7 @@ public class PageParameters implements IClusterable, IIndexedParameters, INamedP
 		{
 			indexedParameters = other.indexedParameters;
 			namedParameters = other.namedParameters;
+			locale = other.locale;
 		}
 		return this;
 	}
@@ -508,6 +505,12 @@ public class PageParameters implements IClusterable, IIndexedParameters, INamedP
 		return (getIndexedCount() == 0) && getNamedKeys().isEmpty();
 	}
 
+	public PageParameters setLocale(Locale locale)
+	{
+		this.locale = locale != null ? locale : Locale.getDefault(Locale.Category.DISPLAY);
+		return this;
+	}
+
 	@Override
 	public String toString()
 	{


[3/4] wicket git commit: WICKET-6419 Localization of PageParameters

Posted by mg...@apache.org.
WICKET-6419 Localization of PageParameters

Add some checks to be on the safe side.


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

Branch: refs/heads/master
Commit: 77dee2bbd513db2ee89eb4882e02142f1fa619cd
Parents: e75cb25
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Tue Jul 18 23:45:58 2017 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Tue Jul 18 23:45:58 2017 +0200

----------------------------------------------------------------------
 .../request/mapper/AbstractBookmarkableMapper.java  |  5 ++++-
 .../mapper/BasicResourceReferenceMapper.java        |  5 ++++-
 .../core/request/mapper/BookmarkableMapper.java     |  5 ++++-
 .../wicket/core/request/mapper/ResourceMapper.java  | 10 ++++++++--
 .../mapper/LocaleAwarePageParametersTest.java       | 16 ++++++++++++++++
 .../core/request/mapper/ResourceMapperTest.java     |  2 --
 .../request/mapper/parameter/PageParameters.java    |  2 +-
 7 files changed, 37 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/77dee2bb/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 9cc0597..a6bab53 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
@@ -626,7 +626,10 @@ public abstract class AbstractBookmarkableMapper extends AbstractComponentMapper
 		for (int curMatchSize : matchedParameters)
 			total += curMatchSize;
 		PageParameters pageParameters = extractPageParameters(request, total, pageParametersEncoder);
-		pageParameters.setLocale(resolveLocale());
+		if (pageParameters != null)
+		{
+			pageParameters.setLocale(resolveLocale());
+		}
 
 		int skippedParameters = 0;
 		for (int pathSegmentIndex = 0; pathSegmentIndex < pathSegments.size(); pathSegmentIndex++)

http://git-wip-us.apache.org/repos/asf/wicket/blob/77dee2bb/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 aeaf81b..d0f1375 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
@@ -93,7 +93,10 @@ public class BasicResourceReferenceMapper extends AbstractResourceReferenceMappe
 			// extract the PageParameters from URL if there are any
 			PageParameters pageParameters = extractPageParameters(request, segmentsSize,
 					pageParametersEncoder);
-			pageParameters.setLocale(resolveLocale());
+			if (pageParameters != null)
+			{
+				pageParameters.setLocale(resolveLocale());
+			}
 
 			String className = url.getSegments().get(2);
 			StringBuilder name = new StringBuilder(segmentsSize * 2);

http://git-wip-us.apache.org/repos/asf/wicket/blob/77dee2bb/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 5388fcb..899500e 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
@@ -123,7 +123,10 @@ public class BookmarkableMapper extends AbstractBookmarkableMapper
 				// extract the PageParameters from URL if there are any
 				PageParameters pageParameters = extractPageParameters(request, 3,
 					pageParametersEncoder);
-				pageParameters.setLocale(resolveLocale());
+				if (pageParameters != null)
+				{
+					pageParameters.setLocale(resolveLocale());
+				}
 
 				return new UrlInfo(info, pageClass, pageParameters);
 			}

http://git-wip-us.apache.org/repos/asf/wicket/blob/77dee2bb/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 8d8b0fa..69f82f7 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
@@ -126,7 +126,10 @@ public class ResourceMapper extends AbstractBookmarkableMapper
 		// now extract the page parameters from the request url
 		PageParameters parameters = extractPageParameters(request, mountSegments.length,
 			parametersEncoder);
-		parameters.setLocale(resolveLocale());
+		if (parameters != null)
+		{
+			parameters.setLocale(resolveLocale());
+		}
 
 		// remove caching information from current request
 		removeCachingDecoration(url, parameters);
@@ -175,7 +178,10 @@ public class ResourceMapper extends AbstractBookmarkableMapper
 	{
 		Url originalUrl = new Url(request.getUrl());
 		PageParameters parameters = extractPageParameters(request, mountSegments.length, parametersEncoder);
-		parameters.setLocale(resolveLocale());
+		if (parameters != null)
+		{
+			parameters.setLocale(resolveLocale());
+		}
 		removeCachingDecoration(originalUrl, parameters);
 		Request requestWithoutDecoration = request.cloneWithUrl(originalUrl);
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/77dee2bb/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/LocaleAwarePageParametersTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/LocaleAwarePageParametersTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/LocaleAwarePageParametersTest.java
index 3087312..6a4bc88 100644
--- a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/LocaleAwarePageParametersTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/LocaleAwarePageParametersTest.java
@@ -1,3 +1,19 @@
+/*
+ * 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.core.request.mapper;
 
 import static org.hamcrest.Matchers.is;

http://git-wip-us.apache.org/repos/asf/wicket/blob/77dee2bb/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 6603c7b..cc00db8 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
@@ -34,8 +34,6 @@ import org.apache.wicket.util.tester.WicketTestCase;
 import org.junit.Before;
 import org.junit.Test;
 
-/**
- */
 public class ResourceMapperTest extends WicketTestCase
 {
 	private static final Charset CHARSET = Charset.forName("UTF-8");

http://git-wip-us.apache.org/repos/asf/wicket/blob/77dee2bb/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 e1ce701..d4736e5 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
@@ -411,7 +411,7 @@ public class PageParameters implements IClusterable, IIndexedParameters, INamedP
 	 */
 	public PageParameters mergeWith(final PageParameters other)
 	{
-		if (this != other)
+		if (other != null && this != other)
 		{
 			for (int index = 0; index < other.getIndexedCount(); index++)
 			{


[4/4] wicket git commit: Merge branch 'WICKET-6419'

Posted by mg...@apache.org.
Merge branch 'WICKET-6419'


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

Branch: refs/heads/master
Commit: 04c96171e242d09fc34d4f93b1ca97f8fc61a67c
Parents: 8322023 77dee2b
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Tue Jul 25 22:47:29 2017 +0300
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Tue Jul 25 22:47:29 2017 +0300

----------------------------------------------------------------------
 .../mapper/AbstractBookmarkableMapper.java      |  51 ++++++-
 .../mapper/BasicResourceReferenceMapper.java    |   4 +
 .../core/request/mapper/BookmarkableMapper.java |  40 +-----
 .../core/request/mapper/MountedMapper.java      |  11 +-
 .../core/request/mapper/PackageMapper.java      |   3 +-
 .../core/request/mapper/ResourceMapper.java     |  13 +-
 .../org/apache/wicket/RequestEncodingTest.java  |  20 ---
 .../mapper/LocaleAwarePageParametersTest.java   | 142 +++++++++++++++++++
 .../core/request/mapper/ResourceMapperTest.java |   2 -
 .../wicket/request/mapper/AbstractMapper.java   |   8 ++
 .../mapper/parameter/PageParameters.java        |  29 ++--
 11 files changed, 238 insertions(+), 85 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/04c96171/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/PackageMapper.java
----------------------------------------------------------------------


[2/4] wicket git commit: WICKET-6419 Localization of PageParameters

Posted by mg...@apache.org.
WICKET-6419 Localization of PageParameters

Explicitly set the default locale to ENGLISH so that the test doesn't fail on developer machines with DE locale.


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

Branch: refs/heads/master
Commit: e75cb25605ac64e4b2f6bc149f7f2e1243f824cb
Parents: 7697741
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Tue Jul 18 23:12:47 2017 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Tue Jul 18 23:12:47 2017 +0200

----------------------------------------------------------------------
 .../mapper/LocaleAwarePageParametersTest.java   | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/e75cb256/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/LocaleAwarePageParametersTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/LocaleAwarePageParametersTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/LocaleAwarePageParametersTest.java
index 01453e9..3087312 100644
--- a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/LocaleAwarePageParametersTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/LocaleAwarePageParametersTest.java
@@ -17,6 +17,8 @@ import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.resource.StringResourceStream;
 import org.apache.wicket.util.tester.WicketTestCase;
+import org.junit.After;
+import org.junit.Before;
 import org.junit.Test;
 
 /**
@@ -24,6 +26,24 @@ import org.junit.Test;
  */
 public class LocaleAwarePageParametersTest extends WicketTestCase
 {
+	private Locale defaultLocale = null;
+
+	@Before
+	public void before()
+	{
+		defaultLocale = Locale.getDefault(Locale.Category.DISPLAY);
+		Locale.setDefault(Locale.Category.DISPLAY, Locale.ENGLISH);
+	}
+
+	@After
+	public void after()
+	{
+		if (defaultLocale != null)
+		{
+			Locale.setDefault(Locale.Category.DISPLAY, defaultLocale);
+		}
+	}
+
 	@Override
 	protected WebApplication newApplication()
 	{