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 pn...@apache.org on 2004/12/14 15:07:42 UTC
cvs commit: jakarta-slide/src/webdav/server/org/apache/slide/webdav/method RebindMethod.java
pnever 2004/12/14 06:07:42
Modified: src/share/org/apache/slide/macro MacroImpl.java
src/webdav/server/org/apache/slide/webdav/method
RebindMethod.java
Log:
REBIND Method: postcondition DAV:lock-deleted was not implemented.
The Binding spec states that (non-inherited) locks are to be removed after
rebinding a resource. If binding is enabled, Slide maps the MOVE method
onto REBIND, so that MOVE was affected in this case too.
Revision Changes Path
1.52 +10 -4 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.51
retrieving revision 1.52
diff -u -r1.51 -r1.52
--- MacroImpl.java 7 Dec 2004 14:10:06 -0000 1.51
+++ MacroImpl.java 14 Dec 2004 14:07:42 -0000 1.52
@@ -393,6 +393,12 @@
structureHelper.addBinding( token, destinationParentNode, destinationSegment, sourceNode );
structureHelper.removeBinding( token, sourceParentNode, sourceSegment );
+
+ // Postcondition: DAV:lock-delete
+ Enumeration locksEnum = lockHelper.enumerateLocks(token, destinationUri, false);
+ while (locksEnum.hasMoreElements()) {
+ lockHelper.unlock(token, (NodeLock)locksEnum.nextElement());
+ }
}
catch (SlideException x) {
e.addException(x);
1.19 +33 -24 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.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- RebindMethod.java 31 Oct 2004 11:32:40 -0000 1.18
+++ RebindMethod.java 14 Dec 2004 14:07:42 -0000 1.19
@@ -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;
@@ -59,8 +61,8 @@
private ObjectNode sourceNode = null;
private ObjectNode sourceParentNode = null;
private ObjectNode collectionNode = null;
-
-
+
+
/**
* Constructor.
*
@@ -70,7 +72,7 @@
public RebindMethod(NamespaceAccessToken token, WebdavServletConfig config) {
super(token, config);
}
-
+
/**
* @see org.apache.slide.webdav.method.FineGrainedLockingMethod#acquireFineGrainLocks()
*/
@@ -89,10 +91,10 @@
if (collectionUri == null) {
collectionUri = "/";
}
-
+
List content;
-
-// readRequestContent();
+
+ // readRequestContent();
try{
content = parseRequestContent(E_REBIND).getChildren();
segment = MethodUtil.getChildText(content, E_SEGMENT);
@@ -108,15 +110,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);
@@ -125,7 +127,7 @@
if (sourceParentUh != null) {
sourceParentUri = sourceUh.getParentUriHandler().toString();
}
-
+
try {
collectionNode = structure.retrieve( slideToken, collectionUri );
}
@@ -133,7 +135,7 @@
throw e;
}
catch (SlideException e) {} // ignore silently
-
+
try {
sourceNode = structure.retrieve( slideToken, sourceUri );
}
@@ -141,7 +143,7 @@
throw e;
}
catch (SlideException e) {} // ignore silently
-
+
try {
sourceParentNode = structure.retrieve( slideToken, sourceParentUri );
}
@@ -149,7 +151,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);
@@ -178,17 +180,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)) {
@@ -202,13 +204,20 @@
sendError( statusCode, e );
throw new WebdavException( statusCode );
}
-
+
try {
if ( WebdavEvent.REBIND.isEnabled() ) EventDispatcher.getInstance().fireVetoableEvent(WebdavEvent.REBIND, new WebdavEvent(this));
-
+
checkPreconditions();
structure.addBinding( slideToken, collectionNode, segment, sourceNode );
structure.removeBinding( slideToken, sourceParentNode, sourceSegment );
+
+ // Postcondition: DAV:lock-delete
+ UriPath destUp = new UriPath(collectionUri).child(segment);
+ Enumeration locksEnum = lock.enumerateLocks(slideToken, destUp.toString(), false);
+ while (locksEnum.hasMoreElements()) {
+ lock.unlock(slideToken, (NodeLock)locksEnum.nextElement());
+ }
}
catch (CrossServerBindingException e) {
sendPreconditionViolation(
@@ -250,6 +259,6 @@
throw new WebdavException( statusCode );
}
}
-
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: slide-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: slide-dev-help@jakarta.apache.org
Re: cvs commit: jakarta-slide/src/webdav/server/org/apache/slide/webdav/method
RebindMethod.java
Posted by Stefan Lützkendorf <lu...@apache.org>.
Has this some thing to do with the fact that
BIND\functional\precondition\rebindProtected-url-deletion_2.xml
fails for me currently?
Stefan
pnever@apache.org wrote:
> pnever 2004/12/14 06:07:42
>
> Modified: src/share/org/apache/slide/macro MacroImpl.java
> src/webdav/server/org/apache/slide/webdav/method
> RebindMethod.java
> Log:
> REBIND Method: postcondition DAV:lock-deleted was not implemented.
> The Binding spec states that (non-inherited) locks are to be removed after
> rebinding a resource. If binding is enabled, Slide maps the MOVE method
> onto REBIND, so that MOVE was affected in this case too.
>
> Revision Changes Path
> 1.52 +10 -4 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.51
> retrieving revision 1.52
> diff -u -r1.51 -r1.52
> --- MacroImpl.java 7 Dec 2004 14:10:06 -0000 1.51
> +++ MacroImpl.java 14 Dec 2004 14:07:42 -0000 1.52
> @@ -393,6 +393,12 @@
>
> structureHelper.addBinding( token, destinationParentNode, destinationSegment, sourceNode );
> structureHelper.removeBinding( token, sourceParentNode, sourceSegment );
> +
> + // Postcondition: DAV:lock-delete
> + Enumeration locksEnum = lockHelper.enumerateLocks(token, destinationUri, false);
> + while (locksEnum.hasMoreElements()) {
> + lockHelper.unlock(token, (NodeLock)locksEnum.nextElement());
> + }
> }
> catch (SlideException x) {
> e.addException(x);
>
>
>
> 1.19 +33 -24 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.18
> retrieving revision 1.19
> diff -u -r1.18 -r1.19
> --- RebindMethod.java 31 Oct 2004 11:32:40 -0000 1.18
> +++ RebindMethod.java 14 Dec 2004 14:07:42 -0000 1.19
> @@ -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;
> @@ -59,8 +61,8 @@
> private ObjectNode sourceNode = null;
> private ObjectNode sourceParentNode = null;
> private ObjectNode collectionNode = null;
> -
> -
> +
> +
> /**
> * Constructor.
> *
> @@ -70,7 +72,7 @@
> public RebindMethod(NamespaceAccessToken token, WebdavServletConfig config) {
> super(token, config);
> }
> -
> +
> /**
> * @see org.apache.slide.webdav.method.FineGrainedLockingMethod#acquireFineGrainLocks()
> */
> @@ -89,10 +91,10 @@
> if (collectionUri == null) {
> collectionUri = "/";
> }
> -
> +
> List content;
> -
> -// readRequestContent();
> +
> + // readRequestContent();
> try{
> content = parseRequestContent(E_REBIND).getChildren();
> segment = MethodUtil.getChildText(content, E_SEGMENT);
> @@ -108,15 +110,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);
> @@ -125,7 +127,7 @@
> if (sourceParentUh != null) {
> sourceParentUri = sourceUh.getParentUriHandler().toString();
> }
> -
> +
> try {
> collectionNode = structure.retrieve( slideToken, collectionUri );
> }
> @@ -133,7 +135,7 @@
> throw e;
> }
> catch (SlideException e) {} // ignore silently
> -
> +
> try {
> sourceNode = structure.retrieve( slideToken, sourceUri );
> }
> @@ -141,7 +143,7 @@
> throw e;
> }
> catch (SlideException e) {} // ignore silently
> -
> +
> try {
> sourceParentNode = structure.retrieve( slideToken, sourceParentUri );
> }
> @@ -149,7 +151,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);
> @@ -178,17 +180,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)) {
> @@ -202,13 +204,20 @@
> sendError( statusCode, e );
> throw new WebdavException( statusCode );
> }
> -
> +
> try {
> if ( WebdavEvent.REBIND.isEnabled() ) EventDispatcher.getInstance().fireVetoableEvent(WebdavEvent.REBIND, new WebdavEvent(this));
> -
> +
> checkPreconditions();
> structure.addBinding( slideToken, collectionNode, segment, sourceNode );
> structure.removeBinding( slideToken, sourceParentNode, sourceSegment );
> +
> + // Postcondition: DAV:lock-delete
> + UriPath destUp = new UriPath(collectionUri).child(segment);
> + Enumeration locksEnum = lock.enumerateLocks(slideToken, destUp.toString(), false);
> + while (locksEnum.hasMoreElements()) {
> + lock.unlock(slideToken, (NodeLock)locksEnum.nextElement());
> + }
> }
> catch (CrossServerBindingException e) {
> sendPreconditionViolation(
> @@ -250,6 +259,6 @@
> throw new WebdavException( statusCode );
> }
> }
> -
> +
> }
>
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: slide-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: slide-dev-help@jakarta.apache.org
>
--
Stefan Lützkendorf -- luetzkendorf@apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: slide-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: slide-dev-help@jakarta.apache.org