dirkv       01/09/22 05:22:08

  Modified:    src/share/org/apache/slide/lock LockImpl.java
  Log:
  fix different behaviour in enumerateLocks with inherited true/false
  (do not return locks that are timed-out)
  
  Revision  Changes    Path
  1.22      +32 -25    jakarta-slide/src/share/org/apache/slide/lock/LockImpl.java
  
  Index: LockImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/src/share/org/apache/slide/lock/LockImpl.java,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- LockImpl.java     2001/09/13 08:14:07     1.21
  +++ LockImpl.java     2001/09/22 12:22:08     1.22
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/lock/LockImpl.java,v 
1.21 2001/09/13 08:14:07 juergen Exp $
  - * $Revision: 1.21 $
  - * $Date: 2001/09/13 08:14:07 $
  + * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/lock/LockImpl.java,v 
1.22 2001/09/22 12:22:08 dirkv Exp $
  + * $Revision: 1.22 $
  + * $Date: 2001/09/22 12:22:08 $
    *
    * ====================================================================
    *
  @@ -78,7 +78,7 @@
    * Lock helper class.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Remy Maucherat</a>
  - * @version $Revision: 1.21 $
  + * @version $Revision: 1.22 $
    */
   public final class LockImpl implements Lock {
       
  @@ -304,7 +304,6 @@
           
       }
       
  -    
       public Enumeration enumerateLocks(SlideToken slideToken, String objectUri)
           throws ServiceAccessException, ObjectNotFoundException,
           LockTokenNotFoundException {
  @@ -312,7 +311,6 @@
           return enumerateLocks(slideToken, objectUri, true);
       }
       
  -    
       public Enumeration enumerateLocks(SlideToken slideToken, String objectUri,
                                         boolean inherited)
           throws ServiceAccessException, ObjectNotFoundException,
  @@ -321,34 +319,43 @@
           // We retrieve the LockStore service from the namespace.
           Uri subjectUri = namespace.getUri(slideToken, objectUri);
           
  +        Enumeration scopes = null;
           if (inherited) {
               // traverse the namespace up to the root node, and add any locks
               // found in the process
  -            Vector locksVector = new Vector();
  -            Enumeration scopes = subjectUri.getScopes();
  -            while (scopes.hasMoreElements()) {
  -                String currentScope = (String) scopes.nextElement();
  -                Uri currentScopeUri =
  -                    namespace.getUri(slideToken, currentScope);
  -                Enumeration currentLocks =
  -                    currentScopeUri.getStore().enumerateLocks(currentScopeUri);
  -                while (currentLocks.hasMoreElements()) {
  -                    NodeLock currentLockToken =
  -                        (NodeLock) currentLocks.nextElement();
  -                    if (currentLockToken.hasExpired()) {
  +            scopes = subjectUri.getScopes();
  +        } else {
  +            // only return the locks that explicitly and directly lock the
  +            // given subject
  +            Vector scopeVector = new Vector();
  +            scopeVector.add(subjectUri.toString());
  +            scopes = scopeVector.elements();
  +        }
  +        Vector locksVector = new Vector();
  +        while (scopes.hasMoreElements()) {
  +            String currentScope = (String) scopes.nextElement();
  +            Uri currentScopeUri =
  +                namespace.getUri(slideToken, currentScope);
  +            Enumeration currentLocks =
  +                currentScopeUri.getStore().enumerateLocks(currentScopeUri);
  +            while (currentLocks.hasMoreElements()) {
  +                NodeLock currentLockToken =
  +                    (NodeLock) currentLocks.nextElement();
  +                if (currentLockToken.hasExpired()) {
  +                    // FIXME: do cleanup of locks someplace else
  +                    try {
                           currentScopeUri.getStore()
                               .removeLock(currentScopeUri, currentLockToken);
  -                    } else {
  -                        locksVector.addElement(currentLockToken);
                       }
  +                    catch (LockTokenNotFoundException ex) {
  +                        // ignore 
  +                    }
  +                } else {
  +                    locksVector.addElement(currentLockToken);
                   }
               }
  -            return locksVector.elements();
  -        } else {
  -            // only return the locks that explicitly and directly lock the
  -            // given subject
  -            return subjectUri.getStore().enumerateLocks(subjectUri);
           }
  +        return locksVector.elements();
       }
       
       
  
  
  

Reply via email to