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]