Repository: wicket
Updated Branches:
  refs/heads/WICKET-4201-improved-page-provider aa98a67ee -> f7f5fb890


WICKET-4201 removing non serializable attributes from serialization


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/f7f5fb89
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/f7f5fb89
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/f7f5fb89

Branch: refs/heads/WICKET-4201-improved-page-provider
Commit: f7f5fb8903452270185b7461ca83c56a87a87abd
Parents: aa98a67
Author: Pedro Henrique Oliveira dos Santos <[email protected]>
Authored: Mon Feb 6 05:07:41 2017 -0200
Committer: Pedro Henrique Oliveira dos Santos <[email protected]>
Committed: Mon Feb 6 05:07:41 2017 -0200

----------------------------------------------------------------------
 .../core/request/handler/PageProvider.java      | 45 +++++++++-----------
 .../request/handler/PageProviderTest.java       | 24 ++++++++++-
 2 files changed, 41 insertions(+), 28 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/f7f5fb89/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 6cf6f95..44e51cb 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
@@ -52,13 +52,13 @@ public class PageProvider implements IPageProvider, 
IClusterable
 
        private final Integer pageId;
 
-       private IPageSource pageSource;
+       private transient IPageSource pageSource;
 
        private Class<? extends IRequestablePage> pageClass;
 
        private PageParameters pageParameters;
 
-       private Provision provision = new Provision();
+       private transient Provision provision;
 
        /**
         * Creates a new page provider object. Upon calling of {@link 
#getPageInstance()} this provider
@@ -155,12 +155,12 @@ public class PageProvider implements IPageProvider, 
IClusterable
                renderCount = page.getRenderCount();
        }
 
-       private Provision getResolvedProvision()
+       private Provision getProvision()
        {
-               if (!provision.wasResolved())
-
-                       provision.resolve();
-
+               if (provision == null)
+               {
+                       provision = new Provision().resolve();
+               }
                return provision;
        }
 
@@ -170,7 +170,7 @@ public class PageProvider implements IPageProvider, 
IClusterable
        @Override
        public IRequestablePage getPageInstance()
        {
-               return getResolvedProvision().getPage();
+               return getProvision().getPage();
        }
 
        /**
@@ -214,9 +214,9 @@ public class PageProvider implements IPageProvider, 
IClusterable
        @Override
        public final boolean hasPageInstance()
        {
-               if (provision.wasResolved() || pageId != null)
+               if (provision != null || pageId != null)
                {
-                       return getResolvedProvision().didResolveToPage();
+                       return getProvision().didResolveToPage();
                }
                else
                        return false;
@@ -232,11 +232,11 @@ public class PageProvider implements IPageProvider, 
IClusterable
        @Override
        public final boolean doesProvideNewPage()
        {
-               if (!this.provision.wasResolved())
+               if (provision == null)
                {
                        throw new IllegalStateException("Page instance not yet 
resolved");
                }
-               return getResolvedProvision().doesProvideNewPage();
+               return getProvision().doesProvideNewPage();
        }
 
        /**
@@ -245,7 +245,7 @@ public class PageProvider implements IPageProvider, 
IClusterable
        @Override
        public boolean wasExpired()
        {
-               return pageId != null && 
getResolvedProvision().didFailToFindStoredPage();
+               return pageId != null && 
getProvision().didFailToFindStoredPage();
        }
 
        /**
@@ -290,7 +290,11 @@ public class PageProvider implements IPageProvider, 
IClusterable
        @Override
        public void detach()
        {
-               provision.detach();
+               if (provision != null)
+               {
+                       provision.detach();
+                       provision = null;
+               }
        }
 
        /**
@@ -302,7 +306,7 @@ public class PageProvider implements IPageProvider, 
IClusterable
         */
        public void setPageSource(IPageSource pageSource)
        {
-               if (this.provision.wasResolved())
+               if (provision != null)
                {
                        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.");
@@ -374,7 +378,6 @@ public class PageProvider implements IPageProvider, 
IClusterable
        private class Provision
        {
                transient IRequestablePage page;
-               boolean resolved;
                boolean failedToFindStoredPage;
 
                IRequestablePage getPage()
@@ -386,11 +389,6 @@ public class PageProvider implements IPageProvider, 
IClusterable
                        return page;
                }
 
-               boolean wasResolved()
-               {
-                       return resolved;
-               }
-
                boolean didResolveToPage()
                {
                        return page != null;
@@ -410,8 +408,6 @@ public class PageProvider implements IPageProvider, 
IClusterable
                {
                        this.page = page;
 
-                       resolved = true;
-
                        return this;
                }
 
@@ -433,9 +429,6 @@ public class PageProvider implements IPageProvider, 
IClusterable
                                failedToFindStoredPage = page == null;
                        }
 
-
-                       resolved = true;
-
                        return this;
                }
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/f7f5fb89/wicket-core/src/test/java/org/apache/wicket/request/handler/PageProviderTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/request/handler/PageProviderTest.java
 
b/wicket-core/src/test/java/org/apache/wicket/request/handler/PageProviderTest.java
index 09115a6..f5af25a 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/request/handler/PageProviderTest.java
+++ 
b/wicket-core/src/test/java/org/apache/wicket/request/handler/PageProviderTest.java
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.request.handler;
 
+import static org.hamcrest.CoreMatchers.is;
+
 import java.io.IOException;
 import java.text.ParseException;
 
@@ -27,12 +29,13 @@ import 
org.apache.wicket.RestartResponseAtInterceptPageException;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.AjaxLink;
 import org.apache.wicket.core.request.handler.PageProvider;
+import org.apache.wicket.core.request.mapper.StalePageException;
+import org.apache.wicket.core.request.mapper.TestMapperContext;
 import org.apache.wicket.markup.IMarkupResourceStreamProvider;
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.link.Link;
 import org.apache.wicket.request.Url;
-import org.apache.wicket.core.request.mapper.StalePageException;
-import org.apache.wicket.core.request.mapper.TestMapperContext;
+import org.apache.wicket.serialize.java.JavaSerializer;
 import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
 import org.apache.wicket.util.resource.StringResourceStream;
@@ -252,6 +255,23 @@ public class PageProviderTest extends WicketTestCase
                assertTrue(provider.doesProvideNewPage());
        }
 
+       @Test
+       public void pageProviderIsSerializeble() throws Exception
+       {
+               TestMapperContext mapperContext = new TestMapperContext();
+               Page page = new TestPage();
+               mapperContext.getPageManager().touchPage(page);
+               mapperContext.getPageManager().commitRequest();
+
+               PageProvider pageProvider = new PageProvider(page.getPageId(), 
page.getRenderCount());
+               JavaSerializer javaSerializer = new JavaSerializer("app");
+               byte[] serialized = javaSerializer.serialize(pageProvider);
+               PageProvider deserialized = 
(PageProvider)javaSerializer.deserialize(serialized);
+               deserialized.setPageSource(mapperContext);
+
+               assertThat(deserialized.getPageInstance(), is(page));
+       }
+
        /** */
        public static class TestPage extends WebPage implements 
IMarkupResourceStreamProvider
        {

Reply via email to