Author: ivaynberg
Date: Tue Nov  3 07:26:09 2009
New Revision: 832322

URL: http://svn.apache.org/viewvc?rev=832322&view=rev
Log:
WICKET-NG hooked in pagemanager into application and session, pages are not 
stored in it yet though.

Modified:
    wicket/trunk/wicket/src/main/java/org/apache/wicket/Application.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/Page.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/Session.java
    
wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/page/ManageablePage.java

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/Application.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/Application.java?rev=832322&r1=832321&r2=832322&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/Application.java 
(original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/Application.java Tue 
Nov  3 07:26:09 2009
@@ -18,6 +18,7 @@
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.Serializable;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -47,6 +48,13 @@
 import org.apache.wicket.markup.resolver.ParentResolver;
 import org.apache.wicket.markup.resolver.WicketContainerResolver;
 import org.apache.wicket.markup.resolver.WicketMessageResolver;
+import org.apache.wicket.ng.page.PageManager;
+import org.apache.wicket.ng.page.PageManagerContext;
+import org.apache.wicket.ng.page.persistent.DataStore;
+import org.apache.wicket.ng.page.persistent.DefaultPageStore;
+import org.apache.wicket.ng.page.persistent.PageStore;
+import org.apache.wicket.ng.page.persistent.PersistentPageManager;
+import org.apache.wicket.ng.page.persistent.disk.DiskDataStore;
 import org.apache.wicket.protocol.http.IRequestLogger;
 import org.apache.wicket.protocol.http.RequestLogger;
 import org.apache.wicket.protocol.http.WebApplication;
@@ -883,6 +891,10 @@
                getMarkupSettings().getMarkupCache().shutdown();
 
                onDestroy();
+
+               // release pagemanager
+               pageManager.destroy();
+
                callDestroyers();
                applicationKeyToApplication.remove(getApplicationKey());
                Session.unset();
@@ -922,6 +934,10 @@
 
                sessionStore = newSessionStore();
                converterLocator = newConverterLocator();
+
+               // set up pagemanager
+               pageManager = newPageManager();
+               pageManager.setContext(getPageManagerContext());
        }
 
        /**
@@ -1180,4 +1196,99 @@
                        }
                }
        }
+
+
+       // ///////////////////////////////////////////////////////////////
+       // NG STUFF
+       //
+       // TODO WICKET-NG remove these comments
+       //
+       // ///////////////////////////////////////////////////////////////
+
+       // 
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+       // 
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+       //
+       // Page Manager
+       //
+       // 
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+       // 
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+       protected PageManager newPageManager()
+       {
+               int cacheSize = 40;
+               int fileChannelPoolCapacity = 50;
+               DataStore dataStore = new DiskDataStore(getName(), 1000000, 
fileChannelPoolCapacity);
+               PageStore pageStore = new DefaultPageStore(getName(), 
dataStore, cacheSize);
+               return new PersistentPageManager(getName(), pageStore);
+       }
+
+       private PageManager pageManager;
+
+       /**
+        * Context for PageManager to interact with rest of Wicket
+        */
+       private final PageManagerContext pageManagerContext = new 
PageManagerContext()
+       {
+               public void bind()
+               {
+                       Session.get().bind();
+               }
+
+               private final MetaDataKey<Object> requestCycleMetaDataKey = new 
MetaDataKey<Object>()
+               {
+                       private static final long serialVersionUID = 1L;
+               };
+
+               public Object getRequestData()
+               {
+                       RequestCycle requestCycle = RequestCycle.get();
+                       if (requestCycle == null)
+                       {
+                               throw new IllegalStateException("Not a request 
thread.");
+                       }
+                       return 
requestCycle.getMetaData(requestCycleMetaDataKey);
+               }
+
+               public Serializable getSessionAttribute(String key)
+               {
+                       return Session.get().getAttribute(key);
+               }
+
+               public String getSessionId()
+               {
+                       return Session.get().getId();
+               }
+
+               public void setRequestData(Object data)
+               {
+                       RequestCycle requestCycle = RequestCycle.get();
+                       if (requestCycle == null)
+                       {
+                               throw new IllegalStateException("Not a request 
thread.");
+                       }
+                       requestCycle.setMetaData(requestCycleMetaDataKey, data);
+               }
+
+               public void setSessionAttribute(String key, Serializable value)
+               {
+                       Session.get().setAttribute(key, value);
+               }
+       };
+
+       /**
+        * Returns the {...@link PageManager} instance.
+        * 
+        * @return {...@link PageManager} instance.
+        */
+       public PageManager getPageManager()
+       {
+               return pageManager;
+       }
+
+       protected PageManagerContext getPageManagerContext()
+       {
+               return pageManagerContext;
+       }
+
+
 }

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/Page.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/Page.java?rev=832322&r1=832321&r2=832322&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/Page.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/Page.java Tue Nov  3 
07:26:09 2009
@@ -31,13 +31,12 @@
 import org.apache.wicket.authorization.UnauthorizedActionException;
 import 
org.apache.wicket.authorization.strategies.page.SimplePageAuthorizationStrategy;
 import org.apache.wicket.markup.IMarkupFragment;
-import org.apache.wicket.markup.MarkupElement;
 import org.apache.wicket.markup.MarkupException;
 import org.apache.wicket.markup.MarkupStream;
-import org.apache.wicket.markup.RawMarkup;
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.resolver.IComponentResolver;
 import org.apache.wicket.model.IModel;
+import org.apache.wicket.ng.page.ManageablePage;
 import org.apache.wicket.request.RequestParameters;
 import org.apache.wicket.session.ISessionStore;
 import org.apache.wicket.session.pagemap.IPageMapEntry;
@@ -120,7 +119,11 @@
  * @author Johan Compagner
  * 
  */
-public abstract class Page extends MarkupContainer implements 
IRedirectListener, IPageMapEntry
+public abstract class Page extends MarkupContainer
+       implements
+               IRedirectListener,
+               IPageMapEntry,
+               ManageablePage
 {
        /**
         * You can set implementation of the interface in the {...@link 
Page#serializer} then that
@@ -1371,4 +1374,9 @@
        {
                return getAssociatedMarkup();
        }
+
+       public int getPageId()
+       {
+               return numericId;
+       }
 }

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/Session.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/Session.java?rev=832322&r1=832321&r2=832322&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/Session.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/Session.java Tue Nov  3 
07:26:09 2009
@@ -1170,21 +1170,24 @@
         *            The name of the attribute to store
         * @return The value of the attribute
         */
-       protected final Object getAttribute(final String name)
+       // TODO WICKET-NG made public for page manager, used to be protected, 
see if there is a way to
+       // revert
+       public final Serializable getAttribute(final String name)
        {
+               // TODO WICKET-NG remove serializable casts, maps should be 
<string,serializable>
                if (!isTemporary())
                {
                        RequestCycle cycle = RequestCycle.get();
                        if (cycle != null)
                        {
-                               return 
getSessionStore().getAttribute(cycle.getRequest(), name);
+                               return 
(Serializable)getSessionStore().getAttribute(cycle.getRequest(), name);
                        }
                }
                else
                {
                        if (temporarySessionAttributes != null)
                        {
-                               return temporarySessionAttributes.get(name);
+                               return 
(Serializable)temporarySessionAttributes.get(name);
                        }
                }
                return null;
@@ -1260,7 +1263,10 @@
         * @param value
         *            The value of the attribute
         */
-       protected final void setAttribute(String name, Object value)
+       // TODO WICKET-NG made public for page manager, used to be protected, 
see if there is a way to
+       // revert
+
+       public final void setAttribute(String name, Serializable value)
        {
                if (!isTemporary())
                {
@@ -1439,7 +1445,8 @@
                {
                        for (Entry<String, Object> entry : tempMap.entrySet())
                        {
-                               setAttribute(entry.getKey(), entry.getValue());
+                               // WICKET-NG this cast should not be necessary, 
map should be <string,serializable>
+                               setAttribute(entry.getKey(), 
(Serializable)entry.getValue());
                        }
                }
 

Modified: 
wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/page/ManageablePage.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/page/ManageablePage.java?rev=832322&r1=832321&r2=832322&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/page/ManageablePage.java 
(original)
+++ 
wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/page/ManageablePage.java 
Tue Nov  3 07:26:09 2009
@@ -16,9 +16,9 @@
  */
 package org.apache.wicket.ng.page;
 
-import org.apache.wicket.model.IDetachable;
 
-public interface ManageablePage extends IDetachable
+// TODO WICKET-NG: this iface used to extend IDetachable, however this causes 
problems because Page becomes IDetachable and some property models will cause 
an infinite loop trigging detach on the component again because it is their 
target object. In the future Component should indeed implement IDetachable, for 
now copied #detach into this iface directly.
+public interface ManageablePage /* extends IDetachable */
 {
        /**
         * Gets whether the page is stateless. Components on stateless page 
must not render any stateful
@@ -35,5 +35,11 @@
         */
        public int getPageId();
 
+       /**
+        * Detaches model after use. This is generally used to null out 
transient references that can be
+        * re-attached later.
+        */
+       void detach();
+
 
 }


Reply via email to