pnever      2005/02/23 08:32:21

  Modified:    src/share/org/apache/slide/macro Tag:
                        SLIDE_2_1_RELEASE_BRANCH MacroImpl.java
               src/webdav/server/org/apache/slide/webdav/method Tag:
                        SLIDE_2_1_RELEASE_BRANCH RebindMethod.java
  Log:
  REBIND postcondition DAV:lock-deleted was not implemented
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.41.2.6  +34 -45    
jakarta-slide/src/share/org/apache/slide/macro/MacroImpl.java
  
  Index: MacroImpl.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/share/org/apache/slide/macro/MacroImpl.java,v
  retrieving revision 1.41.2.5
  retrieving revision 1.41.2.6
  diff -u -r1.41.2.5 -r1.41.2.6
  --- MacroImpl.java    1 Feb 2005 22:57:50 -0000       1.41.2.5
  +++ MacroImpl.java    23 Feb 2005 16:32:20 -0000      1.41.2.6
  @@ -23,26 +23,14 @@
   
   package org.apache.slide.macro;
   
  -import java.util.Arrays;
  -import java.util.Enumeration;
  -import java.util.HashMap;
  -import java.util.Iterator;
  -import java.util.Map;
  -import java.util.StringTokenizer;
  -import org.apache.slide.common.Domain;
  -import org.apache.slide.common.Namespace;
  -import org.apache.slide.common.NamespaceConfig;
  -import org.apache.slide.common.ServiceAccessException;
  -import org.apache.slide.common.SlideException;
  -import org.apache.slide.common.SlideToken;
  -import org.apache.slide.common.Uri;
  -import org.apache.slide.content.Content;
  -import org.apache.slide.content.NodeProperty;
  -import org.apache.slide.content.NodeRevisionContent;
  -import org.apache.slide.content.NodeRevisionDescriptor;
  -import org.apache.slide.content.NodeRevisionDescriptors;
  -import org.apache.slide.content.NodeRevisionNumber;
  -import org.apache.slide.content.RevisionDescriptorNotFoundException;
  +import java.util.*;
  +import org.apache.slide.common.*;
  +import org.apache.slide.content.*;
  +import org.apache.slide.structure.*;
  +
  +import org.apache.slide.event.EventDispatcher;
  +import org.apache.slide.event.MacroEvent;
  +import org.apache.slide.event.VetoException;
   import org.apache.slide.lock.Lock;
   import org.apache.slide.lock.NodeLock;
   import org.apache.slide.lock.ObjectLockedException;
  @@ -51,17 +39,8 @@
   import org.apache.slide.security.NodePermission;
   import org.apache.slide.security.Security;
   import org.apache.slide.store.Store;
  -import org.apache.slide.structure.ActionNode;
  -import org.apache.slide.structure.LinkedObjectNotFoundException;
  -import org.apache.slide.structure.ObjectHasChildrenException;
  -import org.apache.slide.structure.ObjectNode;
  -import org.apache.slide.structure.ObjectNotFoundException;
  -import org.apache.slide.structure.Structure;
   import org.apache.slide.util.Configuration;
  -import org.apache.slide.util.WebdavConstants;
  -import org.apache.slide.event.EventDispatcher;
  -import org.apache.slide.event.MacroEvent;
  -import org.apache.slide.event.VetoException;
  +import org.apache.slide.webdav.util.WebdavConstants;
   
   /**
    * Macro helper class.
  @@ -212,7 +191,7 @@
           if (!e.isEmpty()) {
               throw e;
           }
  -
  +        
           try {
               if ( MacroEvent.COPY.isEnabled() ) 
EventDispatcher.getInstance().fireVetoableEvent(MacroEvent.COPY, new 
MacroEvent(this, token, namespace, sourceUri, destinationUri));
           } catch ( VetoException ve ) {
  @@ -221,7 +200,7 @@
       }
       
       protected void recursiveAccessCheck(Uri uri, ActionNode action) throws 
SlideException,
  -    AccessDeniedException {
  +        AccessDeniedException {
           try {
               ObjectNode node = uri.getStore().retrieveObject(uri);
               securityHelper.checkCredentials(uri.getToken(), node, action);
  @@ -235,10 +214,9 @@
               // if it is not there it access can not be denied
           }
       }
  -
  +    
       protected void recursiveLockCheck(Uri uri) throws SlideException,
  -            ObjectLockedException
  -    {
  +        ObjectLockedException {
           try {
               ObjectNode node = uri.getStore().retrieveObject(uri);
               ActionNode action = namespaceConfig.getCreateObjectAction();
  @@ -279,7 +257,7 @@
               e.addException(ex);
               throw e;
           }
  -
  +        
           if (parameters.isDeleteCreate()) {
               try {
                   // If the object we want to overwrite exists, we delete is 
first
  @@ -329,6 +307,13 @@
               if (copyListener != null) {
                   copyListener.beforeCopy(sourceUri, destinationUri, true);
               }
  +            
  +            // Postcondition: DAV:lock-deleted
  +            Enumeration locksEnum = lockHelper.enumerateLocks(token, 
sourceUri, false);
  +            while (locksEnum.hasMoreElements()) {
  +                lockHelper.unlock(token, (NodeLock)locksEnum.nextElement());
  +            }
  +            
               structureHelper.addBinding( token, destinationParentNode, 
destinationSegment, sourceNode );
               structureHelper.removeBinding( token, sourceParentNode, 
sourceSegment );
           }
  @@ -444,7 +429,7 @@
                    copyRedirector, copyListener, deleteRedirector, 
deleteListener);
               delete(token, sourceUri, parameters, deleteRedirector, 
deleteListener);
           }
  -
  +        
           try {
               if ( MacroEvent.MOVE.isEnabled() ) 
EventDispatcher.getInstance().fireVetoableEvent(MacroEvent.MOVE, new 
MacroEvent(this, token, namespace, sourceUri, destinationUri));
           } catch ( VetoException ve ) {
  @@ -528,7 +513,7 @@
           if (!e.isEmpty()) {
               throw e;
           }
  -
  +        
           try {
               if ( MacroEvent.DELETE.isEnabled() ) 
EventDispatcher.getInstance().fireVetoableEvent(MacroEvent.DELETE, new 
MacroEvent(this, token, namespace, targetUri));
           } catch ( VetoException ve ) {
  @@ -734,7 +719,7 @@
           boolean destinationExists = true;
           try {
               contentHelper.retrieve(token, contentHelper.retrieve(
  -                    token, destinationUri));
  +                                       token, destinationUri));
           }
           catch (ObjectNotFoundException x) {
               destinationExists = false;
  @@ -776,7 +761,7 @@
                           deleteObject(token, childUri, e, deleteRedirector, 
deleteListener);
                       }
                   }
  -
  +                
                   // Removing links objects
                   if (currentObject.hasLinks()) {
                       Enumeration links = currentObject.enumerateLinks();
  @@ -800,7 +785,7 @@
                   
                   NodeRevisionDescriptors revisionDescriptors =
                       contentHelper.retrieve(token, currentObject.getUri());
  -               
  +                
                   // remove the associated locks
                   Enumeration locks = lockHelper.enumerateLocks
                       (token, currentObject.getUri(), false);
  @@ -986,6 +971,9 @@
       private boolean isLockNull( SlideToken slideToken, String uriStr ) 
throws ServiceAccessException {
           boolean isLockNull = false;
           try {
  +            SlideTokenWrapper readOnlyToken = new 
SlideTokenWrapper(slideToken);
  +            readOnlyToken.setForceStoreEnlistment(false);
  +            slideToken = readOnlyToken;
               NodeRevisionDescriptor nrd =
                   contentHelper.retrieve(slideToken, 
contentHelper.retrieve(slideToken, uriStr));
               isLockNull = isLockNull( nrd );
  @@ -1006,3 +994,4 @@
   
   
   
  +
  
  
  
  No                   revision
  No                   revision
  1.16.2.1  +34 -25    
jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/RebindMethod.java
  
  Index: RebindMethod.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/RebindMethod.java,v
  retrieving revision 1.16
  retrieving revision 1.16.2.1
  diff -u -r1.16 -r1.16.2.1
  --- RebindMethod.java 2 Aug 2004 16:36:01 -0000       1.16
  +++ RebindMethod.java 23 Feb 2005 16:32:21 -0000      1.16.2.1
  @@ -5,7 +5,7 @@
    *
    * ====================================================================
    *
  - * Copyright 1999-2002 The Apache Software Foundation 
  + * Copyright 1999-2002 The Apache Software Foundation
    *
    * Licensed under the Apache License, Version 2.0 (the "License");
    * you may not use this file except in compliance with the License.
  @@ -24,12 +24,14 @@
   package org.apache.slide.webdav.method;
   
   import java.io.IOException;
  +import java.util.Enumeration;
   import java.util.List;
  -
   import org.apache.slide.common.NamespaceAccessToken;
   import org.apache.slide.common.ServiceAccessException;
   import org.apache.slide.common.SlideException;
  +import org.apache.slide.common.UriPath;
   import org.apache.slide.event.EventDispatcher;
  +import org.apache.slide.lock.NodeLock;
   import org.apache.slide.lock.ObjectLockedException;
   import org.apache.slide.structure.CrossServerBindingException;
   import org.apache.slide.structure.ObjectNode;
  @@ -48,7 +50,7 @@
    *
    */
   public class RebindMethod extends AbstractWebdavMethod implements 
BindConstants, WriteMethod {
  -
  +    
       private String sourceUri;
       private String sourceSegment;
       private String sourceParentUri;
  @@ -58,8 +60,8 @@
       private ObjectNode sourceNode = null;
       private ObjectNode sourceParentNode = null;
       private ObjectNode collectionNode = null;
  -
  -
  +    
  +    
       /**
        * Constructor.
        *
  @@ -69,7 +71,7 @@
       public RebindMethod(NamespaceAccessToken token, WebdavServletConfig 
config) {
           super(token, config);
       }
  -
  +    
       /**
        * Parse WebDAV XML query.
        *
  @@ -80,10 +82,10 @@
           if (collectionUri == null) {
               collectionUri = "/";
           }
  -
  +        
           List content;
  -
  -//        readRequestContent();
  +        
  +        //        readRequestContent();
           try{
               content = parseRequestContent(E_REBIND).getChildren();
               segment = MethodUtil.getChildText(content, E_SEGMENT);
  @@ -99,15 +101,15 @@
               sendError( statusCode, e );
               throw new WebdavException( statusCode );
           }
  -
  +        
           collectionUri = requestUri;
           if (collectionUri == null) {
               collectionUri = "/";
           }
  -
  +        
           overwrite = requestHeaders.getOverwrite(true);
       }
  -
  +    
       private void checkPreconditions() throws PreconditionViolationException, 
ServiceAccessException {
           resp.setStatus( WebdavStatus.SC_CREATED );
           UriHandler sourceUh = UriHandler.getUriHandler(sourceUri);
  @@ -116,7 +118,7 @@
           if (sourceParentUh != null) {
               sourceParentUri = sourceUh.getParentUriHandler().toString();
           }
  -
  +        
           try {
               collectionNode = structure.retrieve( slideToken, collectionUri );
           }
  @@ -124,7 +126,7 @@
               throw e;
           }
           catch (SlideException e) {} // ignore silently
  -
  +        
           try {
               sourceNode = structure.retrieve( slideToken, sourceUri );
           }
  @@ -132,7 +134,7 @@
               throw e;
           }
           catch (SlideException e) {} // ignore silently
  -
  +        
           try {
               sourceParentNode = structure.retrieve( slideToken, 
sourceParentUri );
           }
  @@ -140,7 +142,7 @@
               throw e;
           }
           catch (SlideException e) {} // ignore silently
  -
  +        
           if (collectionNode == null || !isCollection(collectionUri)) {
               throw new PreconditionViolationException(
                   new ViolatedPrecondition(C_REBIND_INTO_COLLECTION, 
WebdavStatus.SC_CONFLICT), collectionUri);
  @@ -169,17 +171,17 @@
               }
           }
       }
  -
  +    
       /**
        * Execute the request.
        *
        * @exception WebdavException
        */
       protected void executeRequest() throws WebdavException, IOException {
  -
  +        
           // Prevent dirty reads
           slideToken.setForceStoreEnlistment(true);
  -
  +        
           // check lock-null resources
           try {
               if (isLockNull(collectionUri)) {
  @@ -193,11 +195,18 @@
               sendError( statusCode, e );
               throw new WebdavException( statusCode );
           }
  -
  +        
           try {
               if ( WebdavEvent.REBIND.isEnabled() ) 
EventDispatcher.getInstance().fireVetoableEvent(WebdavEvent.REBIND, new 
WebdavEvent(this));
  -
  +            
               checkPreconditions();
  +            
  +            // Postcondition: DAV:lock-deleted
  +            Enumeration locksEnum = lock.enumerateLocks(slideToken, 
sourceUri, false);
  +            while (locksEnum.hasMoreElements()) {
  +                lock.unlock(slideToken, (NodeLock)locksEnum.nextElement());
  +            }
  +            
               structure.addBinding( slideToken, collectionNode, segment, 
sourceNode );
               structure.removeBinding( slideToken, sourceParentNode, 
sourceSegment );
           }
  @@ -241,6 +250,6 @@
               throw new WebdavException( statusCode );
           }
       }
  -
  +    
   }
   
  
  
  

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

Reply via email to