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;