Updated Branches: refs/heads/master 88e81c0d5 -> f20b2d706
=WICKET-4932: testing recreateMountedPagesAfterExpiry before to recreate a mounted page Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/f20b2d70 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/f20b2d70 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/f20b2d70 Branch: refs/heads/master Commit: f20b2d706bde4d3bc34f6ef984a14bb5bb621555 Parents: 88e81c0 Author: Pedro Santos <[email protected]> Authored: Sun Jan 6 15:19:06 2013 -0200 Committer: Pedro Santos <[email protected]> Committed: Sun Jan 6 15:19:06 2013 -0200 ---------------------------------------------------------------------- .../request/mapper/AbstractBookmarkableMapper.java | 33 ++++-- .../mapper/AbstractBookmarkableMapperTest.java | 91 +++++++++++++++ 2 files changed, 113 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/f20b2d70/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java index 86c64a6..56e27d4 100644 --- a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java +++ b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java @@ -24,6 +24,8 @@ import org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler; import org.apache.wicket.core.request.handler.PageAndComponentProvider; import org.apache.wicket.core.request.handler.PageProvider; import org.apache.wicket.core.request.handler.RenderPageRequestHandler; +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; @@ -41,7 +43,7 @@ import org.slf4j.LoggerFactory; /** * Abstract encoder for Bookmarkable, Hybrid and BookmarkableListenerInterface URLs. - * + * * @author Matej Knopp */ public abstract class AbstractBookmarkableMapper extends AbstractComponentMapper @@ -50,7 +52,7 @@ public abstract class AbstractBookmarkableMapper extends AbstractComponentMapper /** * Represents information stored in URL. - * + * * @author Matej Knopp */ protected static final class UrlInfo @@ -61,7 +63,7 @@ public abstract class AbstractBookmarkableMapper extends AbstractComponentMapper /** * Construct. - * + * * @param pageComponentInfo * optional parameter providing the page instance and component information * @param pageClass @@ -82,7 +84,7 @@ public abstract class AbstractBookmarkableMapper extends AbstractComponentMapper /** * Cleans the original parameters from entries used by Wicket internals. - * + * * @param originalParameters * the current request's non-modified parameters * @return all parameters but Wicket internal ones @@ -142,7 +144,7 @@ public abstract class AbstractBookmarkableMapper extends AbstractComponentMapper /** * Parse the given request to an {@link UrlInfo} instance. - * + * * @param request * @return UrlInfo instance or <code>null</code> if this encoder can not handle the request */ @@ -151,7 +153,7 @@ public abstract class AbstractBookmarkableMapper extends AbstractComponentMapper /** * Builds URL for the given {@link UrlInfo} instance. The URL this method produces must be * parseable by the {@link #parseRequest(Request)} method. - * + * * @param info * @return Url result URL */ @@ -163,7 +165,7 @@ public abstract class AbstractBookmarkableMapper extends AbstractComponentMapper * <p> * For generic bookmarkable encoders this method should return <code>true</code>. For explicit * (mounted) encoders this method should return <code>false</code> - * + * * @return <code>true</code> if hybrid URL requires page created bookmarkable, * <code>false</code> otherwise. */ @@ -177,7 +179,7 @@ public abstract class AbstractBookmarkableMapper extends AbstractComponentMapper /** * Creates a {@code IRequestHandler} that processes a bookmarkable request. - * + * * @param pageClass * @param pageParameters * @return a {@code IRequestHandler} capable of processing the bookmarkable request. @@ -194,7 +196,7 @@ public abstract class AbstractBookmarkableMapper extends AbstractComponentMapper * Creates a {@code IRequestHandler} that processes a hybrid request. When the page identified * by {@code pageInfo} was not available, the request should be treated as a bookmarkable * request. - * + * * @param pageInfo * @param pageClass * @param pageParameters @@ -208,12 +210,21 @@ 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() && + !WebApplication.get().getPageSettings().getRecreateMountedPagesAfterExpiry()) + { + throw new PageExpiredException(String.format("Bookmarkable page id '%d' has expired.", + pageInfo.getPageId())); + } + else + { + return new RenderPageRequestHandler(provider); + } } /** * Creates a {@code IRequestHandler} that processes a listener request. - * + * * @param pageComponentInfo * @param pageClass * @param pageParameters http://git-wip-us.apache.org/repos/asf/wicket/blob/f20b2d70/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapperTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapperTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapperTest.java new file mode 100644 index 0000000..2c17c09 --- /dev/null +++ b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapperTest.java @@ -0,0 +1,91 @@ +/* + * 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. + */ +package org.apache.wicket.core.request.mapper; + +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); + } + + } + +}
