Repository: wicket
Updated Branches:
  refs/heads/WICKET-6563 a3604f7c3 -> ad1f9b88c


WICKET-6563 javadoc and test

for SerializingPageStore; keep page type in serializedpage


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

Branch: refs/heads/WICKET-6563
Commit: ad1f9b88ce8412e2b8eec5de72073b9688deb3bb
Parents: a3604f7
Author: Sven Meier <[email protected]>
Authored: Tue Jul 3 23:52:10 2018 +0200
Committer: Sven Meier <[email protected]>
Committed: Tue Jul 3 23:52:10 2018 +0200

----------------------------------------------------------------------
 .../java/org/apache/wicket/Application.java     |  5 +-
 .../wicket/DefaultPageManagerProvider.java      | 18 +++++--
 .../wicket/pageStore/InMemoryPageStore.java     |  8 +--
 .../wicket/pageStore/InSessionPageStore.java    |  2 +-
 .../apache/wicket/pageStore/SerializedPage.java | 14 +++++-
 .../wicket/pageStore/SerializingPageStore.java  |  6 +--
 .../pageStore/SerializingPageStoreTest.java     | 52 ++++++++++++++++++++
 7 files changed, 88 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/ad1f9b88/wicket-core/src/main/java/org/apache/wicket/Application.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/Application.java 
b/wicket-core/src/main/java/org/apache/wicket/Application.java
index 64bf7ac..e1a0fb8 100644
--- a/wicket-core/src/main/java/org/apache/wicket/Application.java
+++ b/wicket-core/src/main/java/org/apache/wicket/Application.java
@@ -56,8 +56,6 @@ import org.apache.wicket.markup.resolver.HtmlHeaderResolver;
 import org.apache.wicket.markup.resolver.WicketContainerResolver;
 import org.apache.wicket.markup.resolver.WicketMessageResolver;
 import org.apache.wicket.page.IPageManager;
-import org.apache.wicket.pageStore.DefaultPageContext;
-import org.apache.wicket.pageStore.IPageContext;
 import org.apache.wicket.pageStore.IPageStore;
 import org.apache.wicket.protocol.http.IRequestLogger;
 import org.apache.wicket.protocol.http.RequestLogger;
@@ -1344,8 +1342,11 @@ public abstract class Application implements 
UnboundListener, IEventSink
        }
 
        /**
+        * Set the provider of an {@link IPageManager}.
         * 
         * @param provider
+        * 
+        * @see DefaultPageManagerProvider
         */
        public final Application setPageManagerProvider(final 
IPageManagerProvider provider)
        {

http://git-wip-us.apache.org/repos/asf/wicket/blob/ad1f9b88/wicket-core/src/main/java/org/apache/wicket/DefaultPageManagerProvider.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/DefaultPageManagerProvider.java 
b/wicket-core/src/main/java/org/apache/wicket/DefaultPageManagerProvider.java
index 0539355..308b0fd 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/DefaultPageManagerProvider.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/DefaultPageManagerProvider.java
@@ -30,6 +30,7 @@ import org.apache.wicket.pageStore.NoopPageStore;
 import org.apache.wicket.pageStore.RequestPageStore;
 import org.apache.wicket.pageStore.SerializingPageStore;
 import org.apache.wicket.serialize.ISerializer;
+import org.apache.wicket.settings.FrameworkSettings;
 import org.apache.wicket.settings.StoreSettings;
 import org.apache.wicket.util.lang.Args;
 import org.apache.wicket.util.lang.Bytes;
@@ -47,14 +48,17 @@ import org.apache.wicket.util.lang.Bytes;
  * <li>{@link RequestPageStore} caching pages until end of the request</li>
  * <li>{@link InSessionPageStore} keeping the last accessed page in the 
session</li>
  * <li>{@link SerializingPageStore} serializing all pages (so they are 
available for back-button </li>
- * <li>{@link InMemoryPageStore} keeping all pages</li>
+ * <li>{@link InMemoryPageStore} keeping all pages in memory</li>
  * </ul>
- * ... or if all pages should be kept in the session only without any 
serialization (no back-button support)
+ * ... or if all pages should be kept in the session only, without any 
serialization (no back-button support though)
  * <ul>
  * <li>{@link RequestPageStore} caching pages until end of the request</li>
  * <li>{@link InSessionPageStore} keeping a limited count of pages in the 
session, e.g. 10</li>
  * <li>{@link NoopPageStore} discarding all exceeding pages</li>
  * </ul>
+ * For back-button support <em>at least one</em> store in the chain must 
create copies of added pages (usually through serialization),
+ * otherwise any following request will work on an identical page instance and 
the previous state of page is no longer accessible.  
+ * <p>
  * Other stores be may inserted ad libitum, e.g.
  * <ul>
  * <li>{@link GroupingPageStore} groups pages with their own maximum page 
limit</li>
@@ -91,8 +95,12 @@ public class DefaultPageManagerProvider implements 
IPageManagerProvider
 
        /**
         * Get the {@link ISerializer} to use for serializing of pages.
+        * <p>
+        * By default the serializer of the applications {@link 
FrameworkSettings}.
         * 
         * @return how to serialize pages if needed for any {@link IPageStore}
+        * 
+        * @see FrameworkSettings#getSerializer()
         */
        protected ISerializer getSerializer()
        {
@@ -100,7 +108,7 @@ public class DefaultPageManagerProvider implements 
IPageManagerProvider
        }
 
        /**
-        * Keep pages in the request until it is finished.
+        * Cache pages in the request until it is finished.
         * 
         * @see RequestPageStore
         */
@@ -110,7 +118,7 @@ public class DefaultPageManagerProvider implements 
IPageManagerProvider
        }
 
        /**
-        * After requests keep pages in the session.
+        * Cache last page in the session for fast access.
         * 
         * @see InSessionPageStore
         */
@@ -139,7 +147,7 @@ public class DefaultPageManagerProvider implements 
IPageManagerProvider
        }
 
        /**
-        * Keep pages persistent on disk.
+        * Keep persistent copies of all pages, by default on disk.
         * 
         * @see DiskPageStore
         * @see StoreSettings#getMaxSizePerSession()

http://git-wip-us.apache.org/repos/asf/wicket/blob/ad1f9b88/wicket-core/src/main/java/org/apache/wicket/pageStore/InMemoryPageStore.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/pageStore/InMemoryPageStore.java 
b/wicket-core/src/main/java/org/apache/wicket/pageStore/InMemoryPageStore.java
index fc11901..c3e352d 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/pageStore/InMemoryPageStore.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/pageStore/InMemoryPageStore.java
@@ -179,7 +179,7 @@ public class InMemoryPageStore implements 
IPersistentPageStore
                synchronized (data)
                {
                        return StreamSupport.stream(data.spliterator(), false)
-                               .map(page -> new MermoryPersistedPage(page, 
getSize(page)))
+                               .map(page -> new PersistedPage(page, 
getSize(page)))
                                .collect(Collectors.toList());
                }
        }
@@ -315,7 +315,7 @@ public class InMemoryPageStore implements 
IPersistentPageStore
                }
        }
        
-       private static class MermoryPersistedPage implements IPersistedPage
+       private static class PersistedPage implements IPersistedPage
        {
 
                private final int id;
@@ -324,10 +324,10 @@ public class InMemoryPageStore implements 
IPersistentPageStore
 
                private final long size;
 
-               public MermoryPersistedPage(IManageablePage page, long size)
+               public PersistedPage(IManageablePage page, long size)
                {
                        this.id = page.getPageId();
-                       this.type = page.getClass().getName();
+                       this.type = page instanceof SerializedPage ? 
((SerializedPage)page).getPageType() : page.getClass().getName();
                        this.size = size;
                }
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/ad1f9b88/wicket-core/src/main/java/org/apache/wicket/pageStore/InSessionPageStore.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/pageStore/InSessionPageStore.java 
b/wicket-core/src/main/java/org/apache/wicket/pageStore/InSessionPageStore.java
index e3d3e07..8af66d6 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/pageStore/InSessionPageStore.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/pageStore/InSessionPageStore.java
@@ -247,7 +247,7 @@ public class InSessionPageStore extends DelegatingPageStore
                                        {
                                                throw new 
IllegalStateException("SessionData#init() was not called");
                                        }
-                                       pages.set(p,  new 
SerializedPage(page.getPageId(), serializer.serialize(page)));
+                                       pages.set(p,  new 
SerializedPage(page.getPageId(), page.getClass().getName(), 
serializer.serialize(page)));
                                }
                        }
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/ad1f9b88/wicket-core/src/main/java/org/apache/wicket/pageStore/SerializedPage.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/pageStore/SerializedPage.java 
b/wicket-core/src/main/java/org/apache/wicket/pageStore/SerializedPage.java
index 86291d9..8ebe559 100644
--- a/wicket-core/src/main/java/org/apache/wicket/pageStore/SerializedPage.java
+++ b/wicket-core/src/main/java/org/apache/wicket/pageStore/SerializedPage.java
@@ -22,19 +22,24 @@ import org.apache.wicket.util.lang.Args;
 /**
  * A wrapper around a serialized page.
  * <p>
- * {@link IPageStore} might choose to use this representation of a page 
internally,
+ * An {@link IPageStore} might choose to use this representation of a page 
internally,
  * or accept it in {@link IPageStore#addPage(IPageContext, IManageablePage)}.
+ * 
+ * @see SerializingPageStore
  */
 class SerializedPage implements IManageablePage
 {
 
        private final int pageId;
+       
+       private final String pageType;
 
        private final byte[] data;
 
-       public SerializedPage(int pageId, byte[] data)
+       public SerializedPage(int pageId, String pageType, byte[] data)
        {
                this.pageId = pageId;
+               this.pageType = pageType;
                this.data = Args.notNull(data, "data");
        }
 
@@ -50,6 +55,11 @@ class SerializedPage implements IManageablePage
                return pageId;
        }
 
+       public String getPageType()
+       {
+               return pageType;
+       }
+       
        public byte[] getData()
        {
                return data;

http://git-wip-us.apache.org/repos/asf/wicket/blob/ad1f9b88/wicket-core/src/main/java/org/apache/wicket/pageStore/SerializingPageStore.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/pageStore/SerializingPageStore.java
 
b/wicket-core/src/main/java/org/apache/wicket/pageStore/SerializingPageStore.java
index 3b5ac3a..eb754f6 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/pageStore/SerializingPageStore.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/pageStore/SerializingPageStore.java
@@ -45,18 +45,18 @@ public class SerializingPageStore extends 
DelegatingPageStore
        public IManageablePage getPage(IPageContext context, int id)
        {
                IManageablePage page = super.getPage(context, id);
+
                if (page instanceof SerializedPage) {
                        page = 
(IManageablePage)serializer.deserialize(((SerializedPage)page).getData());
                }
-
-               return super.getPage(context, id);
+               return page;
        }
 
        @Override
        public void addPage(IPageContext context, IManageablePage page)
        {
                if (page instanceof SerializedPage == false) {
-                       page = new SerializedPage(page.getPageId(), 
serializer.serialize(page));
+                       page = new SerializedPage(page.getPageId(), 
page.getClass().getName(), serializer.serialize(page));
                }
                super.addPage(context, page);
        }

http://git-wip-us.apache.org/repos/asf/wicket/blob/ad1f9b88/wicket-core/src/test/java/org/apache/wicket/pageStore/SerializingPageStoreTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/pageStore/SerializingPageStoreTest.java
 
b/wicket-core/src/test/java/org/apache/wicket/pageStore/SerializingPageStoreTest.java
new file mode 100644
index 0000000..5d50f00
--- /dev/null
+++ 
b/wicket-core/src/test/java/org/apache/wicket/pageStore/SerializingPageStoreTest.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.pageStore;
+
+import static org.junit.Assert.assertEquals;
+
+import org.apache.wicket.MockPage;
+import org.apache.wicket.mock.MockPageStore;
+import org.apache.wicket.page.IManageablePage;
+import org.apache.wicket.serialize.java.JavaSerializer;
+import org.junit.Test;
+
+/**
+ * Test for {@link SerializingPageStore}.
+ */
+public class SerializingPageStoreTest
+{
+
+       @Test
+       public void test()
+       {
+               DummyPageContext context = new DummyPageContext();
+               
+               MockPageStore mockStore = new MockPageStore();
+               
+               IManageablePage original = new MockPage(1);
+               
+               SerializingPageStore store = new 
SerializingPageStore(mockStore, new JavaSerializer("test"));
+               
+               store.addPage(context, original);
+               
+               SerializedPage serialized = 
(SerializedPage)mockStore.getPage(context, 1);
+               assertEquals("page was serialized", 1, serialized.getPageId());
+               
+               MockPage deserialized = (MockPage)store.getPage(context, 1);
+               assertEquals("page was deserialized", 1, 
deserialized.getPageId());
+       }
+}

Reply via email to