Updated Branches:
  refs/heads/master 252b45f5f -> cabc1bee6

Rework CustomHomeMapper to behave like the default HomePageMapper and to 
support stateful pages.


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

Branch: refs/heads/master
Commit: cabc1bee6a5e3e43e58c9f4c7f8b5cda401c558a
Parents: eae8155
Author: Martin Tzvetanov Grigorov <[email protected]>
Authored: Mon Mar 19 10:29:43 2012 +0200
Committer: Martin Tzvetanov Grigorov <[email protected]>
Committed: Mon Mar 19 10:29:43 2012 +0200

----------------------------------------------------------------------
 .../wicket/core/request/mapper/HomePageMapper.java |    4 +-
 .../examples/requestmapper/CustomHomeMapper.java   |   93 +++++++--------
 .../requestmapper/RequestMapperApplication.java    |    2 +-
 .../mapper/parameter/PageParametersEncoder.java    |   19 ++--
 4 files changed, 55 insertions(+), 63 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/cabc1bee/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/HomePageMapper.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/HomePageMapper.java
 
b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/HomePageMapper.java
index 64d4a9f..aac12b2 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/HomePageMapper.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/HomePageMapper.java
@@ -81,7 +81,7 @@ public class HomePageMapper extends MountedMapper
        /**
         * Matches only when there are no segments/indexed parameters
         *
-        * @see 
org.apache.wicket.request.mapper.AbstractBookmarkableMapper#parseRequest(org.apache.wicket.request.Request)
+        * @see 
AbstractBookmarkableMapper#parseRequest(org.apache.wicket.request.Request)
         */
        @Override
        protected UrlInfo parseRequest(Request request)
@@ -101,7 +101,7 @@ public class HomePageMapper extends MountedMapper
        /**
         * Use this mapper as a last option. Let all other mappers to try to 
handle the request
         *
-        * @see 
org.apache.wicket.request.mapper.MountedMapper#getCompatibilityScore(org.apache.wicket.request.Request)
+        * @see 
MountedMapper#getCompatibilityScore(org.apache.wicket.request.Request)
         */
        @Override
        public int getCompatibilityScore(Request request)

http://git-wip-us.apache.org/repos/asf/wicket/blob/cabc1bee/wicket-examples/src/main/java/org/apache/wicket/examples/requestmapper/CustomHomeMapper.java
----------------------------------------------------------------------
diff --git 
a/wicket-examples/src/main/java/org/apache/wicket/examples/requestmapper/CustomHomeMapper.java
 
b/wicket-examples/src/main/java/org/apache/wicket/examples/requestmapper/CustomHomeMapper.java
index fafa5ec..8f4b0a1 100644
--- 
a/wicket-examples/src/main/java/org/apache/wicket/examples/requestmapper/CustomHomeMapper.java
+++ 
b/wicket-examples/src/main/java/org/apache/wicket/examples/requestmapper/CustomHomeMapper.java
@@ -17,18 +17,15 @@
 package org.apache.wicket.examples.requestmapper;
 
 import java.util.List;
+import java.util.Locale;
 
-import org.apache.wicket.Application;
 import org.apache.wicket.Session;
+import org.apache.wicket.core.request.mapper.HomePageMapper;
 import org.apache.wicket.request.IRequestHandler;
 import org.apache.wicket.request.IRequestMapper;
 import org.apache.wicket.request.Request;
 import org.apache.wicket.request.Url;
-import org.apache.wicket.core.request.handler.IPageRequestHandler;
-import org.apache.wicket.core.request.handler.PageProvider;
-import org.apache.wicket.core.request.handler.RenderPageRequestHandler;
-import org.apache.wicket.core.request.mapper.AbstractComponentMapper;
-import org.apache.wicket.core.request.mapper.HomePageMapper;
+import org.apache.wicket.request.component.IRequestablePage;
 
 /**
  * An {@link IRequestMapper} that handles requests to the home page ('/') and 
appends the string
@@ -36,82 +33,74 @@ import org.apache.wicket.core.request.mapper.HomePageMapper;
  * 
  * <p>
  * I.e. a request to http://example.com/app will end up in 
http://example.com/app/en_US
- * 
- * @author mgrigorov
  */
-public class CustomHomeMapper extends AbstractComponentMapper
+public class CustomHomeMapper extends HomePageMapper
 {
        /**
-        * If there is just one url segment (the locale?!) then return a bigger 
compatibility score than
-        * {@link HomePageMapper#getCompatibilityScore(Request)}
-        * 
-        * @see 
org.apache.wicket.core.request.mapper.HomePageMapper#getCompatibilityScore(org.apache.wicket.request.Request)
+        * Constructor.
+        *
+        * @param pageClass
+        *      the class of the home page
         */
-       public int getCompatibilityScore(Request request)
+       public CustomHomeMapper(final Class<? extends IRequestablePage> 
pageClass)
        {
-               return request.getUrl().getSegments().size() == 1 ? 1 : 0;
+               super(pageClass);
        }
 
        /**
+        * Sets the current session Locale as first segment in the Url.
+        *
         * @see 
org.apache.wicket.core.request.mapper.HomePageMapper#mapHandler(org.apache.wicket.request.IRequestHandler)
         */
        public Url mapHandler(IRequestHandler requestHandler)
        {
-               Url homeUrl = null;
+               Url homeUrl = super.mapHandler(requestHandler);
 
-               if (requestHandler instanceof IPageRequestHandler)
+               if (homeUrl != null)
                {
-                       IPageRequestHandler pageRequestHandler = 
(IPageRequestHandler)requestHandler;
-
-                       if 
(pageRequestHandler.getPageClass().equals(Application.get().getHomePage()))
-                       {
-                               String locale = 
Session.get().getLocale().toString();
-                               homeUrl = new Url();
-                               homeUrl.getSegments().add(0, locale);
-                       }
+                       String locale = Session.get().getLocale().toString();
+                       homeUrl.getSegments().add(0, locale);
                }
 
                return homeUrl;
        }
 
        /**
+        * Removes the leading segment if it a valid Locale
+        *
         * @see 
org.apache.wicket.core.request.mapper.HomePageMapper#mapRequest(org.apache.wicket.request.Request)
         */
        public IRequestHandler mapRequest(Request request)
        {
-               if (isHomeUrl(request))
-               {
-                       return new RenderPageRequestHandler(new 
PageProvider(getContext().getHomePageClass()));
-               }
-               else
+               IRequestHandler requestHandler = null;
+               Url url = request.getUrl();
+               List<String> segments = url.getSegments();
+
+               if (segments.size() == 1)
                {
-                       return null;
+                       String localeAsString = segments.get(0);
+                       Locale locale = 
LocaleHelper.parseLocale(localeAsString);
+                       if (locale != null)
+                       {
+                               Session.get().setLocale(locale);
+                               segments.remove(0);
+
+                               Request requestWithoutLocale = 
request.cloneWithUrl(url);
+                               requestHandler = 
super.mapRequest(requestWithoutLocale);
+                       }
                }
+
+               return requestHandler;
        }
 
        /**
-        * A home URL is considered a URL without any segments or with one 
segment and its value is
-        * valid locale
-        * 
-        * @param request
-        * @return <code>true</code> if the request is to the home page ("/")
+        * If there is just one url segment (the locale?!) then return a bigger 
compatibility score than
+        * {@link HomePageMapper#getCompatibilityScore(Request)}
+        *
+        * @see 
org.apache.wicket.core.request.mapper.HomePageMapper#getCompatibilityScore(org.apache.wicket.request.Request)
         */
-       private boolean isHomeUrl(Request request)
+       public int getCompatibilityScore(Request request)
        {
-               boolean isHomeUrl = false;
-
-               List<String> segments = request.getUrl().getSegments();
-               if (segments.isEmpty())
-               {
-                       isHomeUrl = true;
-               }
-               else if (segments.size() == 1)
-               {
-                       String localeCandidate = segments.get(0);
-                       isHomeUrl = LocaleHelper.isLocale(localeCandidate);
-                       // on success the Session's locale can be changed here
-               }
-
-               return isHomeUrl;
+               return request.getUrl().getSegments().size() == 1 ? 1 : 0;
        }
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/cabc1bee/wicket-examples/src/main/java/org/apache/wicket/examples/requestmapper/RequestMapperApplication.java
----------------------------------------------------------------------
diff --git 
a/wicket-examples/src/main/java/org/apache/wicket/examples/requestmapper/RequestMapperApplication.java
 
b/wicket-examples/src/main/java/org/apache/wicket/examples/requestmapper/RequestMapperApplication.java
index 80c82ec..933f0bd 100644
--- 
a/wicket-examples/src/main/java/org/apache/wicket/examples/requestmapper/RequestMapperApplication.java
+++ 
b/wicket-examples/src/main/java/org/apache/wicket/examples/requestmapper/RequestMapperApplication.java
@@ -50,7 +50,7 @@ public class RequestMapperApplication extends 
WicketExampleApplication
        {
                super.init();
 
-               getRootRequestMapperAsCompound().add(new CustomHomeMapper());
+               getRootRequestMapperAsCompound().add(new 
CustomHomeMapper(getHomePage()));
 
                getRootRequestMapperAsCompound().add(
                        new LocaleFirstMapper(new MountedMapper("/localized", 
LocalizedPage.class)));

http://git-wip-us.apache.org/repos/asf/wicket/blob/cabc1bee/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 53bdbcf..5b32009 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
@@ -34,7 +34,7 @@ public class PageParametersEncoder implements 
IPageParametersEncoder
        }
 
        /**
-        * @see 
org.apache.wicket.request.mapper.parameter.IPageParametersEncoder#decodePageParameters(org.apache.wicket.request.Request)
+        * @see 
IPageParametersEncoder#decodePageParameters(org.apache.wicket.request.Url)
         */
        public PageParameters decodePageParameters(final Url url)
        {
@@ -62,15 +62,18 @@ public class PageParametersEncoder implements 
IPageParametersEncoder
        {
                Url url = new Url();
 
-               for (int i = 0; i < pageParameters.getIndexedCount(); ++i)
+               if (pageParameters != null)
                {
-                       url.getSegments().add(pageParameters.get(i).toString());
-               }
+                       for (int i = 0; i < pageParameters.getIndexedCount(); 
++i)
+                       {
+                               
url.getSegments().add(pageParameters.get(i).toString());
+                       }
 
-               for (PageParameters.NamedPair pair : 
pageParameters.getAllNamed())
-               {
-                       QueryParameter param = new 
QueryParameter(pair.getKey(), pair.getValue());
-                       url.getQueryParameters().add(param);
+                       for (PageParameters.NamedPair pair : 
pageParameters.getAllNamed())
+                       {
+                               QueryParameter param = new 
QueryParameter(pair.getKey(), pair.getValue());
+                               url.getQueryParameters().add(param);
+                       }
                }
 
                return url;

Reply via email to