You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by iv...@apache.org on 2009/11/03 08:26:09 UTC

svn commit: r832322 - in /wicket/trunk/wicket/src/main/java/org/apache/wicket: Application.java Page.java Session.java ng/page/ManageablePage.java

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