You are viewing a plain text version of this content. The canonical link for it is here.
Posted to slide-dev@jakarta.apache.org by ma...@apache.org on 2004/11/30 08:05:54 UTC

cvs commit: jakarta-slide/webdavclient/clientlib/src/java/org/apache/webdav/lib WebdavResource.java

masonjm     2004/11/29 23:05:54

  Modified:    src/share/org/apache/slide/event Tag:
                        SLIDE_2_1_RELEASE_BRANCH EventCollectionFilter.java
               src/webdav/server/org/apache/slide/webdav/method Tag:
                        SLIDE_2_1_RELEASE_BRANCH AbstractWebdavMethod.java
                        UnlockMethod.java
               webdavclient/clientlib/src/java/org/apache/webdav/lib Tag:
                        SLIDE_2_1_RELEASE_BRANCH WebdavResource.java
  Log:
  Fix for bug 32250, submitted by Warwick Burrows
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.5.2.1   +37 -28    jakarta-slide/src/share/org/apache/slide/event/EventCollectionFilter.java
  
  Index: EventCollectionFilter.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/src/share/org/apache/slide/event/EventCollectionFilter.java,v
  retrieving revision 1.5
  retrieving revision 1.5.2.1
  diff -u -r1.5 -r1.5.2.1
  --- EventCollectionFilter.java	28 Jul 2004 09:36:26 -0000	1.5
  +++ EventCollectionFilter.java	30 Nov 2004 07:05:52 -0000	1.5.2.1
  @@ -34,14 +34,17 @@
   public class EventCollectionFilter {
       public static ContentEvent[] getChangedContents(EventCollection collection) {
           List changedContents = new ArrayList();
  -        List collectedEvents = collection.getCollection();
  -        for ( Iterator i = collectedEvents.iterator(); i.hasNext(); ) {
  -            EventCollection.Event event = (EventCollection.Event)i.next();
  -            if ( event.getMethod() == ContentEvent.STORE ) {
  -                removeContentEvents(changedContents, ((ContentEvent)event.getEvent()).getUri());
  -                changedContents.add(event.getEvent());
  -            } else if ( event.getMethod() == ContentEvent.REMOVE ) {
  -                removeContentEvents(changedContents, ((ContentEvent)event.getEvent()).getUri());
  +        if (collection != null)
  +        {
  +            List collectedEvents = collection.getCollection();
  +            for ( Iterator i = collectedEvents.iterator(); i.hasNext(); ) {
  +                EventCollection.Event event = (EventCollection.Event)i.next();
  +                if ( event.getMethod() == ContentEvent.STORE ) {
  +                    removeContentEvents(changedContents, ((ContentEvent)event.getEvent()).getUri());
  +                    changedContents.add(event.getEvent());
  +                } else if ( event.getMethod() == ContentEvent.REMOVE ) {
  +                    removeContentEvents(changedContents, ((ContentEvent)event.getEvent()).getUri());
  +                }
               }
           }
           ContentEvent[] changedContentEvents = new ContentEvent[changedContents.size()];
  @@ -50,14 +53,17 @@
   
       public static ContentEvent[] getCreatedContents(EventCollection collection) {
           List changedContents = new ArrayList();
  -        List collectedEvents = collection.getCollection();
  -        for ( Iterator i = collectedEvents.iterator(); i.hasNext(); ) {
  -            EventCollection.Event event = (EventCollection.Event)i.next();
  -            if ( event.getMethod() == ContentEvent.CREATE ) {
  -                removeContentEvents(changedContents, ((ContentEvent)event.getEvent()).getUri());
  -                changedContents.add(event.getEvent());
  -            } else if ( event.getMethod() == ContentEvent.REMOVE ) {
  -                removeContentEvents(changedContents, ((ContentEvent)event.getEvent()).getUri());
  +        if (collection != null)
  +        {
  +            List collectedEvents = collection.getCollection();
  +            for ( Iterator i = collectedEvents.iterator(); i.hasNext(); ) {
  +                EventCollection.Event event = (EventCollection.Event)i.next();
  +                if ( event.getMethod() == ContentEvent.CREATE ) {
  +                    removeContentEvents(changedContents, ((ContentEvent)event.getEvent()).getUri());
  +                    changedContents.add(event.getEvent());
  +                } else if ( event.getMethod() == ContentEvent.REMOVE ) {
  +                    removeContentEvents(changedContents, ((ContentEvent)event.getEvent()).getUri());
  +                }
               }
           }
           ContentEvent[] changedContentEvents = new ContentEvent[changedContents.size()];
  @@ -66,14 +72,17 @@
   
       public static ContentEvent[] getRemovedContents(EventCollection collection) {
           List changedContents = new ArrayList();
  -        List collectedEvents = collection.getCollection();
  -        for ( Iterator i = collectedEvents.iterator(); i.hasNext(); ) {
  -            EventCollection.Event event = (EventCollection.Event)i.next();
  -            if ( event.getMethod() == ContentEvent.REMOVE ) {
  -                removeContentEvents(changedContents, ((ContentEvent)event.getEvent()).getUri());
  -                changedContents.add(event.getEvent());
  -            } else if ( event.getMethod() == ContentEvent.CREATE || event.getMethod() == ContentEvent.STORE ) {
  -                removeContentEvents(changedContents, ((ContentEvent)event.getEvent()).getUri());
  +        if (collection != null)
  +        {
  +            List collectedEvents = collection.getCollection();
  +            for ( Iterator i = collectedEvents.iterator(); i.hasNext(); ) {
  +                EventCollection.Event event = (EventCollection.Event)i.next();
  +                if ( event.getMethod() == ContentEvent.REMOVE ) {
  +                    removeContentEvents(changedContents, ((ContentEvent)event.getEvent()).getUri());
  +                    changedContents.add(event.getEvent());
  +                } else if ( event.getMethod() == ContentEvent.CREATE || event.getMethod() == ContentEvent.STORE ) {
  +                    removeContentEvents(changedContents, ((ContentEvent)event.getEvent()).getUri());
  +                }
               }
           }
           ContentEvent[] changedContentEvents = new ContentEvent[changedContents.size()];
  
  
  
  No                   revision
  No                   revision
  1.43.2.10 +38 -18    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.43.2.9
  retrieving revision 1.43.2.10
  diff -u -r1.43.2.9 -r1.43.2.10
  --- AbstractWebdavMethod.java	5 Oct 2004 12:09:24 -0000	1.43.2.9
  +++ AbstractWebdavMethod.java	30 Nov 2004 07:05:53 -0000	1.43.2.10
  @@ -364,26 +364,46 @@
                   globalLockObtained = true;
               }
   
  -            try {
  -                // retrive to check it exists, otherwise it can't have locks
  -                structure.retrieve(slideToken, requestUri);
  -                // clear expired lock-tokens
  -                UnlockListenerImpl listener = new UnlockListenerImpl(slideToken, token, config, req, resp);
  -                lock.clearExpiredLocks(slideToken, requestUri, listener);
  +            // Was this call made to finalize a transaction?
  +            boolean isEndofTransactionxUnlock = false;
  +            if (this instanceof UnlockMethod)
  +            {
  +                UnlockMethod meth = (UnlockMethod)this;
  +                if (meth.getCommand() != UnlockMethod.NO_TRANSACTION)
  +                    isEndofTransactionxUnlock = true;
  +            }
  +
  +            /*
  +             * Check for object existence and cleanup locks only if we're not 
  +             * unlocking as part of finalizing a transaction. Otherwise we
  +             * are making calls to the store that require a transaction to
  +             * be in process while we're trying to commit or abort it the
  +             * current transaction.
  +             */            
  +            if (!isEndofTransactionxUnlock)
  +            {
  +                try {
  +                    // retrive to check it exists, otherwise it can't have locks
  +                    structure.retrieve(slideToken, requestUri);
  +                    // clear expired lock-tokens
  +                    UnlockListenerImpl listener = new UnlockListenerImpl(slideToken, token, config, req, resp);
  +                    lock.clearExpiredLocks(slideToken, requestUri, listener);
                   
  -                if (listener.getUnlockCount() > 0) {
  -                    // If we have have cleared any lock or any lock-null resource in   
  -                    // the previous step we commit this changes, otherwise they will  
  -                    // be lost if executeRequest() exits with an exception (e.g. 
  -                    // because of Not Found 404)
  -                    token.commit();
  -                    token.begin();
  +                    if (listener.getUnlockCount() > 0) {
  +                        // If we have have cleared any lock or any lock-null resource in   
  +                        // the previous step we commit this changes, otherwise they will  
  +                        // be lost if executeRequest() exits with an exception (e.g. 
  +                        // because of Not Found 404)
  +                        token.commit();
  +                        token.begin();
  +                    }
  +                } catch (ObjectNotFoundException e) {
  +                    // ignore, it can't have locks
                   }
  -            } catch (ObjectNotFoundException e) {
  -                // ignore, it can't have locks
               }
               
               executeRequest();
  +            
               if (!slideToken.isExternalTransaction() && transactionIsStarted) {
                   token.commit();
                   transactionIsStarted = false;
  
  
  
  1.39.2.3  +13 -3     jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/UnlockMethod.java
  
  Index: UnlockMethod.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/UnlockMethod.java,v
  retrieving revision 1.39.2.2
  retrieving revision 1.39.2.3
  diff -u -r1.39.2.2 -r1.39.2.3
  --- UnlockMethod.java	11 Oct 2004 10:20:21 -0000	1.39.2.2
  +++ UnlockMethod.java	30 Nov 2004 07:05:53 -0000	1.39.2.3
  @@ -111,6 +111,16 @@
   
   	// ------------------------------------------------------ Protected Methods
   
  +    /**
  +     * get the command for this unlock operation.
  +     * 
  +     * @return int command. One of NO_TRANSACTION, COMMIT_TRANSACTION, ABORT_TRANSACTION
  +     */
  +    public int getCommand()
  +    {
  +        return command;
  +    }
  +    
   	/**
   	 * Parse the request.
   	 * 
  
  
  
  No                   revision
  No                   revision
  1.29.2.3  +9 -3      jakarta-slide/webdavclient/clientlib/src/java/org/apache/webdav/lib/WebdavResource.java
  
  Index: WebdavResource.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/webdavclient/clientlib/src/java/org/apache/webdav/lib/WebdavResource.java,v
  retrieving revision 1.29.2.2
  retrieving revision 1.29.2.3
  diff -u -r1.29.2.2 -r1.29.2.3
  --- WebdavResource.java	2 Oct 2004 17:57:28 -0000	1.29.2.2
  +++ WebdavResource.java	30 Nov 2004 07:05:54 -0000	1.29.2.3
  @@ -4239,6 +4239,7 @@
           method.setDepth(depth);        
   
           generateIfHeader(method);
  +        generateTransactionHeader(method);
           int statusCode = client.executeMethod(method);
           String lock = method.getLockToken();
           WebdavState state = (WebdavState) client.getState();
  @@ -4459,6 +4460,7 @@
           method.setFollowRedirects(this.followRedirects);
   
           generateIfHeader(method);
  +        generateTransactionHeader(method);
           method.setLockToken(lock);
           int statusCode = client.executeMethod(method);
   
  @@ -5183,6 +5185,7 @@
          method.setSubsciptionLifetime(lifetime);
          method.setNotificationType(notificationType);
          method.setNotificationDelay(notificationDelay);
  +       generateTransactionHeader(method);
          
          int statusCode = client.executeMethod(method);
          
  @@ -5215,6 +5218,7 @@
          method.setFollowRedirects(this.followRedirects);
          
          method.setSubscriptionId(subscriptionId);
  +       generateTransactionHeader(method);
          
          int statusCode = client.executeMethod(method);
          
  @@ -5252,6 +5256,7 @@
          method.setFollowRedirects(this.followRedirects);   
          
          method.addSubscriptionId(subscriptionId);
  +       generateTransactionHeader(method);
          
          int statusCode = client.executeMethod(method);
          
  @@ -5289,6 +5294,7 @@
          method.setFollowRedirects(this.followRedirects);
          
          method.addSubscriptionId(subscriptionId);
  +       generateTransactionHeader(method);
          
          int statusCode = client.executeMethod(method);
          
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: slide-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: slide-dev-help@jakarta.apache.org