ozeigermann    2003/11/24 08:45:14

  Modified:    src/webdav/server/org/apache/slide/webdav/method
                        AbstractWebdavMethod.java MoveMethod.java
  Log:
  Check if source resource is locked before trying to move it.
  Because a move is composed of a copy followed by a delete and
  this delete would fail if there was a lock on it, before this fix a move
  could acutally result in a copy. 
  Thanks to Stefano Mazzocchi for this patch.
  
  Submitted by: Stefano Mazzocchi
  
  Revision  Changes    Path
  1.18      +26 -3     
jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/AbstractWebdavMethod.java
  
  Index: AbstractWebdavMethod.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/AbstractWebdavMethod.java,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- AbstractWebdavMethod.java 5 Nov 2003 14:24:35 -0000       1.17
  +++ AbstractWebdavMethod.java 24 Nov 2003 16:45:14 -0000      1.18
  @@ -90,6 +90,7 @@
   import org.apache.slide.lock.Lock;
   import org.apache.slide.lock.ObjectLockedException;
   import org.apache.slide.lock.UnlockListener;
  +import org.apache.slide.lock.NodeLock;
   import org.apache.slide.macro.ConflictException;
   import org.apache.slide.macro.ForbiddenException;
   import org.apache.slide.macro.Macro;
  @@ -952,6 +953,28 @@
               destinationExists = false;
           }
           return destinationExists;
  +    }
  +
  +    protected boolean isLocked( String uriStr ) throws ServiceAccessException {
  +        // use a non-blocking slide token.
  +        SlideToken stoken = readonlySlideToken();
  +
  +        boolean isLocked = false;
  +        try {
  +            Enumeration locks = lock.enumerateLocks (stoken, uriStr, false);
  +            while (locks.hasMoreElements()) {
  +                if (lock.isLocked(stoken,(NodeLock) locks.nextElement(),false)) {
  +                    isLocked = true;
  +                }
  +            }
  +        }
  +        catch (ServiceAccessException x) {
  +            throw x;
  +        }
  +        catch (SlideException x) {
  +            // ignore silently
  +        }
  +        return isLocked;
       }
   
       protected boolean isLockNull( String uriStr ) throws ServiceAccessException {
  
  
  
  1.65      +7 -3      
jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/MoveMethod.java
  
  Index: MoveMethod.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/MoveMethod.java,v
  retrieving revision 1.64
  retrieving revision 1.65
  diff -u -r1.64 -r1.65
  --- MoveMethod.java   5 Nov 2003 14:24:34 -0000       1.64
  +++ MoveMethod.java   24 Nov 2003 16:45:14 -0000      1.65
  @@ -194,6 +194,10 @@
                   int statusCode = WebdavStatus.SC_NOT_FOUND;
                   sendError( statusCode, "lock-null resource", new 
Object[]{sourceUri} );
                   throw new WebdavException( statusCode );
  +            } else if (isLocked(sourceUri)) {
  +                int statusCode = WebdavStatus.SC_LOCKED;
  +                sendError( statusCode, getClass().getName()+".noLocked", new 
Object[]{sourceUri} );
  +                throw new WebdavException( statusCode );
               }
           }
           catch (ServiceAccessException e) {
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to