Repository: wicket Updated Branches: refs/heads/master 1fbff434d -> e848130d4
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/e848130d Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/e848130d Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/e848130d Branch: refs/heads/master Commit: e848130d48facdd2782385175070a302d45e3d8b Parents: 1fbff43 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 21:59:49 2017 +0100 ---------------------------------------------------------------------- .../org/apache/wicket/mock/MockPageManager.java | 12 +++++++---- .../apache/wicket/page/AbstractPageManager.java | 18 ++++++++++++++-- .../org/apache/wicket/page/IPageManager.java | 9 ++++++++ .../wicket/page/PageAccessSynchronizer.java | 16 ++++++++++++++ .../wicket/page/PageManagerDecorator.java | 5 +++++ .../apache/wicket/page/PageStoreManager.java | 22 ++++++++++++++++++++ .../org/apache/wicket/page/RequestAdapter.java | 9 ++++++++ 7 files changed, 85 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/e848130d/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..b27dc7e 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. @@ -58,6 +58,13 @@ public class MockPageManager implements IPageManager } @Override + public void removePage(final IManageablePage page) { + if (page != null) { + pages.remove(page.getPageId()); + } + } + + @Override public void newSessionCreated() { pages.clear(); @@ -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/e848130d/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..03b26aa 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 @@ -88,6 +88,14 @@ public abstract class AbstractPageManager implements IPageManager } @Override + public void removePage(final IManageablePage page) { + if (page != null) + { + getRequestAdapter().removePage(page); + } + } + + @Override public void newSessionCreated() { getRequestAdapter().newSessionCreated(); @@ -96,12 +104,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/e848130d/wicket-core/src/main/java/org/apache/wicket/page/IPageManager.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/page/IPageManager.java b/wicket-core/src/main/java/org/apache/wicket/page/IPageManager.java index fad5d91..a19a0e3 100644 --- a/wicket-core/src/main/java/org/apache/wicket/page/IPageManager.java +++ b/wicket-core/src/main/java/org/apache/wicket/page/IPageManager.java @@ -42,6 +42,15 @@ public interface IPageManager IManageablePage getPage(int id) throws CouldNotLockPageException; /** + * 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 + */ + void removePage(IManageablePage page); + + /** * Marks page as changed. * <p><strong>Note:</strong>Only stateful pages are stored.</p> * http://git-wip-us.apache.org/repos/asf/wicket/blob/e848130d/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 86fbb8b..d44b86a 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 @@ -257,6 +257,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/e848130d/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..8f719f8 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 @@ -51,6 +51,11 @@ public class PageManagerDecorator implements IPageManager } @Override + public void removePage(final IManageablePage page) { + delegate.removePage(page); + } + + @Override public void touchPage(IManageablePage page) { delegate.touchPage(page); http://git-wip-us.apache.org/repos/asf/wicket/blob/e848130d/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/e848130d/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..7b8b7b9 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,15 @@ 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 abstract void removePage(final IManageablePage page); + + /** * Store the list of stateful pages. * * @param touchedPages
