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

Reply via email to