You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2012/03/19 09:30:12 UTC
[1/2] git commit: Rework CustomHomeMapper to behave like the default
HomePageMapper and to support stateful pages.
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 <mg...@apache.org>
Authored: Mon Mar 19 10:29:43 2012 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
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;