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);


Reply via email to