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/06 18:20:52 UTC

git commit: =WICKET-4932: testing recreateMountedPagesAfterExpiry before to recreate a mounted page

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 <pe...@apache.com>
Authored: Sun Jan 6 15:19:06 2013 -0200
Committer: Pedro Santos <pe...@apache.com>
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);
+		}
+
+	}
+
+}