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();
+
}