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]

Reply via email to