Author: knopp
Date: Mon Apr 6 11:20:48 2009
New Revision: 762279
URL: http://svn.apache.org/viewvc?rev=762279&view=rev
Log: (empty)
Added:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/page/common/
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/page/common/AbstractPageManager.java
(contents, props changed)
- copied, changed from r762271,
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/page/AbstractPageManager.java
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/page/common/RequestAdapter.java
(with props)
Removed:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/page/AbstractPageManager.java
Modified:
wicket/sandbox/knopp/experimental/wicket-ng-webapp/src/main/java/org/apache/wicket/ngwebapp/TestPage1.java
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/Application.java
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/Session.java
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/page/persistent/PersistentPageManager.java
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/session/HttpSessionStore.java
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/session/SessionStore.java
Modified:
wicket/sandbox/knopp/experimental/wicket-ng-webapp/src/main/java/org/apache/wicket/ngwebapp/TestPage1.java
URL:
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng-webapp/src/main/java/org/apache/wicket/ngwebapp/TestPage1.java?rev=762279&r1=762278&r2=762279&view=diff
==============================================================================
---
wicket/sandbox/knopp/experimental/wicket-ng-webapp/src/main/java/org/apache/wicket/ngwebapp/TestPage1.java
(original)
+++
wicket/sandbox/knopp/experimental/wicket-ng-webapp/src/main/java/org/apache/wicket/ngwebapp/TestPage1.java
Mon Apr 6 11:20:48 2009
@@ -62,6 +62,7 @@
RequestCycle.get().setResponsePage(new
TestPage2());
}
};
+ // l3.setBookmarkable(true);
l3.setLabel("Link 3 - Go to Test Page 2 - Not mounted, Not
bookmarkable");
add(l3);
Modified:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/Application.java
URL:
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/Application.java?rev=762279&r1=762278&r2=762279&view=diff
==============================================================================
---
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/Application.java
(original)
+++
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/Application.java
Mon Apr 6 11:20:48 2009
@@ -59,6 +59,8 @@
public void destroy()
{
+ pageManager.destroy();
+ sessionStore.destroy();
applications.remove(name);
}
Modified:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/Session.java
URL:
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/Session.java?rev=762279&r1=762278&r2=762279&view=diff
==============================================================================
---
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/Session.java
(original)
+++
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/Session.java
Mon Apr 6 11:20:48 2009
@@ -73,22 +73,23 @@
return getSessionStore().getSessionId(getRequest(), false);
}
- public void hasBeenBound()
+
+ public void bind()
{
- if (temporarySessionAttributes != null)
+ if (isTemporary())
{
- for (Map.Entry<String, Serializable> entry :
temporarySessionAttributes.entrySet())
+ getSessionStore().getSessionId(getRequest(), true);
+ getSessionStore().bind(getRequest(), this);
+
+ if (temporarySessionAttributes != null)
{
- getSessionStore().setAttribute(getRequest(),
entry.getKey(), entry.getValue());
+ for (Map.Entry<String, Serializable> entry :
temporarySessionAttributes.entrySet())
+ {
+
getSessionStore().setAttribute(getRequest(), entry.getKey(), entry.getValue());
+ }
+ temporarySessionAttributes = null;
}
- temporarySessionAttributes = null;
- }
- }
-
- public void bind()
- {
- getSessionStore().getSessionId(getRequest(), true);
- getSessionStore().bind(getRequest(), this);
+ }
}
protected void setAttribute(String name, Serializable value)
Copied:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/page/common/AbstractPageManager.java
(from r762271,
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/common/AbstractPageManager.java?p2=wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/page/common/AbstractPageManager.java&p1=wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/page/AbstractPageManager.java&r1=762271&r2=762279&rev=762279&view=diff
==============================================================================
---
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/page/AbstractPageManager.java
(original)
+++
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/page/common/AbstractPageManager.java
Mon Apr 6 11:20:48 2009
@@ -1,10 +1,9 @@
-package org.apache.wicket.page;
+package org.apache.wicket.page.common;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
import org.apache.wicket.IPage;
+import org.apache.wicket.page.PageManager;
+import org.apache.wicket.page.PageManagerContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -25,6 +24,12 @@
{
}
+ protected abstract RequestAdapter newRequestAdapter(PageManagerContext
context);
+
+ public abstract boolean supportsVersioning();
+
+ public abstract void sessionExpired(String sessionId);
+
public void setContext(PageManagerContext context)
{
this.context = context;
@@ -34,139 +39,7 @@
{
return context;
};
-
- /**
- * Request scoped helper class for {...@link PageManager}.
- *
- * @author Matej Knopp
- */
- protected abstract class RequestAdapter
- {
- private final PageManagerContext context;
-
- public RequestAdapter(PageManagerContext 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();
-
- /**
- * Bind the session
- */
- protected void bind()
- {
- context.bind();
- }
-
- 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);
- }
- }
-
- // store pages that are not stateless
- List<IPage> statefulPages = new
ArrayList<IPage>(touchedPages.size());
- for (IPage page : touchedPages)
- {
- if (!page.isPageStateless())
- {
- statefulPages.add(page);
- }
- }
- storeTouchedPages(statefulPages);
- }
-
- List<IPage> touchedPages = new ArrayList<IPage>();
- List<IPage> pages = new ArrayList<IPage>();
- };
-
- protected abstract RequestAdapter newRequestAdapter(PageManagerContext
context);
-
+
protected RequestAdapter getRequestAdapter()
{
RequestAdapter adapter = (RequestAdapter)
getContext().getRequestData();
@@ -201,8 +74,6 @@
adapter.newSessionCreated();
}
- public abstract boolean supportsVersioning();
-
public void touchPage(IPage page)
{
if (!page.isPageStateless())
@@ -213,5 +84,5 @@
adapter.touch(page);
}
- private static Logger logger =
LoggerFactory.getLogger(AbstractPageManager.class);
+ static Logger logger =
LoggerFactory.getLogger(AbstractPageManager.class);
}
Propchange:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/page/common/AbstractPageManager.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/page/common/RequestAdapter.java
URL:
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/page/common/RequestAdapter.java?rev=762279&view=auto
==============================================================================
---
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/page/common/RequestAdapter.java
(added)
+++
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/page/common/RequestAdapter.java
Mon Apr 6 11:20:48 2009
@@ -0,0 +1,139 @@
+package org.apache.wicket.page.common;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.wicket.IPage;
+import org.apache.wicket.page.PageManager;
+import org.apache.wicket.page.PageManagerContext;
+
+/**
+ * Request scoped helper class for {...@link PageManager}.
+ *
+ * @author Matej Knopp
+ */
+public abstract class RequestAdapter
+{
+ private final PageManagerContext context;
+
+ public RequestAdapter(PageManagerContext 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();
+
+ /**
+ * Bind the session
+ */
+ protected void bind()
+ {
+ context.bind();
+ }
+
+ 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)
+ {
+ AbstractPageManager.logger.error("Error
detaching page", e);
+ }
+ }
+
+ // store pages that are not stateless
+ List<IPage> statefulPages = new
ArrayList<IPage>(touchedPages.size());
+ for (IPage page : touchedPages)
+ {
+ if (!page.isPageStateless())
+ {
+ statefulPages.add(page);
+ }
+ }
+ storeTouchedPages(statefulPages);
+ }
+
+ List<IPage> touchedPages = new ArrayList<IPage>();
+ List<IPage> pages = new ArrayList<IPage>();
+}
\ No newline at end of file
Propchange:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/page/common/RequestAdapter.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/page/persistent/PersistentPageManager.java
URL:
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/page/persistent/PersistentPageManager.java?rev=762279&r1=762278&r2=762279&view=diff
==============================================================================
---
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/page/persistent/PersistentPageManager.java
(original)
+++
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/page/persistent/PersistentPageManager.java
Mon Apr 6 11:20:48 2009
@@ -8,23 +8,30 @@
import java.util.concurrent.ConcurrentHashMap;
import org.apache.wicket.IPage;
-import org.apache.wicket.page.AbstractPageManager;
import org.apache.wicket.page.PageManagerContext;
+import org.apache.wicket.page.common.AbstractPageManager;
+import org.apache.wicket.page.common.RequestAdapter;
public class PersistentPageManager extends AbstractPageManager
{
private final PageStore pageStore;
private final String applicationName;
-
+
public PersistentPageManager(String applicationName, PageStore
pageStore)
{
this.applicationName = applicationName;
this.pageStore = pageStore;
managers.put(applicationName, this);
}
-
+
private static Map<String, PersistentPageManager> managers = new
ConcurrentHashMap<String, PersistentPageManager>();
+ /**
+ * Represents entry for single session. This is stored as session
attribute and caches pages
+ * between requests.
+ *
+ * @author Matej Knopp
+ */
private static class SessionEntry implements Serializable
{
private static final long serialVersionUID = 1L;
@@ -48,6 +55,11 @@
return manager.pageStore;
}
+ /**
+ * Add the page to cached pages if page with same id is not
already there
+ *
+ * @param page
+ */
private void addPage(IPage page)
{
if (page != null)
@@ -62,8 +74,11 @@
}
pages.add(page);
}
-
-
+
+ /**
+ * If the pages are stored in temporary state (after
deserialization) this method
+ * convert them to list of "real" pages
+ */
private void convertAfterReadObjects()
{
if (pages == null)
@@ -76,16 +91,19 @@
IPage page = getPageStore().convertToPage(o);
addPage(page);
}
-
+
afterReadObject = null;
}
public synchronized IPage getPage(int id)
{
+ // check if pages are in deserialized state
if (afterReadObject != null &&
afterReadObject.isEmpty() == false)
{
convertAfterReadObjects();
}
+
+ // try to find page with same id
if (pages != null)
{
for (IPage page : pages)
@@ -96,21 +114,26 @@
}
}
}
+
+ // not found, ask pagestore for the page
return getPageStore().getPage(sessionId, id);
}
+ // set the list of pages to remember after the request
public synchronized void setPages(List<IPage> pages)
{
this.pages = new ArrayList<IPage>(pages);
afterReadObject = null;
- }
+ }
private transient List<IPage> pages;
private transient List<Object> afterReadObject;
-
+
private void writeObject(java.io.ObjectOutputStream s) throws
IOException
{
s.defaultWriteObject();
+
+ // prepare for serialization and store the pages
List<Serializable> l = new ArrayList<Serializable>();
for (IPage p : pages)
{
@@ -118,23 +141,30 @@
}
s.writeObject(l);
}
-
+
@SuppressWarnings("unchecked")
private void readObject(java.io.ObjectInputStream s) throws
IOException, ClassNotFoundException
{
s.defaultReadObject();
-
+
List<Serializable> l = (List<Serializable>)
s.readObject();
-
+
+ // convert to temporary state after deserialization
(will need to be processed
+ // by convertAfterReadObject before the pages can be
accessed)
for (Serializable ser : l)
{
afterReadObject.add(getPageStore().restoreAfterSerialization(ser));
}
-
+
afterReadObject = new ArrayList<Object>();
}
};
+ /**
+ * {...@link RequestAdapter} for {...@link PersistentPageManager}
+ *
+ * @author Matej Knopp
+ */
protected class PersitentRequestAdapter extends RequestAdapter
{
public PersitentRequestAdapter(PageManagerContext context)
@@ -145,11 +175,12 @@
@Override
protected IPage getPage(int id)
{
- SessionEntry entry = getSessionEntry(false);
- IPage page = entry != null ? entry.getPage(id) : null;
- if (page != null)
+ // try to get session entry for this session
+ SessionEntry entry = getSessionEntry(false);
+
+ if (entry != null)
{
- return page;
+ return entry.getPage(id);
}
else
{
@@ -164,8 +195,8 @@
SessionEntry entry = (SessionEntry)
getSessionAttribute(ATTRIBUTE_NAME);
if (entry == null && create)
{
- bind();
- entry = new SessionEntry(applicationName,
getSessionId());
+ bind();
+ entry = new SessionEntry(applicationName,
getSessionId());
}
if (entry != null)
{
@@ -181,6 +212,7 @@
@Override
protected void newSessionCreated()
{
+ // if the session is not temporary bind a session entry
to it
if (getSessionId() != null)
{
getSessionEntry(true);
@@ -222,6 +254,6 @@
public void destroy()
{
managers.remove(applicationName);
- }
+ }
}
Modified:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/session/HttpSessionStore.java
URL:
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/session/HttpSessionStore.java?rev=762279&r1=762278&r2=762279&view=diff
==============================================================================
---
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/session/HttpSessionStore.java
(original)
+++
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/session/HttpSessionStore.java
Mon Apr 6 11:20:48 2009
@@ -158,9 +158,7 @@
applicationKey, httpSession.getId()));
// register the session object itself
- setAttribute(request, SESSION_ATTRIBUTE_NAME,
newSession);
-
- newSession.hasBeenBound();
+ setAttribute(request, SESSION_ATTRIBUTE_NAME,
newSession);
}
}
Modified:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/session/SessionStore.java
URL:
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/session/SessionStore.java?rev=762279&r1=762278&r2=762279&view=diff
==============================================================================
---
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/session/SessionStore.java
(original)
+++
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/session/SessionStore.java
Mon Apr 6 11:20:48 2009
@@ -27,6 +27,8 @@
/**
* The actual store that is used by {...@link org.apache.wicket.Session} to
store its attributes.
+ * <p>
+ * This class is intended for internal framework use.
*
* @author Eelco Hillenius
* @author Johan Compagner