Repository: wicket Updated Branches: refs/heads/WICKET-6337-IPageManager-removePage-7.x [created] 91abd2e8c
WICKET-6336 Add #removePage(IManageablePage) to IPageManager Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/91abd2e8 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/91abd2e8 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/91abd2e8 Branch: refs/heads/WICKET-6337-IPageManager-removePage-7.x Commit: 91abd2e8c170352727c5c9e9f3bb704f50cd1198 Parents: 0eb6348 Author: Martin Tzvetanov Grigorov <[email protected]> Authored: Mon Mar 13 21:58:28 2017 +0100 Committer: Martin Tzvetanov Grigorov <[email protected]> Committed: Mon Mar 13 23:51:59 2017 +0100 ---------------------------------------------------------------------- .../org/apache/wicket/mock/MockPageManager.java | 12 ++++++---- .../apache/wicket/page/AbstractPageManager.java | 24 ++++++++++++++++++-- .../org/apache/wicket/page/IManageablePage.java | 4 ++-- .../wicket/page/PageAccessSynchronizer.java | 16 +++++++++++++ .../wicket/page/PageManagerDecorator.java | 7 ++++++ .../apache/wicket/page/PageStoreManager.java | 22 ++++++++++++++++++ .../org/apache/wicket/page/RequestAdapter.java | 10 ++++++++ 7 files changed, 87 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/91abd2e8/wicket-core/src/main/java/org/apache/wicket/mock/MockPageManager.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/mock/MockPageManager.java b/wicket-core/src/main/java/org/apache/wicket/mock/MockPageManager.java index 8c84198..4ac06f6 100644 --- a/wicket-core/src/main/java/org/apache/wicket/mock/MockPageManager.java +++ b/wicket-core/src/main/java/org/apache/wicket/mock/MockPageManager.java @@ -30,7 +30,7 @@ import org.apache.wicket.page.IPageManagerContext; */ public class MockPageManager implements IPageManager { - private final Map<Integer, IManageablePage> pages = new HashMap<Integer, IManageablePage>(); + private final Map<Integer, IManageablePage> pages = new HashMap<>(); /** * Construct. @@ -57,6 +57,13 @@ public class MockPageManager implements IPageManager return pages.get(id); } + public void removePage(final IManageablePage page) { + if (page != null) + { + pages.remove(page.getPageId()); + } + } + @Override public void newSessionCreated() { @@ -97,9 +104,6 @@ public class MockPageManager implements IPageManager pages.remove(page.getPageId()); } - /** - * @see org.apache.wicket.page.IPageManager#getContext() - */ @Override public IPageManagerContext getContext() { http://git-wip-us.apache.org/repos/asf/wicket/blob/91abd2e8/wicket-core/src/main/java/org/apache/wicket/page/AbstractPageManager.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/page/AbstractPageManager.java b/wicket-core/src/main/java/org/apache/wicket/page/AbstractPageManager.java index 1311287..a4e92f9 100644 --- a/wicket-core/src/main/java/org/apache/wicket/page/AbstractPageManager.java +++ b/wicket-core/src/main/java/org/apache/wicket/page/AbstractPageManager.java @@ -87,6 +87,20 @@ public abstract class AbstractPageManager implements IPageManager return page; } + /** + * Removes a page from the {@link org.apache.wicket.pageStore.IPageStore} and + * {@link org.apache.wicket.pageStore.IDataStore}. Any attempt to access it later + * will lead to {@link org.apache.wicket.protocol.http.PageExpiredException} + * + * @param page The page instance to remove from the stores + */ + public void removePage(final IManageablePage page) { + if (page != null) + { + getRequestAdapter().removePage(page); + } + } + @Override public void newSessionCreated() { @@ -96,12 +110,18 @@ public abstract class AbstractPageManager implements IPageManager @Override public void touchPage(IManageablePage page) { - getRequestAdapter().touch(page); + if (page != null) + { + getRequestAdapter().touch(page); + } } @Override public void untouchPage(IManageablePage page) { - getRequestAdapter().untouch(page); + if (page != null) + { + getRequestAdapter().untouch(page); + } } } http://git-wip-us.apache.org/repos/asf/wicket/blob/91abd2e8/wicket-core/src/main/java/org/apache/wicket/page/IManageablePage.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/page/IManageablePage.java b/wicket-core/src/main/java/org/apache/wicket/page/IManageablePage.java index 315adbe..8e9d86b 100644 --- a/wicket-core/src/main/java/org/apache/wicket/page/IManageablePage.java +++ b/wicket-core/src/main/java/org/apache/wicket/page/IManageablePage.java @@ -32,12 +32,12 @@ public interface IManageablePage extends IClusterable * @return Whether this page is stateless */ // note that this has different semantics than Component#isStateless() - public boolean isPageStateless(); + boolean isPageStateless(); /** * @return A unique identifier for this page map entry */ - public int getPageId(); + int getPageId(); /** * Detaches model after use. This is generally used to null out transient references that can be http://git-wip-us.apache.org/repos/asf/wicket/blob/91abd2e8/wicket-core/src/main/java/org/apache/wicket/page/PageAccessSynchronizer.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/page/PageAccessSynchronizer.java b/wicket-core/src/main/java/org/apache/wicket/page/PageAccessSynchronizer.java index 1961017..2d4113f 100644 --- a/wicket-core/src/main/java/org/apache/wicket/page/PageAccessSynchronizer.java +++ b/wicket-core/src/main/java/org/apache/wicket/page/PageAccessSynchronizer.java @@ -256,6 +256,22 @@ public class PageAccessSynchronizer implements Serializable } @Override + public void removePage(final IManageablePage page) { + if (page != null) + { + try + { + super.removePage(page); + untouchPage(page); + } + finally + { + unlockPage(page.getPageId()); + } + } + } + + @Override public void touchPage(IManageablePage page) { lockPage(page.getPageId()); http://git-wip-us.apache.org/repos/asf/wicket/blob/91abd2e8/wicket-core/src/main/java/org/apache/wicket/page/PageManagerDecorator.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/page/PageManagerDecorator.java b/wicket-core/src/main/java/org/apache/wicket/page/PageManagerDecorator.java index 8c21acf..02afd23 100644 --- a/wicket-core/src/main/java/org/apache/wicket/page/PageManagerDecorator.java +++ b/wicket-core/src/main/java/org/apache/wicket/page/PageManagerDecorator.java @@ -50,6 +50,13 @@ public class PageManagerDecorator implements IPageManager return delegate.getPage(id); } + public void removePage(final IManageablePage page) { + if (delegate instanceof AbstractPageManager) + { + ((AbstractPageManager) delegate).removePage(page); + } + } + @Override public void touchPage(IManageablePage page) { http://git-wip-us.apache.org/repos/asf/wicket/blob/91abd2e8/wicket-core/src/main/java/org/apache/wicket/page/PageStoreManager.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/page/PageStoreManager.java b/wicket-core/src/main/java/org/apache/wicket/page/PageStoreManager.java index 88bffa4..40f294c 100644 --- a/wicket-core/src/main/java/org/apache/wicket/page/PageStoreManager.java +++ b/wicket-core/src/main/java/org/apache/wicket/page/PageStoreManager.java @@ -156,6 +156,19 @@ public class PageStoreManager extends AbstractPageManager } } + private void removePage(IManageablePage page) + { + if (page != null) + { + sessionCache.remove(page); + final IPageStore pageStore = getPageStore(); + if (pageStore != null) + { + pageStore.removePage(sessionId, page.getPageId()); + } + } + } + /** * If the pages are stored in temporary state (after deserialization) this method convert * them to list of "real" pages @@ -372,6 +385,15 @@ public class PageStoreManager extends AbstractPageManager } } + @Override + protected void removePage(final IManageablePage page) { + final SessionEntry sessionEntry = getSessionEntry(false); + if (sessionEntry != null) + { + sessionEntry.removePage(page); + } + } + /** * * @param create http://git-wip-us.apache.org/repos/asf/wicket/blob/91abd2e8/wicket-core/src/main/java/org/apache/wicket/page/RequestAdapter.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/page/RequestAdapter.java b/wicket-core/src/main/java/org/apache/wicket/page/RequestAdapter.java index 837530c..bcd710f 100644 --- a/wicket-core/src/main/java/org/apache/wicket/page/RequestAdapter.java +++ b/wicket-core/src/main/java/org/apache/wicket/page/RequestAdapter.java @@ -58,6 +58,16 @@ public abstract class RequestAdapter protected abstract IManageablePage getPage(int id); /** + * Removes a page from the cache and the stores ({@link org.apache.wicket.pageStore.IPageStore} and + * {@link org.apache.wicket.pageStore.IDataStore}). Any attempt to access it later + * will lead to {@link org.apache.wicket.protocol.http.PageExpiredException} + * + * @param page The page instance to remove + */ + protected void removePage(final IManageablePage page) + {} + + /** * Store the list of stateful pages. * * @param touchedPages
