You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by kn...@apache.org on 2009/03/30 01:29:59 UTC

svn commit: r759798 - in /wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/page: AbstractPageManager.java PageManager.java

Author: knopp
Date: Sun Mar 29 23:29:59 2009
New Revision: 759798

URL: http://svn.apache.org/viewvc?rev=759798&view=rev
Log: (empty)

Added:
    wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/page/AbstractPageManager.java   (with props)
Modified:
    wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/page/PageManager.java

Added: wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/page/AbstractPageManager.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/page/AbstractPageManager.java?rev=759798&view=auto
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/page/AbstractPageManager.java (added)
+++ wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/page/AbstractPageManager.java Sun Mar 29 23:29:59 2009
@@ -0,0 +1,179 @@
+package org.apache.wicket.page;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.wicket.IPage;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Convenience class for {@link PageManager} implementations. Subclass should extend
+ * {@link RequestAdapter} and override {@link #newRequestAdater()} method to return it's
+ * {@link RequestAdapter} implementation.
+ * 
+ * 
+ * @author Matej Knopp
+ * 
+ */
+public abstract class AbstractPageManager implements PageManager
+{
+
+	public AbstractPageManager()
+	{
+	}
+
+	/**
+	 * Request scoped helper class for {@link PageManager}.
+	 * 
+	 * @author Matej Knopp
+	 */
+	protected abstract class RequestAdapter
+	{
+		private final Context context;
+
+		public RequestAdapter(Context context)
+		{
+			this.context = context;
+		}
+
+		/**
+		 * Returns the page with specified id. The page is then cached by {@link RequestAdapter}
+		 * during the rest of request processing.
+		 * 
+		 * @param id
+		 * @return page instance or <code>null</code> if the page does not exist.
+		 */
+		protected abstract IPage getPage(int id);
+
+		/**
+		 * Store the list of pages.
+		 * 
+		 * @param touchedPages
+		 */
+		protected abstract void storeTouchedPages(List<IPage> touchedPages);
+
+		/**
+		 * Notification on new session being created.
+		 */
+		protected abstract void newSessionCreated();
+
+		public void setSessionAttribute(String key, Serializable value)
+		{
+			context.setSessionAttribute(key, value);
+		}
+
+		public Serializable getSessionAttribute(String key)
+		{
+			return context.getSessionAttribute(key);
+		}
+
+		public String getSessionId()
+		{
+			return context.getSessionId();
+		}
+
+		protected final IPage getPageInternal(int id)
+		{
+			IPage page = findPage(id);
+			if (page == null)
+			{
+				page = getPage(id);
+			}
+			if (page != null)
+			{
+				pages.add(page);	
+			}			
+			return page;
+		}
+
+		private IPage findPage(int id)
+		{
+			for (IPage page : pages)
+			{
+				if (page.getPageId() == id)
+				{
+					return page;
+				}
+			}
+			return null;
+		}
+
+		protected void touch(IPage page)
+		{
+			if (findPage(page.getPageId()) == null)
+			{
+				pages.add(page);
+			}
+			for (IPage p : touchedPages)
+			{
+				if (p.getPageId() == page.getPageId())
+				{
+					return;
+				}
+			}
+			touchedPages.add(page);
+		}
+
+		protected void commitRequest()
+		{
+			for (IPage page : pages)
+			{
+				try
+				{
+					page.detach();
+				}
+				catch (Exception e)
+				{
+					logger.error("Error detaching page", e);
+				}
+			}
+			storeTouchedPages(touchedPages);
+		}
+
+		List<IPage> touchedPages = new ArrayList<IPage>();
+		List<IPage> pages = new ArrayList<IPage>();
+	};
+
+	protected abstract RequestAdapter newRequestAdater();
+
+	protected RequestAdapter getRequestAdapter(Context context)
+	{
+		RequestAdapter adapter = (RequestAdapter) context.getRequestData();
+		if (adapter == null)
+		{
+			adapter = newRequestAdater();
+			context.setRequestData(adapter);
+		}
+		return adapter;
+	}
+
+	public void commitRequest(Context context)
+	{
+		RequestAdapter adapter = getRequestAdapter(context);
+		adapter.commitRequest();
+	}
+
+	public IPage getPage(Context context, int id)
+	{
+		RequestAdapter adapter = getRequestAdapter(context);
+		return adapter.getPage(id);
+	}
+
+	public void newSessionCreated(Context context)
+	{
+		RequestAdapter adapter = getRequestAdapter(context);
+		adapter.newSessionCreated();
+	}
+
+	public abstract boolean supportsVersioning();
+
+	public void touchPage(Context context, IPage page)
+	{
+		RequestAdapter adapter = getRequestAdapter(context);
+		adapter.touch(page);
+	}
+
+	private static Logger logger = LoggerFactory.getLogger(AbstractPageManager.class);
+}

Propchange: wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/page/AbstractPageManager.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/page/PageManager.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/page/PageManager.java?rev=759798&r1=759797&r2=759798&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/page/PageManager.java (original)
+++ wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/page/PageManager.java Sun Mar 29 23:29:59 2009
@@ -55,6 +55,8 @@
 	/**
 	 * Commits the changes to external storage if the manager uses it.
 	 * 
+	 * Should also detach all pages that were retrieved during this request.
+	 * 
 	 * @param context
 	 */
 	public void commitRequest(Context context);