You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by re...@apache.org on 2008/09/22 12:01:49 UTC
svn commit: r697767 - in /jackrabbit/trunk:
jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/
jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/
jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/
Author: reschke
Date: Mon Sep 22 03:01:48 2008
New Revision: 697767
URL: http://svn.apache.org/viewvc?rev=697767&view=rev
Log:
JCR-1733: implement support for WebDAV BIND DAV:resource-id property (for now only if the repository provides a true UUID).
Modified:
jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/DavResourceImpl.java
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavConstants.java
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/DavPropertyName.java
Modified: jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/DavResourceImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/DavResourceImpl.java?rev=697767&r1=697766&r2=697767&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/DavResourceImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/DavResourceImpl.java Mon Sep 22 03:01:48 2008
@@ -17,6 +17,7 @@
package org.apache.jackrabbit.webdav.simple;
import org.apache.jackrabbit.JcrConstants;
+import org.apache.jackrabbit.uuid.UUID;
import org.apache.jackrabbit.server.io.AbstractExportContext;
import org.apache.jackrabbit.server.io.DefaultIOListener;
import org.apache.jackrabbit.server.io.ExportContext;
@@ -96,6 +97,7 @@
protected DavPropertySet properties = new DavPropertySet();
protected boolean propsInitialized = false;
private boolean isCollection = true;
+ private String rfc4122Uri;
private ResourceConfig config;
private long modificationTime = IOUtil.UNDEFINED_TIME;
@@ -123,6 +125,7 @@
node = (Node) item;
// define what is a collection in webdav
isCollection = config.isCollectionResource(node);
+ this.initRfc4122Uri();
}
} catch (PathNotFoundException e) {
// ignore: exists field evaluates to false
@@ -178,6 +181,7 @@
this.node = node;
// define what is a collection in webdav
isCollection = config.isCollectionResource(node);
+ this.initRfc4122Uri();
}
} else {
throw new DavException(DavServletResponse.SC_NOT_FOUND);
@@ -185,6 +189,27 @@
}
/**
+ * If the Node associated with this DavResource has a UUID that allows for the creation of a rfc4122 compliant
+ * URI, we use it as the value of the protected DAV property DAV:resource-id, which is defined by the BIND
+ * specification.
+ */
+ private void initRfc4122Uri() {
+ try {
+ if (node.isNodeType("mix:referenceable")) {
+ String uuid = node.getUUID();
+ try {
+ UUID.fromString(uuid);
+ this.rfc4122Uri = "urn:uuid:" + uuid;
+ } catch (IllegalArgumentException e) {
+ //no, this is not a UUID
+ }
+ }
+ } catch (RepositoryException e) {
+ log.warn("Error while detecting UUID", e);
+ }
+ }
+
+ /**
* @return DavResource#COMPLIANCE_CLASS
* @see org.apache.jackrabbit.webdav.DavResource#getComplianceClass()
*/
@@ -342,6 +367,10 @@
properties.add(new DefaultDavProperty(DavPropertyName.ISCOLLECTION, "0"));
}
+ if (rfc4122Uri != null) {
+ properties.add(new DefaultDavProperty(DavPropertyName.RESOURCEID, rfc4122Uri, true));
+ }
+
/* set current lock information. If no lock is set to this resource,
an empty lockdiscovery will be returned in the response. */
properties.add(new LockDiscovery(getLock(Type.WRITE, Scope.EXCLUSIVE)));
Modified: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavConstants.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavConstants.java?rev=697767&r1=697766&r2=697767&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavConstants.java (original)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavConstants.java Mon Sep 22 03:01:48 2008
@@ -122,6 +122,11 @@
public static final String PROPERTY_SOURCE = "source";
public static final String PROPERTY_SUPPORTEDLOCK = "supportedlock";
+ /*
+ * Webdav property names as defined by the BIND specification.
+ */
+ public static final String PROPERTY_RESOURCEID = "resource-id";
+
//-------------------------------------------------< PropFind Constants >---
public static final int PROPFIND_BY_PROPERTY = 0;
public static final int PROPFIND_ALL_PROP = 1;
Modified: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/DavPropertyName.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/DavPropertyName.java?rev=697767&r1=697766&r2=697767&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/DavPropertyName.java (original)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/DavPropertyName.java Mon Sep 22 03:01:48 2008
@@ -49,6 +49,9 @@
public static final DavPropertyName SOURCE = DavPropertyName.create(PROPERTY_SOURCE);
public static final DavPropertyName SUPPORTEDLOCK = DavPropertyName.create(PROPERTY_SUPPORTEDLOCK);
+ /* webdav properties defined by the BIND specification */
+ public static final DavPropertyName RESOURCEID = DavPropertyName.create(PROPERTY_RESOURCEID);
+
/* property use by microsoft that are not specified in the RFC 2518 */
public static final DavPropertyName ISCOLLECTION = DavPropertyName.create("iscollection");