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

Reply via email to