You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by pe...@apache.org on 2013/01/09 20:45:20 UTC
git commit: WICKET-4932: testing recreateMountedPagesAfterExpiry at
AbstractBookmarkableMapper
Updated Branches:
refs/heads/sandbox/bookmarkable-callback-url [created] 7e5b2e317
WICKET-4932: testing recreateMountedPagesAfterExpiry at AbstractBookmarkableMapper
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/7e5b2e31
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/7e5b2e31
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/7e5b2e31
Branch: refs/heads/sandbox/bookmarkable-callback-url
Commit: 7e5b2e31789b0bdb51570d9531a1a109de454f8f
Parents: 66ebc4b
Author: Pedro Santos <pe...@apache.com>
Authored: Wed Jan 9 17:43:30 2013 -0200
Committer: Pedro Santos <pe...@apache.com>
Committed: Wed Jan 9 17:43:30 2013 -0200
----------------------------------------------------------------------
...ookmarkableListenerInterfaceRequestHandler.java | 8 ++
.../request/mapper/AbstractBookmarkableMapper.java | 71 +++++++++---
.../wicket/request/mapper/BookmarkableMapper.java | 15 +++-
.../wicket/request/mapper/MountedMapper.java | 64 +++-------
.../wicket/request/mapper/PackageMapper.java | 30 ++++-
.../mapper/AbstractBookmarkableMapperTest.java | 92 +++++++++++++++
.../wicket/request/mapper/AbstractMapperTest.java | 4 +
.../request/mapper/BookmarkableMapperTest.java | 14 +-
.../wicket/request/mapper/MountedMapperTest.java | 44 +++-----
.../wicket/request/mapper/PackageMapperTest.java | 18 ++--
.../wicket/request/mapper/TestMapperContext.java | 7 +-
11 files changed, 253 insertions(+), 114 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/7e5b2e31/wicket-core/src/main/java/org/apache/wicket/request/handler/BookmarkableListenerInterfaceRequestHandler.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/handler/BookmarkableListenerInterfaceRequestHandler.java b/wicket-core/src/main/java/org/apache/wicket/request/handler/BookmarkableListenerInterfaceRequestHandler.java
index 1767a88..651bc66 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/handler/BookmarkableListenerInterfaceRequestHandler.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/handler/BookmarkableListenerInterfaceRequestHandler.java
@@ -171,4 +171,12 @@ public class BookmarkableListenerInterfaceRequestHandler
{
return pageComponentProvider.getRenderCount();
}
+
+ public static BookmarkableListenerInterfaceRequestHandler wrap(
+ ListenerInterfaceRequestHandler handler)
+ {
+ return new BookmarkableListenerInterfaceRequestHandler(new PageAndComponentProvider(
+ handler.getPage(), handler.getComponent()), handler.getListenerInterface(),
+ handler.getBehaviorIndex());
+ }
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/7e5b2e31/wicket-core/src/main/java/org/apache/wicket/request/mapper/AbstractBookmarkableMapper.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/mapper/AbstractBookmarkableMapper.java b/wicket-core/src/main/java/org/apache/wicket/request/mapper/AbstractBookmarkableMapper.java
index 9042158..7ae520d 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/mapper/AbstractBookmarkableMapper.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/mapper/AbstractBookmarkableMapper.java
@@ -17,6 +17,8 @@
package org.apache.wicket.request.mapper;
import org.apache.wicket.RequestListenerInterface;
+import org.apache.wicket.protocol.http.PageExpiredException;
+import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.request.IRequestHandler;
import org.apache.wicket.request.IRequestHandlerDelegate;
import org.apache.wicket.request.IRequestMapper;
@@ -35,6 +37,7 @@ import org.apache.wicket.request.mapper.info.ComponentInfo;
import org.apache.wicket.request.mapper.info.PageComponentInfo;
import org.apache.wicket.request.mapper.info.PageInfo;
import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.settings.IPageSettings;
import org.apache.wicket.util.lang.Args;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -47,6 +50,7 @@ import org.slf4j.LoggerFactory;
public abstract class AbstractBookmarkableMapper extends AbstractComponentMapper
{
private static Logger logger = LoggerFactory.getLogger(AbstractBookmarkableMapper.class);
+ private IPageSettings settings;
/**
* Represents information stored in URL.
@@ -138,6 +142,17 @@ public abstract class AbstractBookmarkableMapper extends AbstractComponentMapper
*/
public AbstractBookmarkableMapper()
{
+ this(WebApplication.get().getPageSettings());
+ }
+
+ /**
+ * Construct.
+ *
+ * @param settings
+ */
+ public AbstractBookmarkableMapper(IPageSettings settings)
+ {
+ this.settings = settings;
}
/**
@@ -207,7 +222,15 @@ public abstract class AbstractBookmarkableMapper extends AbstractComponentMapper
PageProvider provider = new PageProvider(pageInfo.getPageId(), pageClass, pageParameters,
renderCount);
provider.setPageSource(getContext());
- return new RenderPageRequestHandler(provider);
+ if (provider.isNewPageInstance() && !settings.getRecreateMountedPagesAfterExpiry())
+ {
+ throw new PageExpiredException(String.format("Bookmarkable page id '%d' has expired.",
+ pageInfo.getPageId()));
+ }
+ else
+ {
+ return new RenderPageRequestHandler(provider);
+ }
}
/**
@@ -302,6 +325,7 @@ public abstract class AbstractBookmarkableMapper extends AbstractComponentMapper
return null;
}
+// TODO remove since we are duplicating an API here
protected boolean checkPageInstance(IRequestablePage page)
{
return page != null && checkPageClass(page.getClass());
@@ -382,30 +406,43 @@ public abstract class AbstractBookmarkableMapper extends AbstractComponentMapper
{
// listener interface URL with page class information
BookmarkableListenerInterfaceRequestHandler handler = (BookmarkableListenerInterfaceRequestHandler)requestHandler;
- Class<? extends IRequestablePage> pageClass = handler.getPageClass();
-
- if (!checkPageClass(pageClass))
+ if (checkPageClass(handler.getPageClass()))
{
- return null;
+ return mapBookmarkableHandler(handler);
}
-
- Integer renderCount = null;
- if (handler.getListenerInterface().isIncludeRenderCount())
+ }
+ else if (requestHandler instanceof ListenerInterfaceRequestHandler &&
+ settings.getRecreateMountedPagesAfterExpiry())
+ {
+ ListenerInterfaceRequestHandler handler = (ListenerInterfaceRequestHandler)requestHandler;
+ if (checkPageClass(handler.getPageClass()))
{
- renderCount = handler.getRenderCount();
+ return mapBookmarkableHandler(BookmarkableListenerInterfaceRequestHandler.wrap(handler));
}
+ }
+ return null;
+ }
- PageInfo pageInfo = getPageInfo(handler);
- ComponentInfo componentInfo = new ComponentInfo(renderCount,
- requestListenerInterfaceToString(handler.getListenerInterface()),
- handler.getComponentPath(), handler.getBehaviorIndex());
+ protected Url mapBookmarkableHandler(BookmarkableListenerInterfaceRequestHandler handler)
+ {
+ String componentPath = handler.getComponentPath();
+ RequestListenerInterface listenerInterface = handler.getListenerInterface();
- UrlInfo urlInfo = new UrlInfo(new PageComponentInfo(pageInfo, componentInfo),
- pageClass, handler.getPageParameters());
- return buildUrl(urlInfo);
+ Integer renderCount = null;
+ if (listenerInterface.isIncludeRenderCount())
+ {
+ renderCount = handler.getRenderCount();
}
- return null;
+ PageInfo pageInfo = getPageInfo(handler);
+ ComponentInfo componentInfo = new ComponentInfo(renderCount,
+ requestListenerInterfaceToString(listenerInterface), componentPath,
+ handler.getBehaviorIndex());
+ PageComponentInfo pageComponentInfo = new PageComponentInfo(pageInfo, componentInfo);
+ PageParameters parameters = new PageParameters(handler.getPageParameters());
+ UrlInfo urlInfo = new UrlInfo(pageComponentInfo, handler.getPageClass(),
+ parameters.mergeWith(handler.getPageParameters()));
+ return buildUrl(urlInfo);
}
protected final PageInfo getPageInfo(IPageRequestHandler handler)
http://git-wip-us.apache.org/repos/asf/wicket/blob/7e5b2e31/wicket-core/src/main/java/org/apache/wicket/request/mapper/BookmarkableMapper.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/mapper/BookmarkableMapper.java b/wicket-core/src/main/java/org/apache/wicket/request/mapper/BookmarkableMapper.java
index 759f389..4ae4bf1 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/mapper/BookmarkableMapper.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/mapper/BookmarkableMapper.java
@@ -24,6 +24,7 @@ import org.apache.wicket.request.mapper.info.PageComponentInfo;
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.settings.IPageSettings;
import org.apache.wicket.util.lang.Args;
/**
@@ -53,9 +54,11 @@ public class BookmarkableMapper extends AbstractBookmarkableMapper
* Construct.
*
* @param pageParametersEncoder
+ * @param settings
*/
- public BookmarkableMapper(IPageParametersEncoder pageParametersEncoder)
+ public BookmarkableMapper(IPageParametersEncoder pageParametersEncoder, IPageSettings settings)
{
+ super(settings);
Args.notNull(pageParametersEncoder, "pageParametersEncoder");
this.pageParametersEncoder = pageParametersEncoder;
@@ -63,6 +66,16 @@ public class BookmarkableMapper extends AbstractBookmarkableMapper
/**
* Construct.
+ *
+ * @param pageParametersEncoder
+ */
+ public BookmarkableMapper(IPageParametersEncoder pageParametersEncoder)
+ {
+ this(pageParametersEncoder, Application.get().getPageSettings());
+ }
+
+ /**
+ * Construct.
*/
public BookmarkableMapper()
{
http://git-wip-us.apache.org/repos/asf/wicket/blob/7e5b2e31/wicket-core/src/main/java/org/apache/wicket/request/mapper/MountedMapper.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/mapper/MountedMapper.java b/wicket-core/src/main/java/org/apache/wicket/request/mapper/MountedMapper.java
index 3d40023..6ff64f8 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/mapper/MountedMapper.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/mapper/MountedMapper.java
@@ -20,18 +20,14 @@ import java.util.ArrayList;
import java.util.List;
import org.apache.wicket.Application;
-import org.apache.wicket.RequestListenerInterface;
-import org.apache.wicket.request.IRequestHandler;
import org.apache.wicket.request.Request;
import org.apache.wicket.request.Url;
import org.apache.wicket.request.component.IRequestablePage;
-import org.apache.wicket.request.handler.ListenerInterfaceRequestHandler;
-import org.apache.wicket.request.mapper.info.ComponentInfo;
import org.apache.wicket.request.mapper.info.PageComponentInfo;
-import org.apache.wicket.request.mapper.info.PageInfo;
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.settings.IPageSettings;
import org.apache.wicket.util.ClassProvider;
import org.apache.wicket.util.lang.Args;
import org.apache.wicket.util.string.Strings;
@@ -186,6 +182,24 @@ public class MountedMapper extends AbstractBookmarkableMapper
ClassProvider<? extends IRequestablePage> pageClassProvider,
IPageParametersEncoder pageParametersEncoder)
{
+ this(mountPath, pageClassProvider, pageParametersEncoder, Application.get()
+ .getPageSettings());
+
+ }
+
+ /**
+ * Construct.
+ *
+ * @param mountPath
+ * @param pageClassProvider
+ * @param pageParametersEncoder
+ * @param settings
+ */
+ public MountedMapper(String mountPath,
+ ClassProvider<? extends IRequestablePage> pageClassProvider,
+ IPageParametersEncoder pageParametersEncoder, IPageSettings settings)
+ {
+ super(settings);
Args.notEmpty(mountPath, "mountPath");
Args.notNull(pageClassProvider, "pageClassProvider");
Args.notNull(pageParametersEncoder, "pageParametersEncoder");
@@ -360,46 +374,6 @@ public class MountedMapper extends AbstractBookmarkableMapper
return new PageParameters();
}
- @Override
- public Url mapHandler(IRequestHandler requestHandler)
- {
- Url url = super.mapHandler(requestHandler);
-
- if (url == null && requestHandler instanceof ListenerInterfaceRequestHandler &&
- getRecreateMountedPagesAfterExpiry())
- {
- ListenerInterfaceRequestHandler handler = (ListenerInterfaceRequestHandler)requestHandler;
- IRequestablePage page = handler.getPage();
- if (checkPageInstance(page))
- {
- String componentPath = handler.getComponentPath();
- RequestListenerInterface listenerInterface = handler.getListenerInterface();
-
- Integer renderCount = null;
- if (listenerInterface.isIncludeRenderCount())
- {
- renderCount = page.getRenderCount();
- }
-
- PageInfo pageInfo = getPageInfo(handler);
- ComponentInfo componentInfo = new ComponentInfo(renderCount,
- requestListenerInterfaceToString(listenerInterface), componentPath,
- handler.getBehaviorIndex());
- PageComponentInfo pageComponentInfo = new PageComponentInfo(pageInfo, componentInfo);
- PageParameters parameters = new PageParameters(page.getPageParameters());
- UrlInfo urlInfo = new UrlInfo(pageComponentInfo, page.getClass(),
- parameters.mergeWith(handler.getPageParameters()));
- url = buildUrl(urlInfo);
- }
- }
-
- return url;
- }
-
- boolean getRecreateMountedPagesAfterExpiry()
- {
- return Application.get().getPageSettings().getRecreateMountedPagesAfterExpiry();
- }
/**
* @see org.apache.wicket.request.mapper.AbstractBookmarkableMapper#buildUrl(org.apache.wicket.request.mapper.AbstractBookmarkableMapper.UrlInfo)
http://git-wip-us.apache.org/repos/asf/wicket/blob/7e5b2e31/wicket-core/src/main/java/org/apache/wicket/request/mapper/PackageMapper.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/mapper/PackageMapper.java b/wicket-core/src/main/java/org/apache/wicket/request/mapper/PackageMapper.java
index bfacbcb..5fed6d5 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/mapper/PackageMapper.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/mapper/PackageMapper.java
@@ -18,6 +18,7 @@ package org.apache.wicket.request.mapper;
import java.lang.reflect.Modifier;
+import org.apache.wicket.Application;
import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.request.Request;
import org.apache.wicket.request.Url;
@@ -26,6 +27,7 @@ import org.apache.wicket.request.mapper.info.PageComponentInfo;
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.settings.IPageSettings;
import org.apache.wicket.util.lang.Args;
import org.apache.wicket.util.lang.PackageName;
@@ -88,6 +90,20 @@ public class PackageMapper extends AbstractBookmarkableMapper
public PackageMapper(final PackageName packageName,
final IPageParametersEncoder pageParametersEncoder)
{
+ this(packageName, pageParametersEncoder, Application.get().getPageSettings());
+ }
+
+ /**
+ * Construct.
+ *
+ * @param packageName
+ * @param pageParametersEncoder
+ * @param settigns
+ */
+ public PackageMapper(final PackageName packageName,
+ final IPageParametersEncoder pageParametersEncoder, IPageSettings settigns)
+ {
+ super(settigns);
Args.notNull(packageName, "packageName");
Args.notNull(pageParametersEncoder, "pageParametersEncoder");
@@ -137,7 +153,7 @@ public class PackageMapper extends AbstractBookmarkableMapper
// load the page class
String className = url.getSegments().get(0);
-
+
if (isValidClassName(className) == false)
{
return null;
@@ -161,13 +177,13 @@ public class PackageMapper extends AbstractBookmarkableMapper
}
/**
- * filter out invalid class names for package mapper. getting trash for class names
- * can e.g. happen when the home page is in the same package that is mounted by package mapper
- * but the request was previously mapped by e.g. {@link HomePageMapper}. We then get some
- * strange url like '/example/..' and wicket tries to look up class name '..'.
+ * filter out invalid class names for package mapper. getting trash for class names can e.g.
+ * happen when the home page is in the same package that is mounted by package mapper but the
+ * request was previously mapped by e.g. {@link HomePageMapper}. We then get some strange url
+ * like '/example/..' and wicket tries to look up class name '..'.
* <p/>
- * @see <a href="https://issues.apache.org/jira/browse/WICKET-4303">WICKET-4303</a>
- * <p/>
+ *
+ * @see <a href="https://issues.apache.org/jira/browse/WICKET-4303">WICKET-4303</a> <p/>
*/
private boolean isValidClassName(String className)
{
http://git-wip-us.apache.org/repos/asf/wicket/blob/7e5b2e31/wicket-core/src/test/java/org/apache/wicket/request/mapper/AbstractBookmarkableMapperTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/mapper/AbstractBookmarkableMapperTest.java b/wicket-core/src/test/java/org/apache/wicket/request/mapper/AbstractBookmarkableMapperTest.java
new file mode 100644
index 0000000..c2de418
--- /dev/null
+++ b/wicket-core/src/test/java/org/apache/wicket/request/mapper/AbstractBookmarkableMapperTest.java
@@ -0,0 +1,92 @@
+package org.apache.wicket.request.mapper;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.wicket.MockPage;
+import org.apache.wicket.WicketTestCase;
+import org.apache.wicket.protocol.http.PageExpiredException;
+import org.apache.wicket.request.IRequestHandler;
+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.info.PageInfo;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * @author pedrosans
+ */
+public class AbstractBookmarkableMapperTest extends WicketTestCase
+{
+
+ private static final int NOT_RENDERED_COUNT = 2;
+ private static final int EXPIRED_ID = 2;
+
+
+ /**
+ * <a href="https://issues.apache.org/jira/browse/WICKET-4932">WICKET-4932</a>
+ */
+ @Test(expected = PageExpiredException.class)
+ public void itFailsToProcessAnExpiredPageIfShouldNotRecreateMountedPagesAfterExpiry()
+ {
+ tester.getApplication().getPageSettings().setRecreateMountedPagesAfterExpiry(false);
+ AbstractBookmarkableMapperStub mapper = new AbstractBookmarkableMapperStub();
+ mapper.processHybrid(new PageInfo(EXPIRED_ID), MockPage.class, null, NOT_RENDERED_COUNT);
+ Assert.fail("it shouldn't process expired pages if the app was flagged to not recreated mounted pages after expiry");
+ }
+
+ /** */
+ public class AbstractBookmarkableMapperStub extends AbstractBookmarkableMapper
+ {
+
+ @Override
+ protected UrlInfo parseRequest(Request request)
+ {
+ return null;
+ }
+
+ @Override
+ protected Url buildUrl(UrlInfo info)
+ {
+ return null;
+ }
+
+ @Override
+ protected boolean pageMustHaveBeenCreatedBookmarkable()
+ {
+ return false;
+ }
+
+ @Override
+ public int getCompatibilityScore(Request request)
+ {
+ return 0;
+ }
+
+ @Override
+ protected IRequestHandler processHybrid(PageInfo pageInfo,
+ Class<? extends IRequestablePage> pageClass, PageParameters pageParameters,
+ Integer renderCount)
+ {
+ return super.processHybrid(pageInfo, pageClass, pageParameters, renderCount);
+ }
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/7e5b2e31/wicket-core/src/test/java/org/apache/wicket/request/mapper/AbstractMapperTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/mapper/AbstractMapperTest.java b/wicket-core/src/test/java/org/apache/wicket/request/mapper/AbstractMapperTest.java
index 57455c4..bf40394 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/mapper/AbstractMapperTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/request/mapper/AbstractMapperTest.java
@@ -24,6 +24,8 @@ import org.apache.wicket.markup.html.link.ILinkListener;
import org.apache.wicket.request.Request;
import org.apache.wicket.request.Url;
import org.apache.wicket.request.component.IRequestablePage;
+import org.apache.wicket.settings.IPageSettings;
+import org.apache.wicket.settings.def.PageSettings;
import org.junit.Assert;
import org.junit.Before;
@@ -37,9 +39,11 @@ public abstract class AbstractMapperTest extends Assert
*/
public AbstractMapperTest()
{
+ settings.setRecreateMountedPagesAfterExpiry(true);
}
protected TestMapperContext context = new TestMapperContext();
+ protected IPageSettings settings = new PageSettings();
/**
* @throws Exception
http://git-wip-us.apache.org/repos/asf/wicket/blob/7e5b2e31/wicket-core/src/test/java/org/apache/wicket/request/mapper/BookmarkableMapperTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/mapper/BookmarkableMapperTest.java b/wicket-core/src/test/java/org/apache/wicket/request/mapper/BookmarkableMapperTest.java
index e6f3cc1..628ae04 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/mapper/BookmarkableMapperTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/request/mapper/BookmarkableMapperTest.java
@@ -31,6 +31,7 @@ import org.apache.wicket.request.handler.PageAndComponentProvider;
import org.apache.wicket.request.handler.PageProvider;
import org.apache.wicket.request.handler.RenderPageRequestHandler;
import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.request.mapper.parameter.PageParametersEncoder;
import org.junit.Test;
/**
@@ -39,7 +40,8 @@ import org.junit.Test;
public class BookmarkableMapperTest extends AbstractMapperTest
{
- private final BookmarkableMapper encoder = new BookmarkableMapper()
+ private final BookmarkableMapper encoder = new BookmarkableMapper(new PageParametersEncoder(),
+ settings)
{
@Override
protected IMapperContext getContext()
@@ -112,14 +114,12 @@ public class BookmarkableMapperTest extends AbstractMapperTest
IRequestHandler handler = encoder.mapRequest(getRequest(url));
assertTrue(handler instanceof RenderPageRequestHandler);
- context.setCurrentPageParameters(((RenderPageRequestHandler)handler).getPageParameters());
- IRequestablePage page = ((RenderPageRequestHandler)handler).getPage();
- checkPage(page, 15);
+ PageParameters pageParameters = ((RenderPageRequestHandler)handler).getPageParameters();
+ checkPage(((RenderPageRequestHandler)handler).getPage(), 15);
- PageParameters p = page.getPageParameters();
- assertEquals(2, p.getIndexedCount());
+ assertEquals(2, pageParameters.getIndexedCount());
- assertEquals(2, p.getNamedKeys().size());
+ assertEquals(2, pageParameters.getNamedKeys().size());
}
/**
http://git-wip-us.apache.org/repos/asf/wicket/blob/7e5b2e31/wicket-core/src/test/java/org/apache/wicket/request/mapper/MountedMapperTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/mapper/MountedMapperTest.java b/wicket-core/src/test/java/org/apache/wicket/request/mapper/MountedMapperTest.java
index ed9eddb..6c67134 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/mapper/MountedMapperTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/request/mapper/MountedMapperTest.java
@@ -33,6 +33,8 @@ import org.apache.wicket.request.handler.PageProvider;
import org.apache.wicket.request.handler.RenderPageRequestHandler;
import org.apache.wicket.request.http.WebRequest;
import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.request.mapper.parameter.PageParametersEncoder;
+import org.apache.wicket.util.ClassProvider;
import org.junit.Test;
/**
@@ -48,7 +50,8 @@ public class MountedMapperTest extends AbstractMapperTest
{
}
- private final MountedMapper encoder = new MountedMapper("/some/mount/path", MockPage.class)
+ private final MountedMapper encoder = new MountedMapper("/some/mount/path",
+ ClassProvider.of(MockPage.class), new PageParametersEncoder(), settings)
{
@Override
protected IMapperContext getContext()
@@ -56,15 +59,11 @@ public class MountedMapperTest extends AbstractMapperTest
return context;
}
- @Override
- boolean getRecreateMountedPagesAfterExpiry()
- {
- return true;
- }
};
private final MountedMapper placeholderEncoder = new MountedMapper(
- "/some/${param1}/path/${param2}", MockPage.class)
+ "/some/${param1}/path/${param2}", ClassProvider.of(MockPage.class),
+ new PageParametersEncoder(), settings)
{
@Override
protected IMapperContext getContext()
@@ -72,27 +71,17 @@ public class MountedMapperTest extends AbstractMapperTest
return context;
}
- @Override
- boolean getRecreateMountedPagesAfterExpiry()
- {
- return true;
- }
};
private final MountedMapper optionPlaceholderEncoder = new MountedMapper(
- "/some/#{param1}/path/${param2}/#{param3}", MockPage.class)
+ "/some/#{param1}/path/${param2}/#{param3}", ClassProvider.of(MockPage.class),
+ new PageParametersEncoder(), settings)
{
@Override
protected IMapperContext getContext()
{
return context;
}
-
- @Override
- boolean getRecreateMountedPagesAfterExpiry()
- {
- return true;
- }
};
/**
@@ -156,14 +145,13 @@ public class MountedMapperTest extends AbstractMapperTest
IRequestHandler handler = encoder.mapRequest(getRequest(url));
assertTrue(handler instanceof RenderPageRequestHandler);
- context.setCurrentPageParameters(((RenderPageRequestHandler)handler).getPageParameters());
- IRequestablePage page = ((RenderPageRequestHandler)handler).getPage();
- checkPage(page, 15);
+ PageParameters pageParameters = ((RenderPageRequestHandler)handler).getPageParameters();
- PageParameters p = page.getPageParameters();
- assertEquals(2, p.getIndexedCount());
+ checkPage(((RenderPageRequestHandler)handler).getPage(), 15);
- assertEquals(2, p.getNamedKeys().size());
+ assertEquals(2, pageParameters.getIndexedCount());
+
+ assertEquals(2, pageParameters.getNamedKeys().size());
}
/**
@@ -533,7 +521,8 @@ public class MountedMapperTest extends AbstractMapperTest
@Test(expected = IllegalArgumentException.class)
public void construct1()
{
- IRequestMapper e = new MountedMapper("", MockPage.class);
+ IRequestMapper e = new MountedMapper("", ClassProvider.of(MockPage.class),
+ new PageParametersEncoder(), settings);
}
/**
@@ -542,7 +531,8 @@ public class MountedMapperTest extends AbstractMapperTest
@Test
public void construct2()
{
- IRequestMapper homePageMapper = new MountedMapper("/", MockPage.class);
+ IRequestMapper homePageMapper = new MountedMapper("/", ClassProvider.of(MockPage.class),
+ new PageParametersEncoder(), settings);
assertNotNull(homePageMapper);
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/7e5b2e31/wicket-core/src/test/java/org/apache/wicket/request/mapper/PackageMapperTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/mapper/PackageMapperTest.java b/wicket-core/src/test/java/org/apache/wicket/request/mapper/PackageMapperTest.java
index 23a854b..fa8e6c8 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/mapper/PackageMapperTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/request/mapper/PackageMapperTest.java
@@ -32,6 +32,7 @@ import org.apache.wicket.request.handler.PageProvider;
import org.apache.wicket.request.handler.RenderPageRequestHandler;
import org.apache.wicket.request.mapper.PackageMapperTest.OuterPage.InnerPage;
import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.request.mapper.parameter.PageParametersEncoder;
import org.apache.wicket.util.lang.PackageName;
import org.junit.Test;
@@ -43,7 +44,8 @@ public class PackageMapperTest extends AbstractMapperTest
private static final String ALIAS = "alias";
- private final PackageMapper encoder = new PackageMapper(PackageName.forClass(MockPage.class))
+ private final PackageMapper encoder = new PackageMapper(PackageName.forClass(MockPage.class),
+ new PageParametersEncoder(), settings)
{
@Override
protected IMapperContext getContext()
@@ -55,7 +57,7 @@ public class PackageMapperTest extends AbstractMapperTest
private static final String PAGE_CLASS_NAME = MockPage.class.getSimpleName();
private final PackageMapper aliasEncoder = new PackageMapper(
- PackageName.forClass(MockPage.class))
+ PackageName.forClass(MockPage.class), new PageParametersEncoder(), settings)
{
@Override
protected IMapperContext getContext()
@@ -157,14 +159,12 @@ public class PackageMapperTest extends AbstractMapperTest
assertTrue(handler instanceof RenderPageRequestHandler);
- context.setCurrentPageParameters(((RenderPageRequestHandler)handler).getPageParameters());
- IRequestablePage page = ((RenderPageRequestHandler)handler).getPage();
- checkPage(page, 15);
+ PageParameters pageParameters = ((RenderPageRequestHandler)handler).getPageParameters();
+ checkPage(((RenderPageRequestHandler)handler).getPage(), 15);
- PageParameters p = page.getPageParameters();
- assertEquals(2, p.getIndexedCount());
+ assertEquals(2, pageParameters.getIndexedCount());
- assertEquals(2, p.getNamedKeys().size());
+ assertEquals(2, pageParameters.getNamedKeys().size());
}
/**
@@ -454,7 +454,7 @@ public class PackageMapperTest extends AbstractMapperTest
private final PackageMapper innerClassEncoder = new PackageMapper(
- PackageName.forClass(OuterPage.class))
+ PackageName.forClass(OuterPage.class), new PageParametersEncoder(), settings)
{
@Override
protected IMapperContext getContext()
http://git-wip-us.apache.org/repos/asf/wicket/blob/7e5b2e31/wicket-core/src/test/java/org/apache/wicket/request/mapper/TestMapperContext.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/mapper/TestMapperContext.java b/wicket-core/src/test/java/org/apache/wicket/request/mapper/TestMapperContext.java
index af3d4c1..9ad9b59 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/mapper/TestMapperContext.java
+++ b/wicket-core/src/test/java/org/apache/wicket/request/mapper/TestMapperContext.java
@@ -216,10 +216,15 @@ public class TestMapperContext implements IMapperContext
public TestMapperContext setCurrentPageParameters(PageParameters parameters)
{
- this.currentPageParameters = parameters;
+ currentPageParameters = parameters;
return this;
}
+ public void setCreateMockPageIfInstanceNotFound(boolean createMockPageIfInstanceNotFound)
+ {
+ this.createMockPageIfInstanceNotFound = createMockPageIfInstanceNotFound;
+ }
+
/**
*
* Adapts {@link PageProvider} to this {@link IMapperContext}
Re: git commit: WICKET-4932: testing recreateMountedPagesAfterExpiry
at AbstractBookmarkableMapper
Posted by Martin Grigorov <mg...@apache.org>.
Hi,
See my comments inline.
On Wed, Jan 9, 2013 at 9:45 PM, <pe...@apache.org> wrote:
> Updated Branches:
> refs/heads/sandbox/bookmarkable-callback-url [created] 7e5b2e317
>
>
> WICKET-4932: testing recreateMountedPagesAfterExpiry at
> AbstractBookmarkableMapper
>
>
> Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
> Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/7e5b2e31
> Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/7e5b2e31
> Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/7e5b2e31
>
> Branch: refs/heads/sandbox/bookmarkable-callback-url
> Commit: 7e5b2e31789b0bdb51570d9531a1a109de454f8f
> Parents: 66ebc4b
> Author: Pedro Santos <pe...@apache.com>
> Authored: Wed Jan 9 17:43:30 2013 -0200
> Committer: Pedro Santos <pe...@apache.com>
> Committed: Wed Jan 9 17:43:30 2013 -0200
>
> ----------------------------------------------------------------------
> ...ookmarkableListenerInterfaceRequestHandler.java | 8 ++
> .../request/mapper/AbstractBookmarkableMapper.java | 71 +++++++++---
> .../wicket/request/mapper/BookmarkableMapper.java | 15 +++-
> .../wicket/request/mapper/MountedMapper.java | 64 +++-------
> .../wicket/request/mapper/PackageMapper.java | 30 ++++-
> .../mapper/AbstractBookmarkableMapperTest.java | 92 +++++++++++++++
> .../wicket/request/mapper/AbstractMapperTest.java | 4 +
> .../request/mapper/BookmarkableMapperTest.java | 14 +-
> .../wicket/request/mapper/MountedMapperTest.java | 44 +++-----
> .../wicket/request/mapper/PackageMapperTest.java | 18 ++--
> .../wicket/request/mapper/TestMapperContext.java | 7 +-
> 11 files changed, 253 insertions(+), 114 deletions(-)
> ----------------------------------------------------------------------
>
>
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/7e5b2e31/wicket-core/src/main/java/org/apache/wicket/request/handler/BookmarkableListenerInterfaceRequestHandler.java
> ----------------------------------------------------------------------
> diff --git
> a/wicket-core/src/main/java/org/apache/wicket/request/handler/BookmarkableListenerInterfaceRequestHandler.java
> b/wicket-core/src/main/java/org/apache/wicket/request/handler/BookmarkableListenerInterfaceRequestHandler.java
> index 1767a88..651bc66 100644
> ---
> a/wicket-core/src/main/java/org/apache/wicket/request/handler/BookmarkableListenerInterfaceRequestHandler.java
> +++
> b/wicket-core/src/main/java/org/apache/wicket/request/handler/BookmarkableListenerInterfaceRequestHandler.java
> @@ -171,4 +171,12 @@ public class
> BookmarkableListenerInterfaceRequestHandler
> {
> return pageComponentProvider.getRenderCount();
> }
> +
> + public static BookmarkableListenerInterfaceRequestHandler wrap(
> + ListenerInterfaceRequestHandler handler)
> + {
> + return new BookmarkableListenerInterfaceRequestHandler(new
> PageAndComponentProvider(
> + handler.getPage(), handler.getComponent()),
> handler.getListenerInterface(),
> + handler.getBehaviorIndex());
> + }
> }
>
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/7e5b2e31/wicket-core/src/main/java/org/apache/wicket/request/mapper/AbstractBookmarkableMapper.java
> ----------------------------------------------------------------------
> diff --git
> a/wicket-core/src/main/java/org/apache/wicket/request/mapper/AbstractBookmarkableMapper.java
> b/wicket-core/src/main/java/org/apache/wicket/request/mapper/AbstractBookmarkableMapper.java
> index 9042158..7ae520d 100644
> ---
> a/wicket-core/src/main/java/org/apache/wicket/request/mapper/AbstractBookmarkableMapper.java
> +++
> b/wicket-core/src/main/java/org/apache/wicket/request/mapper/AbstractBookmarkableMapper.java
> @@ -17,6 +17,8 @@
> package org.apache.wicket.request.mapper;
>
> import org.apache.wicket.RequestListenerInterface;
> +import org.apache.wicket.protocol.http.PageExpiredException;
> +import org.apache.wicket.protocol.http.WebApplication;
> import org.apache.wicket.request.IRequestHandler;
> import org.apache.wicket.request.IRequestHandlerDelegate;
> import org.apache.wicket.request.IRequestMapper;
> @@ -35,6 +37,7 @@ import
> org.apache.wicket.request.mapper.info.ComponentInfo;
> import org.apache.wicket.request.mapper.info.PageComponentInfo;
> import org.apache.wicket.request.mapper.info.PageInfo;
> import org.apache.wicket.request.mapper.parameter.PageParameters;
> +import org.apache.wicket.settings.IPageSettings;
> import org.apache.wicket.util.lang.Args;
> import org.slf4j.Logger;
> import org.slf4j.LoggerFactory;
> @@ -47,6 +50,7 @@ import org.slf4j.LoggerFactory;
> public abstract class AbstractBookmarkableMapper extends
> AbstractComponentMapper
> {
> private static Logger logger =
> LoggerFactory.getLogger(AbstractBookmarkableMapper.class);
> + private IPageSettings settings;
>
I'd make it 'final'
>
> /**
> * Represents information stored in URL.
> @@ -138,6 +142,17 @@ public abstract class AbstractBookmarkableMapper
> extends AbstractComponentMapper
> */
> public AbstractBookmarkableMapper()
> {
> + this(WebApplication.get().getPageSettings());
>
Application.class is enough to get these settings.
> + }
> +
> + /**
> + * Construct.
> + *
> + * @param settings
> + */
> + public AbstractBookmarkableMapper(IPageSettings settings)
> + {
> + this.settings = settings;
> }
>
> /**
> @@ -207,7 +222,15 @@ public abstract class AbstractBookmarkableMapper
> extends AbstractComponentMapper
> PageProvider provider = new
> PageProvider(pageInfo.getPageId(), pageClass, pageParameters,
> renderCount);
> provider.setPageSource(getContext());
> - return new RenderPageRequestHandler(provider);
> + if (provider.isNewPageInstance() &&
> !settings.getRecreateMountedPagesAfterExpiry())
> + {
> + throw new
> PageExpiredException(String.format("Bookmarkable page id '%d' has expired.",
>
"Page with id '%s' has expired" ?
> + pageInfo.getPageId()));
> + }
> + else
> + {
> + return new RenderPageRequestHandler(provider);
> + }
> }
>
> /**
> @@ -302,6 +325,7 @@ public abstract class AbstractBookmarkableMapper
> extends AbstractComponentMapper
> return null;
> }
>
> +// TODO remove since we are duplicating an API here
> protected boolean checkPageInstance(IRequestablePage page)
> {
> return page != null && checkPageClass(page.getClass());
> @@ -382,30 +406,43 @@ public abstract class AbstractBookmarkableMapper
> extends AbstractComponentMapper
> {
> // listener interface URL with page class
> information
> BookmarkableListenerInterfaceRequestHandler
> handler = (BookmarkableListenerInterfaceRequestHandler)requestHandler;
> - Class<? extends IRequestablePage> pageClass =
> handler.getPageClass();
> -
> - if (!checkPageClass(pageClass))
> + if (checkPageClass(handler.getPageClass()))
> {
> - return null;
> + return mapBookmarkableHandler(handler);
> }
> -
> - Integer renderCount = null;
> - if
> (handler.getListenerInterface().isIncludeRenderCount())
> + }
> + else if (requestHandler instanceof
> ListenerInterfaceRequestHandler &&
> + settings.getRecreateMountedPagesAfterExpiry())
> + {
> + ListenerInterfaceRequestHandler handler =
> (ListenerInterfaceRequestHandler)requestHandler;
> + if (checkPageClass(handler.getPageClass()))
> {
> - renderCount = handler.getRenderCount();
> + return
> mapBookmarkableHandler(BookmarkableListenerInterfaceRequestHandler.wrap(handler));
> }
> + }
> + return null;
> + }
>
> - PageInfo pageInfo = getPageInfo(handler);
> - ComponentInfo componentInfo = new
> ComponentInfo(renderCount,
> -
> requestListenerInterfaceToString(handler.getListenerInterface()),
> - handler.getComponentPath(),
> handler.getBehaviorIndex());
> + protected Url
> mapBookmarkableHandler(BookmarkableListenerInterfaceRequestHandler handler)
> + {
> + String componentPath = handler.getComponentPath();
> + RequestListenerInterface listenerInterface =
> handler.getListenerInterface();
>
> - UrlInfo urlInfo = new UrlInfo(new
> PageComponentInfo(pageInfo, componentInfo),
> - pageClass, handler.getPageParameters());
> - return buildUrl(urlInfo);
> + Integer renderCount = null;
> + if (listenerInterface.isIncludeRenderCount())
> + {
> + renderCount = handler.getRenderCount();
> }
>
> - return null;
> + PageInfo pageInfo = getPageInfo(handler);
> + ComponentInfo componentInfo = new
> ComponentInfo(renderCount,
> +
> requestListenerInterfaceToString(listenerInterface), componentPath,
> + handler.getBehaviorIndex());
> + PageComponentInfo pageComponentInfo = new
> PageComponentInfo(pageInfo, componentInfo);
> + PageParameters parameters = new
> PageParameters(handler.getPageParameters());
> + UrlInfo urlInfo = new UrlInfo(pageComponentInfo,
> handler.getPageClass(),
> + parameters.mergeWith(handler.getPageParameters()));
> + return buildUrl(urlInfo);
> }
>
> protected final PageInfo getPageInfo(IPageRequestHandler handler)
>
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/7e5b2e31/wicket-core/src/main/java/org/apache/wicket/request/mapper/BookmarkableMapper.java
> ----------------------------------------------------------------------
> diff --git
> a/wicket-core/src/main/java/org/apache/wicket/request/mapper/BookmarkableMapper.java
> b/wicket-core/src/main/java/org/apache/wicket/request/mapper/BookmarkableMapper.java
> index 759f389..4ae4bf1 100644
> ---
> a/wicket-core/src/main/java/org/apache/wicket/request/mapper/BookmarkableMapper.java
> +++
> b/wicket-core/src/main/java/org/apache/wicket/request/mapper/BookmarkableMapper.java
> @@ -24,6 +24,7 @@ import
> org.apache.wicket.request.mapper.info.PageComponentInfo;
> 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.settings.IPageSettings;
> import org.apache.wicket.util.lang.Args;
>
> /**
> @@ -53,9 +54,11 @@ public class BookmarkableMapper extends
> AbstractBookmarkableMapper
> * Construct.
> *
> * @param pageParametersEncoder
> + * @param settings
> */
> - public BookmarkableMapper(IPageParametersEncoder
> pageParametersEncoder)
> + public BookmarkableMapper(IPageParametersEncoder
> pageParametersEncoder, IPageSettings settings)
> {
> + super(settings);
> Args.notNull(pageParametersEncoder,
> "pageParametersEncoder");
>
> this.pageParametersEncoder = pageParametersEncoder;
> @@ -63,6 +66,16 @@ public class BookmarkableMapper extends
> AbstractBookmarkableMapper
>
> /**
> * Construct.
> + *
> + * @param pageParametersEncoder
> + */
> + public BookmarkableMapper(IPageParametersEncoder
> pageParametersEncoder)
> + {
> + this(pageParametersEncoder,
> Application.get().getPageSettings());
> + }
> +
> + /**
> + * Construct.
> */
> public BookmarkableMapper()
> {
>
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/7e5b2e31/wicket-core/src/main/java/org/apache/wicket/request/mapper/MountedMapper.java
> ----------------------------------------------------------------------
> diff --git
> a/wicket-core/src/main/java/org/apache/wicket/request/mapper/MountedMapper.java
> b/wicket-core/src/main/java/org/apache/wicket/request/mapper/MountedMapper.java
> index 3d40023..6ff64f8 100644
> ---
> a/wicket-core/src/main/java/org/apache/wicket/request/mapper/MountedMapper.java
> +++
> b/wicket-core/src/main/java/org/apache/wicket/request/mapper/MountedMapper.java
> @@ -20,18 +20,14 @@ import java.util.ArrayList;
> import java.util.List;
>
> import org.apache.wicket.Application;
> -import org.apache.wicket.RequestListenerInterface;
> -import org.apache.wicket.request.IRequestHandler;
> import org.apache.wicket.request.Request;
> import org.apache.wicket.request.Url;
> import org.apache.wicket.request.component.IRequestablePage;
> -import org.apache.wicket.request.handler.ListenerInterfaceRequestHandler;
> -import org.apache.wicket.request.mapper.info.ComponentInfo;
> import org.apache.wicket.request.mapper.info.PageComponentInfo;
> -import org.apache.wicket.request.mapper.info.PageInfo;
> 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.settings.IPageSettings;
> import org.apache.wicket.util.ClassProvider;
> import org.apache.wicket.util.lang.Args;
> import org.apache.wicket.util.string.Strings;
> @@ -186,6 +182,24 @@ public class MountedMapper extends
> AbstractBookmarkableMapper
> ClassProvider<? extends IRequestablePage>
> pageClassProvider,
> IPageParametersEncoder pageParametersEncoder)
> {
> + this(mountPath, pageClassProvider, pageParametersEncoder,
> Application.get()
> + .getPageSettings());
> +
> + }
> +
> + /**
> + * Construct.
> + *
> + * @param mountPath
> + * @param pageClassProvider
> + * @param pageParametersEncoder
> + * @param settings
> + */
> + public MountedMapper(String mountPath,
> + ClassProvider<? extends IRequestablePage>
> pageClassProvider,
> + IPageParametersEncoder pageParametersEncoder,
> IPageSettings settings)
> + {
> + super(settings);
> Args.notEmpty(mountPath, "mountPath");
> Args.notNull(pageClassProvider, "pageClassProvider");
> Args.notNull(pageParametersEncoder,
> "pageParametersEncoder");
> @@ -360,46 +374,6 @@ public class MountedMapper extends
> AbstractBookmarkableMapper
> return new PageParameters();
> }
>
> - @Override
> - public Url mapHandler(IRequestHandler requestHandler)
> - {
> - Url url = super.mapHandler(requestHandler);
> -
> - if (url == null && requestHandler instanceof
> ListenerInterfaceRequestHandler &&
> - getRecreateMountedPagesAfterExpiry())
> - {
> - ListenerInterfaceRequestHandler handler =
> (ListenerInterfaceRequestHandler)requestHandler;
> - IRequestablePage page = handler.getPage();
> - if (checkPageInstance(page))
> - {
> - String componentPath =
> handler.getComponentPath();
> - RequestListenerInterface listenerInterface
> = handler.getListenerInterface();
> -
> - Integer renderCount = null;
> - if
> (listenerInterface.isIncludeRenderCount())
> - {
> - renderCount =
> page.getRenderCount();
> - }
> -
> - PageInfo pageInfo = getPageInfo(handler);
> - ComponentInfo componentInfo = new
> ComponentInfo(renderCount,
> -
> requestListenerInterfaceToString(listenerInterface), componentPath,
> - handler.getBehaviorIndex());
> - PageComponentInfo pageComponentInfo = new
> PageComponentInfo(pageInfo, componentInfo);
> - PageParameters parameters = new
> PageParameters(page.getPageParameters());
> - UrlInfo urlInfo = new
> UrlInfo(pageComponentInfo, page.getClass(),
> -
> parameters.mergeWith(handler.getPageParameters()));
> - url = buildUrl(urlInfo);
> - }
> - }
> -
> - return url;
> - }
> -
> - boolean getRecreateMountedPagesAfterExpiry()
> - {
> - return
> Application.get().getPageSettings().getRecreateMountedPagesAfterExpiry();
> - }
>
> /**
> * @see
> org.apache.wicket.request.mapper.AbstractBookmarkableMapper#buildUrl(org.apache.wicket.request.mapper.AbstractBookmarkableMapper.UrlInfo)
>
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/7e5b2e31/wicket-core/src/main/java/org/apache/wicket/request/mapper/PackageMapper.java
> ----------------------------------------------------------------------
> diff --git
> a/wicket-core/src/main/java/org/apache/wicket/request/mapper/PackageMapper.java
> b/wicket-core/src/main/java/org/apache/wicket/request/mapper/PackageMapper.java
> index bfacbcb..5fed6d5 100644
> ---
> a/wicket-core/src/main/java/org/apache/wicket/request/mapper/PackageMapper.java
> +++
> b/wicket-core/src/main/java/org/apache/wicket/request/mapper/PackageMapper.java
> @@ -18,6 +18,7 @@ package org.apache.wicket.request.mapper;
>
> import java.lang.reflect.Modifier;
>
> +import org.apache.wicket.Application;
> import org.apache.wicket.protocol.http.WebApplication;
> import org.apache.wicket.request.Request;
> import org.apache.wicket.request.Url;
> @@ -26,6 +27,7 @@ import
> org.apache.wicket.request.mapper.info.PageComponentInfo;
> 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.settings.IPageSettings;
> import org.apache.wicket.util.lang.Args;
> import org.apache.wicket.util.lang.PackageName;
>
> @@ -88,6 +90,20 @@ public class PackageMapper extends
> AbstractBookmarkableMapper
> public PackageMapper(final PackageName packageName,
> final IPageParametersEncoder pageParametersEncoder)
> {
> + this(packageName, pageParametersEncoder,
> Application.get().getPageSettings());
> + }
> +
> + /**
> + * Construct.
> + *
> + * @param packageName
> + * @param pageParametersEncoder
> + * @param settigns
> + */
> + public PackageMapper(final PackageName packageName,
> + final IPageParametersEncoder pageParametersEncoder,
> IPageSettings settigns)
> + {
> + super(settigns);
> Args.notNull(packageName, "packageName");
> Args.notNull(pageParametersEncoder,
> "pageParametersEncoder");
>
> @@ -137,7 +153,7 @@ public class PackageMapper extends
> AbstractBookmarkableMapper
>
> // load the page class
> String className = url.getSegments().get(0);
> -
> +
> if (isValidClassName(className) == false)
> {
> return null;
> @@ -161,13 +177,13 @@ public class PackageMapper extends
> AbstractBookmarkableMapper
> }
>
> /**
> - * filter out invalid class names for package mapper. getting
> trash for class names
> - * can e.g. happen when the home page is in the same package that
> is mounted by package mapper
> - * but the request was previously mapped by e.g. {@link
> HomePageMapper}. We then get some
> - * strange url like '/example/..' and wicket tries to look up
> class name '..'.
> + * filter out invalid class names for package mapper. getting
> trash for class names can e.g.
> + * happen when the home page is in the same package that is
> mounted by package mapper but the
> + * request was previously mapped by e.g. {@link HomePageMapper}.
> We then get some strange url
> + * like '/example/..' and wicket tries to look up class name '..'.
> * <p/>
> - * @see <a href="
> https://issues.apache.org/jira/browse/WICKET-4303">WICKET-4303</a>
> - * <p/>
> + *
> + * @see <a href="https://issues.apache.org/jira/browse/WICKET-4303">WICKET-4303</a>
> <p/>
> */
> private boolean isValidClassName(String className)
> {
>
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/7e5b2e31/wicket-core/src/test/java/org/apache/wicket/request/mapper/AbstractBookmarkableMapperTest.java
> ----------------------------------------------------------------------
> diff --git
> a/wicket-core/src/test/java/org/apache/wicket/request/mapper/AbstractBookmarkableMapperTest.java
> b/wicket-core/src/test/java/org/apache/wicket/request/mapper/AbstractBookmarkableMapperTest.java
> new file mode 100644
> index 0000000..c2de418
> --- /dev/null
> +++
> b/wicket-core/src/test/java/org/apache/wicket/request/mapper/AbstractBookmarkableMapperTest.java
> @@ -0,0 +1,92 @@
> +package org.apache.wicket.request.mapper;
> +
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one or more
> + * contributor license agreements. See the NOTICE file distributed with
> + * this work for additional information regarding copyright ownership.
> + * The ASF licenses this file to You under the Apache License, Version 2.0
> + * (the "License"); you may not use this file except in compliance with
> + * the License. You may obtain a copy of the License at
> + *
> + * http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing, software
> + * distributed under the License is distributed on an "AS IS" BASIS,
> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
> + * See the License for the specific language governing permissions and
> + * limitations under the License.
> + */
> +
> +import org.apache.wicket.MockPage;
> +import org.apache.wicket.WicketTestCase;
> +import org.apache.wicket.protocol.http.PageExpiredException;
> +import org.apache.wicket.request.IRequestHandler;
> +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.info.PageInfo;
> +import org.apache.wicket.request.mapper.parameter.PageParameters;
> +import org.junit.Assert;
> +import org.junit.Test;
> +
> +/**
> + * @author pedrosans
> + */
> +public class AbstractBookmarkableMapperTest extends WicketTestCase
> +{
> +
> + private static final int NOT_RENDERED_COUNT = 2;
> + private static final int EXPIRED_ID = 2;
> +
> +
> + /**
> + * <a href="https://issues.apache.org/jira/browse/WICKET-4932
> ">WICKET-4932</a>
> + */
> + @Test(expected = PageExpiredException.class)
> + public void
> itFailsToProcessAnExpiredPageIfShouldNotRecreateMountedPagesAfterExpiry()
> + {
> +
> tester.getApplication().getPageSettings().setRecreateMountedPagesAfterExpiry(false);
> + AbstractBookmarkableMapperStub mapper = new
> AbstractBookmarkableMapperStub();
> + mapper.processHybrid(new PageInfo(EXPIRED_ID),
> MockPage.class, null, NOT_RENDERED_COUNT);
> + Assert.fail("it shouldn't process expired pages if the app
> was flagged to not recreated mounted pages after expiry");
> + }
> +
> + /** */
>
Add a comment for the purpose of this class
> + public class AbstractBookmarkableMapperStub extends
> AbstractBookmarkableMapper
>
I'd make it private static.
> + {
> +
> + @Override
> + protected UrlInfo parseRequest(Request request)
> + {
> + return null;
> + }
> +
> + @Override
> + protected Url buildUrl(UrlInfo info)
> + {
> + return null;
> + }
> +
> + @Override
> + protected boolean pageMustHaveBeenCreatedBookmarkable()
> + {
> + return false;
> + }
> +
> + @Override
> + public int getCompatibilityScore(Request request)
> + {
> + return 0;
> + }
> +
> + @Override
> + protected IRequestHandler processHybrid(PageInfo pageInfo,
> + Class<? extends IRequestablePage> pageClass,
> PageParameters pageParameters,
> + Integer renderCount)
> + {
> + return super.processHybrid(pageInfo, pageClass,
> pageParameters, renderCount);
> + }
> +
> + }
> +
> +}
>
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/7e5b2e31/wicket-core/src/test/java/org/apache/wicket/request/mapper/AbstractMapperTest.java
> ----------------------------------------------------------------------
> diff --git
> a/wicket-core/src/test/java/org/apache/wicket/request/mapper/AbstractMapperTest.java
> b/wicket-core/src/test/java/org/apache/wicket/request/mapper/AbstractMapperTest.java
> index 57455c4..bf40394 100644
> ---
> a/wicket-core/src/test/java/org/apache/wicket/request/mapper/AbstractMapperTest.java
> +++
> b/wicket-core/src/test/java/org/apache/wicket/request/mapper/AbstractMapperTest.java
> @@ -24,6 +24,8 @@ import org.apache.wicket.markup.html.link.ILinkListener;
> import org.apache.wicket.request.Request;
> import org.apache.wicket.request.Url;
> import org.apache.wicket.request.component.IRequestablePage;
> +import org.apache.wicket.settings.IPageSettings;
> +import org.apache.wicket.settings.def.PageSettings;
> import org.junit.Assert;
> import org.junit.Before;
>
> @@ -37,9 +39,11 @@ public abstract class AbstractMapperTest extends Assert
> */
> public AbstractMapperTest()
> {
> + settings.setRecreateMountedPagesAfterExpiry(true);
> }
>
> protected TestMapperContext context = new TestMapperContext();
> + protected IPageSettings settings = new PageSettings();
>
> /**
> * @throws Exception
>
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/7e5b2e31/wicket-core/src/test/java/org/apache/wicket/request/mapper/BookmarkableMapperTest.java
> ----------------------------------------------------------------------
> diff --git
> a/wicket-core/src/test/java/org/apache/wicket/request/mapper/BookmarkableMapperTest.java
> b/wicket-core/src/test/java/org/apache/wicket/request/mapper/BookmarkableMapperTest.java
> index e6f3cc1..628ae04 100644
> ---
> a/wicket-core/src/test/java/org/apache/wicket/request/mapper/BookmarkableMapperTest.java
> +++
> b/wicket-core/src/test/java/org/apache/wicket/request/mapper/BookmarkableMapperTest.java
> @@ -31,6 +31,7 @@ import
> org.apache.wicket.request.handler.PageAndComponentProvider;
> import org.apache.wicket.request.handler.PageProvider;
> import org.apache.wicket.request.handler.RenderPageRequestHandler;
> import org.apache.wicket.request.mapper.parameter.PageParameters;
> +import org.apache.wicket.request.mapper.parameter.PageParametersEncoder;
> import org.junit.Test;
>
> /**
> @@ -39,7 +40,8 @@ import org.junit.Test;
> public class BookmarkableMapperTest extends AbstractMapperTest
> {
>
> - private final BookmarkableMapper encoder = new BookmarkableMapper()
> + private final BookmarkableMapper encoder = new
> BookmarkableMapper(new PageParametersEncoder(),
> + settings)
> {
> @Override
> protected IMapperContext getContext()
> @@ -112,14 +114,12 @@ public class BookmarkableMapperTest extends
> AbstractMapperTest
> IRequestHandler handler =
> encoder.mapRequest(getRequest(url));
>
> assertTrue(handler instanceof RenderPageRequestHandler);
> -
> context.setCurrentPageParameters(((RenderPageRequestHandler)handler).getPageParameters());
> - IRequestablePage page =
> ((RenderPageRequestHandler)handler).getPage();
> - checkPage(page, 15);
> + PageParameters pageParameters =
> ((RenderPageRequestHandler)handler).getPageParameters();
> + checkPage(((RenderPageRequestHandler)handler).getPage(),
> 15);
>
> - PageParameters p = page.getPageParameters();
> - assertEquals(2, p.getIndexedCount());
> + assertEquals(2, pageParameters.getIndexedCount());
>
> - assertEquals(2, p.getNamedKeys().size());
> + assertEquals(2, pageParameters.getNamedKeys().size());
> }
>
> /**
>
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/7e5b2e31/wicket-core/src/test/java/org/apache/wicket/request/mapper/MountedMapperTest.java
> ----------------------------------------------------------------------
> diff --git
> a/wicket-core/src/test/java/org/apache/wicket/request/mapper/MountedMapperTest.java
> b/wicket-core/src/test/java/org/apache/wicket/request/mapper/MountedMapperTest.java
> index ed9eddb..6c67134 100644
> ---
> a/wicket-core/src/test/java/org/apache/wicket/request/mapper/MountedMapperTest.java
> +++
> b/wicket-core/src/test/java/org/apache/wicket/request/mapper/MountedMapperTest.java
> @@ -33,6 +33,8 @@ import org.apache.wicket.request.handler.PageProvider;
> import org.apache.wicket.request.handler.RenderPageRequestHandler;
> import org.apache.wicket.request.http.WebRequest;
> import org.apache.wicket.request.mapper.parameter.PageParameters;
> +import org.apache.wicket.request.mapper.parameter.PageParametersEncoder;
> +import org.apache.wicket.util.ClassProvider;
> import org.junit.Test;
>
> /**
> @@ -48,7 +50,8 @@ public class MountedMapperTest extends AbstractMapperTest
> {
> }
>
> - private final MountedMapper encoder = new
> MountedMapper("/some/mount/path", MockPage.class)
> + private final MountedMapper encoder = new
> MountedMapper("/some/mount/path",
> + ClassProvider.of(MockPage.class), new
> PageParametersEncoder(), settings)
> {
> @Override
> protected IMapperContext getContext()
> @@ -56,15 +59,11 @@ public class MountedMapperTest extends
> AbstractMapperTest
> return context;
> }
>
> - @Override
> - boolean getRecreateMountedPagesAfterExpiry()
> - {
> - return true;
> - }
> };
>
> private final MountedMapper placeholderEncoder = new MountedMapper(
> - "/some/${param1}/path/${param2}", MockPage.class)
> + "/some/${param1}/path/${param2}",
> ClassProvider.of(MockPage.class),
> + new PageParametersEncoder(), settings)
> {
> @Override
> protected IMapperContext getContext()
> @@ -72,27 +71,17 @@ public class MountedMapperTest extends
> AbstractMapperTest
> return context;
> }
>
> - @Override
> - boolean getRecreateMountedPagesAfterExpiry()
> - {
> - return true;
> - }
> };
>
> private final MountedMapper optionPlaceholderEncoder = new
> MountedMapper(
> - "/some/#{param1}/path/${param2}/#{param3}", MockPage.class)
> + "/some/#{param1}/path/${param2}/#{param3}",
> ClassProvider.of(MockPage.class),
> + new PageParametersEncoder(), settings)
> {
> @Override
> protected IMapperContext getContext()
> {
> return context;
> }
> -
> - @Override
> - boolean getRecreateMountedPagesAfterExpiry()
> - {
> - return true;
> - }
> };
>
> /**
> @@ -156,14 +145,13 @@ public class MountedMapperTest extends
> AbstractMapperTest
> IRequestHandler handler =
> encoder.mapRequest(getRequest(url));
>
> assertTrue(handler instanceof RenderPageRequestHandler);
> -
> context.setCurrentPageParameters(((RenderPageRequestHandler)handler).getPageParameters());
> - IRequestablePage page =
> ((RenderPageRequestHandler)handler).getPage();
> - checkPage(page, 15);
> + PageParameters pageParameters =
> ((RenderPageRequestHandler)handler).getPageParameters();
>
> - PageParameters p = page.getPageParameters();
> - assertEquals(2, p.getIndexedCount());
> + checkPage(((RenderPageRequestHandler)handler).getPage(),
> 15);
>
> - assertEquals(2, p.getNamedKeys().size());
> + assertEquals(2, pageParameters.getIndexedCount());
> +
> + assertEquals(2, pageParameters.getNamedKeys().size());
> }
>
> /**
> @@ -533,7 +521,8 @@ public class MountedMapperTest extends
> AbstractMapperTest
> @Test(expected = IllegalArgumentException.class)
> public void construct1()
> {
> - IRequestMapper e = new MountedMapper("", MockPage.class);
> + IRequestMapper e = new MountedMapper("",
> ClassProvider.of(MockPage.class),
> + new PageParametersEncoder(), settings);
> }
>
> /**
> @@ -542,7 +531,8 @@ public class MountedMapperTest extends
> AbstractMapperTest
> @Test
> public void construct2()
> {
> - IRequestMapper homePageMapper = new MountedMapper("/",
> MockPage.class);
> + IRequestMapper homePageMapper = new MountedMapper("/",
> ClassProvider.of(MockPage.class),
> + new PageParametersEncoder(), settings);
> assertNotNull(homePageMapper);
> }
>
>
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/7e5b2e31/wicket-core/src/test/java/org/apache/wicket/request/mapper/PackageMapperTest.java
> ----------------------------------------------------------------------
> diff --git
> a/wicket-core/src/test/java/org/apache/wicket/request/mapper/PackageMapperTest.java
> b/wicket-core/src/test/java/org/apache/wicket/request/mapper/PackageMapperTest.java
> index 23a854b..fa8e6c8 100644
> ---
> a/wicket-core/src/test/java/org/apache/wicket/request/mapper/PackageMapperTest.java
> +++
> b/wicket-core/src/test/java/org/apache/wicket/request/mapper/PackageMapperTest.java
> @@ -32,6 +32,7 @@ import org.apache.wicket.request.handler.PageProvider;
> import org.apache.wicket.request.handler.RenderPageRequestHandler;
> import
> org.apache.wicket.request.mapper.PackageMapperTest.OuterPage.InnerPage;
> import org.apache.wicket.request.mapper.parameter.PageParameters;
> +import org.apache.wicket.request.mapper.parameter.PageParametersEncoder;
> import org.apache.wicket.util.lang.PackageName;
> import org.junit.Test;
>
> @@ -43,7 +44,8 @@ public class PackageMapperTest extends AbstractMapperTest
>
> private static final String ALIAS = "alias";
>
> - private final PackageMapper encoder = new
> PackageMapper(PackageName.forClass(MockPage.class))
> + private final PackageMapper encoder = new
> PackageMapper(PackageName.forClass(MockPage.class),
> + new PageParametersEncoder(), settings)
> {
> @Override
> protected IMapperContext getContext()
> @@ -55,7 +57,7 @@ public class PackageMapperTest extends AbstractMapperTest
> private static final String PAGE_CLASS_NAME =
> MockPage.class.getSimpleName();
>
> private final PackageMapper aliasEncoder = new PackageMapper(
> - PackageName.forClass(MockPage.class))
> + PackageName.forClass(MockPage.class), new
> PageParametersEncoder(), settings)
> {
> @Override
> protected IMapperContext getContext()
> @@ -157,14 +159,12 @@ public class PackageMapperTest extends
> AbstractMapperTest
>
> assertTrue(handler instanceof RenderPageRequestHandler);
>
> -
> context.setCurrentPageParameters(((RenderPageRequestHandler)handler).getPageParameters());
> - IRequestablePage page =
> ((RenderPageRequestHandler)handler).getPage();
> - checkPage(page, 15);
> + PageParameters pageParameters =
> ((RenderPageRequestHandler)handler).getPageParameters();
> + checkPage(((RenderPageRequestHandler)handler).getPage(),
> 15);
>
> - PageParameters p = page.getPageParameters();
> - assertEquals(2, p.getIndexedCount());
> + assertEquals(2, pageParameters.getIndexedCount());
>
> - assertEquals(2, p.getNamedKeys().size());
> + assertEquals(2, pageParameters.getNamedKeys().size());
> }
>
> /**
> @@ -454,7 +454,7 @@ public class PackageMapperTest extends
> AbstractMapperTest
>
>
> private final PackageMapper innerClassEncoder = new PackageMapper(
> - PackageName.forClass(OuterPage.class))
> + PackageName.forClass(OuterPage.class), new
> PageParametersEncoder(), settings)
> {
> @Override
> protected IMapperContext getContext()
>
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/7e5b2e31/wicket-core/src/test/java/org/apache/wicket/request/mapper/TestMapperContext.java
> ----------------------------------------------------------------------
> diff --git
> a/wicket-core/src/test/java/org/apache/wicket/request/mapper/TestMapperContext.java
> b/wicket-core/src/test/java/org/apache/wicket/request/mapper/TestMapperContext.java
> index af3d4c1..9ad9b59 100644
> ---
> a/wicket-core/src/test/java/org/apache/wicket/request/mapper/TestMapperContext.java
> +++
> b/wicket-core/src/test/java/org/apache/wicket/request/mapper/TestMapperContext.java
> @@ -216,10 +216,15 @@ public class TestMapperContext implements
> IMapperContext
>
> public TestMapperContext setCurrentPageParameters(PageParameters
> parameters)
> {
> - this.currentPageParameters = parameters;
> + currentPageParameters = parameters;
> return this;
> }
>
> + public void setCreateMockPageIfInstanceNotFound(boolean
> createMockPageIfInstanceNotFound)
> + {
> + this.createMockPageIfInstanceNotFound =
> createMockPageIfInstanceNotFound;
> + }
> +
> /**
> *
> * Adapts {@link PageProvider} to this {@link IMapperContext}
>
>
--
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com <http://jweekend.com/>