pnever 2004/10/18 01:52:36
Modified: src/share/org/apache/slide/macro CopyListener.java
MacroImpl.java
src/webdav/server/org/apache/slide/webdav/method
CopyMethod.java MoveMethod.java
Log:
Fixed bug revealed by testcase functional\copy\mix\copyChangedProperties.xml:
the DAV:owner property of the *copy* isn't set correctly to be the principal issuing
the COPY request. Of course, if a resource existed at the destination location and is
overwritten by the COPY operation, the owner should not change, as an existing
resource is just being updated.
Revision Changes Path
1.7 +6 -6 jakarta-slide/src/share/org/apache/slide/macro/CopyListener.java
Index: CopyListener.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/src/share/org/apache/slide/macro/CopyListener.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- CopyListener.java 28 Jul 2004 09:35:28 -0000 1.6
+++ CopyListener.java 18 Oct 2004 08:52:36 -0000 1.7
@@ -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.
@@ -63,7 +63,7 @@
* of the Macro helper (contained in the
* MacroDeleteException.
*/
- public void afterCopy(String sourceUri, String destinationUri, boolean
isRootOfCopy) throws SlideException;
+ public void afterCopy(String sourceUri, String destinationUri, boolean
isRootOfCopy, boolean destinationExists) throws SlideException;
}
1.43 +24 -24 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.42
retrieving revision 1.43
diff -u -r1.42 -r1.43
--- MacroImpl.java 17 Aug 2004 15:34:23 -0000 1.42
+++ MacroImpl.java 18 Oct 2004 08:52:36 -0000 1.43
@@ -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.
@@ -446,7 +446,7 @@
try {
if ( MacroEvent.MOVE.isEnabled() )
EventDispatcher.getInstance().fireVetoableEvent(MacroEvent.MOVE, new MacroEvent(this,
token, namespace, sourceUri, destinationUri));
} catch ( VetoException ve ) {
- throw new CopyMacroException(ve.getMessage()); // FIXME: Where is the
MoveMacroException?
+ throw new CopyMacroException(ve.getMessage()); // FIXME: Where is the
MoveMacroException?
}
}
@@ -703,20 +703,20 @@
// notify CopyListener
if (copyListener != null) {
- copyListener.afterCopy(sourceUri, destinationUri, isRootOfCopy);
+ copyListener.afterCopy(sourceUri, destinationUri, isRootOfCopy,
destinationExists);
}
// We copy each of this object's children
if (parameters.isRecursive()) {
- while(sourceNodeChildren.hasMoreElements()) {
- String childUri = (String) sourceNodeChildren.nextElement();
- String childDestinationUri = destinationUri + childUri
- .substring(sourceNode.getUri().length());
- copyObject(token, childUri, childDestinationUri,
- parameters, false, e, copyRedirector, copyListener,
- deleteRedirector, deleteListener
- );
- }
+ while(sourceNodeChildren.hasMoreElements()) {
+ String childUri = (String) sourceNodeChildren.nextElement();
+ String childDestinationUri = destinationUri + childUri
+ .substring(sourceNode.getUri().length());
+ copyObject(token, childUri, childDestinationUri,
+ parameters, false, e, copyRedirector, copyListener,
+ deleteRedirector, deleteListener
+ );
+ }
}
} catch(SlideException ex) {
@@ -776,14 +776,14 @@
}
}
- // Removing links objects
- if (currentObject.hasLinks()) {
- Enumeration links =
currentObject.enumerateLinks();
- while (links.hasMoreElements()) {
- String linkUri =
(String)links.nextElement();
- deleteObject(token, linkUri, e,
deleteRedirector, deleteListener);
- }
- }
+ // Removing links objects
+ if (currentObject.hasLinks()) {
+ Enumeration links = currentObject.enumerateLinks();
+ while (links.hasMoreElements()) {
+ String linkUri = (String)links.nextElement();
+ deleteObject(token, linkUri, e, deleteRedirector,
deleteListener);
+ }
+ }
// now let the client redirect
1.68 +16 -39
jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/CopyMethod.java
Index: CopyMethod.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/CopyMethod.java,v
retrieving revision 1.67
retrieving revision 1.68
diff -u -r1.67 -r1.68
--- CopyMethod.java 2 Aug 2004 16:36:02 -0000 1.67
+++ CopyMethod.java 18 Oct 2004 08:52:36 -0000 1.68
@@ -23,56 +23,28 @@
package org.apache.slide.webdav.method;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import org.apache.slide.content.*;
+import org.apache.slide.macro.*;
+import org.apache.slide.webdav.util.*;
+import java.io.IOException;
import org.apache.slide.common.NamespaceAccessToken;
import org.apache.slide.common.ServiceAccessException;
import org.apache.slide.common.SlideException;
-import org.apache.slide.content.BranchNotFoundException;
-import org.apache.slide.content.NodeNotVersionedException;
-import org.apache.slide.content.NodeProperty;
-import org.apache.slide.content.NodeRevisionDescriptor;
-import org.apache.slide.content.NodeRevisionDescriptors;
-import org.apache.slide.content.NodeRevisionNumber;
-import org.apache.slide.content.RevisionAlreadyExistException;
-import org.apache.slide.content.RevisionDescriptorNotFoundException;
-import org.apache.slide.content.RevisionNotFoundException;
import org.apache.slide.event.EventDispatcher;
import org.apache.slide.event.VetoException;
import org.apache.slide.lock.ObjectLockedException;
-import org.apache.slide.macro.CopyListener;
-import org.apache.slide.macro.CopyRouteRedirector;
-import org.apache.slide.macro.DeleteListener;
-import org.apache.slide.macro.Macro;
-import org.apache.slide.macro.MacroException;
-import org.apache.slide.macro.MacroParameters;
import org.apache.slide.security.AccessDeniedException;
import org.apache.slide.structure.LinkedObjectNotFoundException;
import org.apache.slide.structure.ObjectNode;
import org.apache.slide.structure.ObjectNotFoundException;
+import org.apache.slide.structure.SubjectNode;
import org.apache.slide.util.Configuration;
import org.apache.slide.util.XMLValue;
import org.apache.slide.webdav.WebdavException;
import org.apache.slide.webdav.WebdavServletConfig;
import org.apache.slide.webdav.event.WebdavEvent;
-import org.apache.slide.webdav.util.AclConstants;
-import org.apache.slide.webdav.util.BindConstants;
-import org.apache.slide.webdav.util.DeltavConstants;
-import org.apache.slide.webdav.util.LabeledRevisionNotFoundException;
-import org.apache.slide.webdav.util.PreconditionViolationException;
-import org.apache.slide.webdav.util.PropertyHelper;
-import org.apache.slide.webdav.util.UriHandler;
-import org.apache.slide.webdav.util.VersioningHelper;
-import org.apache.slide.webdav.util.ViolatedPrecondition;
-import org.apache.slide.webdav.util.WebdavStatus;
-import org.apache.slide.webdav.util.WebdavUtils;
import org.apache.slide.webdav.util.resourcekind.AbstractResourceKind;
import org.apache.slide.webdav.util.resourcekind.CheckedInVersionControlled;
import org.apache.slide.webdav.util.resourcekind.ResourceKind;
@@ -181,7 +153,7 @@
// COPY on existing WSs or WRs is *not* restricted !!!
try {
if ( WebdavEvent.COPY.isEnabled() )
EventDispatcher.getInstance().fireVetoableEvent(WebdavEvent.COPY, new
WebdavEvent(this));
-
+
content.retrieve(slideToken, destinationUri);
sendError = false;
}
@@ -541,7 +513,7 @@
* of the Macro helper (contained in the
* MacroDeleteException.
*/
- public void afterCopy(String sourceUri, String destinationUri, boolean
isRootOfCopy) throws SlideException {
+ public void afterCopy(String sourceUri, String destinationUri, boolean
isRootOfCopy, boolean destinationExists) throws SlideException {
if(Configuration.useVersionControl()) {
@@ -570,6 +542,11 @@
// set some other properties
destinationNrd.setLastModified( new Date() ); // P_GETLASTMODIFIED
destinationNrd.setETag( PropertyHelper.computeEtag(destinationUri,
destinationNrd) ); // P_GETETAG
+ if (!destinationExists) {
+ // copy is creating a new resource
+ String creator =
((SubjectNode)security.getPrincipal(slideToken)).getPath().lastSegment();
+ destinationNrd.setOwner(creator);
+ }
content.store(slideToken, destinationNrds.getUri(), destinationNrd,
null);
1.74 +5 -5
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.73
retrieving revision 1.74
diff -u -r1.73 -r1.74
--- MoveMethod.java 26 Sep 2004 14:52:32 -0000 1.73
+++ MoveMethod.java 18 Oct 2004 08:52:36 -0000 1.74
@@ -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.
@@ -411,7 +411,7 @@
* of the Macro helper (contained in the
* MacroDeleteException.
*/
- public void afterCopy(String sourceUri, String destinationUri, boolean
isRootOfCopy) throws SlideException {
+ public void afterCopy(String sourceUri, String destinationUri, boolean
isRootOfCopy, boolean destinationExists) throws SlideException {
if( Configuration.useVersionControl() ) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]