Repository: wicket
Updated Branches:
  refs/heads/WICKET-6419 [created] 769774125


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/WICKET-6419
Commit: 7697741252d9542a9686f8d745a4e8c19465be32
Parents: 3e6aa9b
Author: Martin Tzvetanov Grigorov <[email protected]>
Authored: Tue Jul 18 23:04:11 2017 +0200
Committer: Martin Tzvetanov Grigorov <[email protected]>
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()
        {

Reply via email to