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