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;
