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 2017/03/25 18:41:06 UTC
[7/9] wicket git commit: WICKET-4201 removing the page expired
exception from page provider and using its API to determine such state
throughout the code
WICKET-4201 removing the page expired exception from page provider and using its API to determine such state throughout the code
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/d2a80926
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/d2a80926
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/d2a80926
Branch: refs/heads/master
Commit: d2a809262811a7696660425dd80cdd9d0c55ed4d
Parents: cc0fe99
Author: Pedro Henrique Oliveira dos Santos <pe...@apache.org>
Authored: Sun Feb 5 01:36:23 2017 -0200
Committer: Pedro Henrique Oliveira dos Santos <pe...@apache.org>
Committed: Sat Mar 25 14:58:12 2017 -0300
----------------------------------------------------------------------
.../request/handler/ListenerRequestHandler.java | 19 ++-
.../core/request/handler/PageProvider.java | 141 +++++++++++--------
.../mapper/AbstractBookmarkableMapper.java | 2 +-
3 files changed, 98 insertions(+), 64 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/d2a80926/wicket-core/src/main/java/org/apache/wicket/core/request/handler/ListenerRequestHandler.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/ListenerRequestHandler.java b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/ListenerRequestHandler.java
index 400feb2..f9b3bbc 100644
--- a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/ListenerRequestHandler.java
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/ListenerRequestHandler.java
@@ -23,6 +23,7 @@ import org.apache.wicket.WicketRuntimeException;
import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.core.request.handler.RenderPageRequestHandler.RedirectPolicy;
import org.apache.wicket.core.request.handler.logger.ListenerLogData;
+import org.apache.wicket.protocol.http.PageExpiredException;
import org.apache.wicket.request.ILoggableRequestHandler;
import org.apache.wicket.request.IRequestCycle;
import org.apache.wicket.request.component.IRequestableComponent;
@@ -94,7 +95,23 @@ public class ListenerRequestHandler
@Override
public IRequestablePage getPage()
{
- return pageComponentProvider.getPageInstance();
+ try
+ {
+ return pageComponentProvider.getPageInstance();
+ }
+ catch (IllegalStateException e)
+ {
+ if (pageComponentProvider.wasExpired())
+ {
+
+ throw new PageExpiredException(
+ "Page with id '" + pageComponentProvider.getPageId() + "' has expired.");
+ }
+ else
+ {
+ throw e;// bubbles up
+ }
+ }
}
@Override
http://git-wip-us.apache.org/repos/asf/wicket/blob/d2a80926/wicket-core/src/main/java/org/apache/wicket/core/request/handler/PageProvider.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/PageProvider.java b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/PageProvider.java
index cda486a..2934cf3 100644
--- a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/PageProvider.java
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/PageProvider.java
@@ -20,7 +20,6 @@ import org.apache.wicket.Application;
import org.apache.wicket.core.request.mapper.IPageSource;
import org.apache.wicket.core.request.mapper.StalePageException;
import org.apache.wicket.page.IPageManager;
-import org.apache.wicket.protocol.http.PageExpiredException;
import org.apache.wicket.request.IRequestHandler;
import org.apache.wicket.request.IRequestMapper;
import org.apache.wicket.request.component.IRequestablePage;
@@ -59,7 +58,7 @@ public class PageProvider implements IPageProvider, IClusterable
private PageParameters pageParameters;
- private Provision provision;
+ private Provision provision = new Provision();
/**
* Creates a new page provider object. Upon calling of {@link #getPageInstance()} this provider
@@ -151,18 +150,17 @@ public class PageProvider implements IPageProvider, IClusterable
{
Args.notNull(page, "page");
- provision = new Provision(page);
+ provision = new Provision().resolve(page);
pageId = page.getPageId();
renderCount = page.getRenderCount();
}
- private Provision getProvision()
+ private Provision getResolvedProvision()
{
- if (provision == null)
- {
- provision = new Provision(getPageSource()).resolvePageInstance(pageId, pageClass,
- pageParameters, renderCount);
- }
+ if (!provision.wasResolved())
+
+ provision.resolve(pageId, pageClass, pageParameters, renderCount);
+
return provision;
}
@@ -172,11 +170,13 @@ public class PageProvider implements IPageProvider, IClusterable
@Override
public IRequestablePage getPageInstance()
{
- if (!getProvision().didResolvePage() && !getProvision().doesProvideNewPage())
+ Provision resolvedProvision = getResolvedProvision();
+
+ if (!resolvedProvision.didResolveToPage() && !resolvedProvision.doesProvideNewPage())
{
- throw new PageExpiredException("Page with id '" + pageId + "' has expired.");
+ throw new IllegalStateException("The configured page provider can't resolve a page.");
}
- return getProvision().get();
+ return resolvedProvision.getPage();
}
/**
@@ -189,9 +189,9 @@ public class PageProvider implements IPageProvider, IClusterable
{
return pageParameters;
}
- else if (isNewPageInstance() == false)
+ else if (hasPageInstance())
{
- return getProvision().get().getPageParameters();
+ return getPageInstance().getPageParameters();
}
else
{
@@ -200,7 +200,8 @@ public class PageProvider implements IPageProvider, IClusterable
}
/**
- * @return don't resolve a page, but can create a new one
+ * @return negates {@link PageProvider#hasPageInstance()}
+ * @deprecated use {@link PageProvider#hasPageInstance()} negation instead
*/
@Override
public boolean isNewPageInstance()
@@ -209,24 +210,48 @@ public class PageProvider implements IPageProvider, IClusterable
}
/**
- * @return if provides an identified page
+ * If this provider returns existing page, regardless if it was already created by PageProvider
+ * itself or is or can be found in the data store. The only guarantee is that by calling
+ * {@link PageProvider#getPageInstance()} this provider will return an existing instance and no
+ * page will be created.
+ *
+ * @return if provides an existing page
*/
@Override
public final boolean hasPageInstance()
{
- if (pageId != null || provision != null)
- return getProvision().didResolvePage();
+ if (provision.wasResolved() || pageId != null)
+ {
+ return getResolvedProvision().didResolveToPage();
+ }
else
return false;
}
/**
+ * Returns whether or not the page instance held by this provider has been instantiated by the
+ * provider.
+ *
+ * @return {@code true} iff the page instance held by this provider was instantiated by the
+ * provider
+ */
+ @Override
+ public final boolean isPageInstanceFresh()
+ {
+ if (!this.provision.wasResolved())
+ {
+ throw new IllegalStateException("Page instance not yet resolved");
+ }
+ return getResolvedProvision().doesProvideNewPage();
+ }
+
+ /**
* @see org.apache.wicket.core.request.handler.IPageProvider#wasExpired()
*/
@Override
public boolean wasExpired()
{
- return pageId != null && isPageInstanceFresh();
+ return pageId != null && getResolvedProvision().didFailToFindStoredPage();
}
/**
@@ -271,11 +296,7 @@ public class PageProvider implements IPageProvider, IClusterable
@Override
public void detach()
{
- if (provision != null)
- {
- provision.detach();
- provision = null;
- }
+ provision.detach();
}
/**
@@ -287,7 +308,7 @@ public class PageProvider implements IPageProvider, IClusterable
*/
public void setPageSource(IPageSource pageSource)
{
- if (this.provision != null)
+ if (this.provision.wasResolved())
{
throw new IllegalStateException(
"A provision was already been done. The provider can be forcefully detached or a new one needs to be used to provide using this page source.");
@@ -331,71 +352,64 @@ public class PageProvider implements IPageProvider, IClusterable
return renderCount;
}
- /**
- * Returns whether or not the page instance held by this provider has been instantiated by the
- * provider.
- *
- * @return {@code true} iff the page instance held by this provider was instantiated by the
- * provider
- */
- @Override
- public final boolean isPageInstanceFresh()
- {
- if (this.provision == null)
- {
- throw new IllegalStateException("Page instance not yet resolved");
- }
- return getProvision().doesProvideNewPage();
- }
-
@Override
public String toString()
{
return "PageProvider{" + "renderCount=" + renderCount + ", pageId=" + pageId
- + ", pageClass=" + pageClass + ", pageParameters=" + pageParameters + ", provision="
- + provision + '}';
+ + ", pageClass=" + pageClass + ", pageParameters=" + pageParameters + '}';
}
private class Provision
{
- private transient IRequestablePage page;
- private boolean failedToFindStoreddPage;
- private IPageSource pageSource;
+ transient IRequestablePage page;
+ boolean resolved;
+ boolean failedToFindStoredPage;
- Provision(IRequestablePage page)
+ IRequestablePage getPage()
{
- this.page = page;
+ if (page == null && doesProvideNewPage())
+
+ page = getPageSource().newPageInstance(pageClass, pageParameters);
+
+ return page;
}
- Provision(IPageSource pageSource)
+ boolean wasResolved()
{
- this.pageSource = pageSource;
+ return resolved;
}
- IRequestablePage get()
+ boolean didResolveToPage()
{
- if (page == null && doesProvideNewPage())
- page = pageSource.newPageInstance(pageClass, pageParameters);
- return page;
+ return page != null;
}
- boolean didResolvePage()
+ boolean doesProvideNewPage()
{
- return page != null;
+ return (pageId == null || failedToFindStoredPage) && pageClass != null;
+ }
+
+ boolean didFailToFindStoredPage()
+ {
+ return failedToFindStoredPage;
}
- private boolean doesProvideNewPage()
+ Provision resolve(IRequestablePage page)
{
- return failedToFindStoreddPage && pageClass != null;
+ this.page = page;
+
+ resolved = true;
+
+ return this;
}
- Provision resolvePageInstance(Integer pageId, Class<? extends IRequestablePage> pageClass,
+ Provision resolve(Integer pageId, Class<? extends IRequestablePage> pageClass,
PageParameters pageParameters, Integer renderCount)
{
if (pageId != null)
{
- IRequestablePage stored = pageSource.getPageInstance(pageId);
+ IRequestablePage stored = getPageSource().getPageInstance(pageId);
if (stored != null && (pageClass == null || pageClass.equals(stored.getClass())))
{
@@ -404,9 +418,12 @@ public class PageProvider implements IPageProvider, IClusterable
if (renderCount != null && page.getRenderCount() != renderCount)
throw new StalePageException(page);
}
+
+ failedToFindStoredPage = page == null;
}
- failedToFindStoreddPage = page == null;
+
+ resolved = true;
return this;
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/d2a80926/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 afafcee..f12aaec8 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
@@ -309,7 +309,7 @@ public abstract class AbstractBookmarkableMapper extends AbstractComponentMapper
private void checkExpiration(PageProvider provider, PageInfo pageInfo)
{
- if (provider.isNewPageInstance() && !getRecreateMountedPagesAfterExpiry())
+ if (provider.wasExpired() && !getRecreateMountedPagesAfterExpiry())
{
throw new PageExpiredException(String.format("Bookmarkable page with id '%d' has expired.",
pageInfo.getPageId()));