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);
+               }
+
+       }
+
+}

Reply via email to