ovidiu 02/04/09 17:38:01 Modified: src/scratchpad/schecoon/src/org/apache/cocoon/components/flow WebContinuation.java Log: Added support for the last access time. Pass an additional time-to-live argument when creating a WebContinuation. Revision Changes Path 1.4 +55 -7 xml-cocoon2/src/scratchpad/schecoon/src/org/apache/cocoon/components/flow/WebContinuation.java Index: WebContinuation.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/schecoon/src/org/apache/cocoon/components/flow/WebContinuation.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- WebContinuation.java 2 Apr 2002 05:02:25 -0000 1.3 +++ WebContinuation.java 10 Apr 2002 00:38:01 -0000 1.4 @@ -1,6 +1,8 @@ package org.apache.cocoon.components.flow; +import java.lang.Comparable; import java.util.ArrayList; +import java.util.Date; import java.util.List; /** @@ -19,11 +21,12 @@ * @since March 19, 2002 */ public class WebContinuation + implements Comparable { /** * The continuation this object represents. */ - Object continuation; + protected Object continuation; /** * The parent <code>WebContinuation</code> from which processing @@ -35,19 +38,19 @@ * * @see ContinuationsManager */ - WebContinuation parentContinuation; + protected WebContinuation parentContinuation; /** * The children continuations. These are continuations created by * resuming the processing from the point stored by * <code>continuation</code>. */ - List children = new ArrayList(); + protected List children = new ArrayList(); /** * The continuation id used to represent this instance in Web pages. */ - String id; + protected String id; /** * A user definable object. This is present for convenience, to @@ -55,7 +58,21 @@ * <code>WebContinuation</code> a particular implementation might * need. */ - Object userObject; + protected Object userObject; + + /** + * When was this continuation accessed last time. Each time the + * continuation is accessed, this time is set to the time of the + * access. + */ + protected long lastAccessTime; + + /** + * Indicates how long does this continuation will live (in + * seconds). The continuation will be removed once the current time + * is bigger than <code>lastAccessTime + timeToLive</code>. + */ + protected int timeToLive; /** * Create a <code>WebContinuation</code> object. Saves the object in @@ -69,11 +86,13 @@ */ public WebContinuation(Object continuation, WebContinuation parentContinuation, - ContinuationsManagerImpl manager) + ContinuationsManagerImpl manager, + int timeToLive) { this.continuation = continuation; this.parentContinuation = parentContinuation; id = manager.generateContinuationId(this); + this.timeToLive = timeToLive; if (parentContinuation != null) this.parentContinuation.children.add(this); } @@ -85,6 +104,7 @@ */ public Object getContinuation() { + updateLastAccessTime(); return continuation; } @@ -101,8 +121,10 @@ */ public WebContinuation getContinuation(int level) { - if (level <= 0) + if (level <= 0) { + updateLastAccessTime(); return this; + } else if (parentContinuation == null) return this; else @@ -187,6 +209,24 @@ } /** + * Compares the expiration time of this instance with that of the + * WebContinuation passed as argument. + * + * <p><b>Note:</b> this class has a natural ordering that is + * inconsistent with <code>equals</code>.</p>. + * + * @param other an <code>Object</code> value, which should be a + * <code>WebContinuation</code> instance + * @return an <code>int</code> value + */ + public int compareTo(Object other) + { + WebContinuation wk = (WebContinuation)other; + return (int)((lastAccessTime + timeToLive) + - (wk.lastAccessTime + wk.timeToLive)); + } + + /** * Debugging method. * * <p>Assumes the receiving instance as the root of a tree and @@ -219,5 +259,13 @@ depth++; for (int i = 0; i < size; i++) ((WebContinuation)children.get(i)).display(depth); + } + + /** + * Update the continuation in the + */ + protected void updateLastAccessTime() + { + lastAccessTime = (new Date()).getTime(); } }
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]