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/10/09 17:34:27 UTC
svn commit: r703185 - in /jackrabbit/trunk/jackrabbit-webdav/src:
main/java/org/apache/jackrabbit/webdav/
main/java/org/apache/jackrabbit/webdav/bind/
main/java/org/apache/jackrabbit/webdav/client/methods/
main/java/org/apache/jackrabbit/webdav/observa...
Author: reschke
Date: Thu Oct 9 08:34:26 2008
New Revision: 703185
URL: http://svn.apache.org/viewvc?rev=703185&view=rev
Log:
JCR-1795: advertise RFC 4918 compliance (compliance class 3), clean up code handling compliance classes, add support in OptionsMethod, add test case
Modified:
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavCompliance.java
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavResource.java
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/bind/BindConstants.java
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/bind/BindableResource.java
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/OptionsMethod.java
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/observation/ObservationResource.java
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/ordering/OrderingResource.java
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/search/SearchResource.java
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/security/AclResource.java
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/transaction/TransactionResource.java
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/DeltaVResource.java
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/VersionHistoryResource.java
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/VersionableResource.java
jackrabbit/trunk/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/server/BindTest.java
jackrabbit/trunk/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/server/RFC4918PropfindTest.java
Modified: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavCompliance.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavCompliance.java?rev=703185&r1=703184&r2=703185&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavCompliance.java (original)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavCompliance.java Thu Oct 9 08:34:26 2008
@@ -21,7 +21,7 @@
/**
* <code>DavCompliance</code> defines constants for the various compliance
- * classes defined RFC 2518 and it's extensions.
+ * classes defined RFC 2518, RFC 4918 and it's extensions.
*/
public final class DavCompliance {
@@ -31,6 +31,9 @@
public static final String _1_ = "1";
public static final String _2_ = "2";
+ // RFC 4918
+ public static final String _3_ = "3";
+
// RFC 3253
public static final String ACTIVITY = "activity";
public static final String BASELINE = "baseline";
@@ -48,8 +51,11 @@
public static final String ORDERED_COLLECTIONS = "ordered-collections";
// RFC 3744
- public static final String ACCESS_CONTROLL = "access-control";
+ public static final String ACCESS_CONTROL = "access-control";
+ // draft-ietf-webdav-bind
+ public static final String BIND = "bind";
+
// no RFC
public static final String OBSERVATION = "observation";
Modified: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavResource.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavResource.java?rev=703185&r1=703184&r2=703185&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavResource.java (original)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavResource.java Thu Oct 9 08:34:26 2008
@@ -38,12 +38,6 @@
public interface DavResource {
/**
- * Constant for WebDAV 1 and 2 compliance class as is represented by this
- * resource.
- */
- public static final String COMPLIANCE_CLASS = "1, 2";
-
- /**
* String constant representing the WebDAV 1 and 2 method set.
*/
public static final String METHODS = "OPTIONS, GET, HEAD, POST, TRACE, PROPFIND, PROPPATCH, MKCOL, COPY, PUT, DELETE, MOVE, LOCK, UNLOCK";
Modified: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/bind/BindConstants.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/bind/BindConstants.java?rev=703185&r1=703184&r2=703185&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/bind/BindConstants.java (original)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/bind/BindConstants.java Thu Oct 9 08:34:26 2008
@@ -44,8 +44,6 @@
public static final String METHODS = "BIND, REBIND, UNBIND";
- public static final String COMPLIANCE_CLASS = "bind";
-
/*
* Webdav properties defined by the BIND specification.
*/
Modified: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/bind/BindableResource.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/bind/BindableResource.java?rev=703185&r1=703184&r2=703185&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/bind/BindableResource.java (original)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/bind/BindableResource.java Thu Oct 9 08:34:26 2008
@@ -16,12 +16,11 @@
*/
package org.apache.jackrabbit.webdav.bind;
+import java.util.Set;
+
import org.apache.jackrabbit.webdav.DavException;
import org.apache.jackrabbit.webdav.DavResource;
-import java.util.Collection;
-import java.util.Set;
-
public interface BindableResource {
/**
Modified: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/OptionsMethod.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/OptionsMethod.java?rev=703185&r1=703184&r2=703185&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/OptionsMethod.java (original)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/OptionsMethod.java Thu Oct 9 08:34:26 2008
@@ -30,6 +30,7 @@
import java.io.IOException;
import java.util.HashSet;
+import java.util.Set;
/**
* <code>OptionsMethod</code>...
@@ -38,7 +39,8 @@
private static Logger log = LoggerFactory.getLogger(OptionsMethod.class);
- private final HashSet allowedMethods = new HashSet();
+ private final Set allowedMethods = new HashSet();
+ private final Set complianceClasses = new HashSet();
public OptionsMethod(String uri) {
super(uri);
@@ -56,8 +58,6 @@
}
/**
- *
- * @return
* @throws IOException
*/
public OptionsResponse getResponseAsOptionsResponse() throws IOException {
@@ -93,6 +93,28 @@
return (String[]) allowedMethods.toArray(new String[allowedMethods.size()]);
}
+ /**
+ * Checks if the specified compliance class is supported by the resource
+ * identified by the original URI.
+ *
+ * @param complianceClass WebDAV compliance class
+ * @return true if the given compliance class is contained in the 'DAV' response header.
+ */
+ public boolean hasComplianceClass(String complianceClass) {
+ checkUsed();
+ return complianceClasses.contains(complianceClass);
+ }
+
+
+ /**
+ * Returns an array of String listing the WebDAV compliance classes.
+ *
+ * @return all compliance classes supported by the resource specified by the original URI.
+ */
+ public String[] getComplianceClasses() {
+ checkUsed();
+ return (String[]) complianceClasses.toArray(new String[complianceClasses.size()]);
+ }
//---------------------------------------------------------< HttpMethod >---
/**
@@ -105,8 +127,9 @@
//-----------------------------------------------------< HttpMethodBase >---
/**
* <p>
- * This implementation will parse the <tt>Allow</tt> header to obtain
- * the set of methods supported by the resource identified by the Request-URI.
+ * This implementation will parse the <tt>Allow</tt> and <tt>DAV</tt> headers to obtain
+ * the set of HTTP methods and WebDAV compliance classes supported by the resource
+ * identified by the Request-URI.
* </p>
*
* @param state the {@link HttpState state} information associated with this method
@@ -122,6 +145,13 @@
allowedMethods.add(methods[i].trim().toUpperCase());
}
}
+ Header dav = getResponseHeader("DAV");
+ if (dav != null) {
+ String[] classes = dav.getValue().split(",");
+ for (int i = 0; i < classes.length; i++) {
+ complianceClasses.add(classes[i].trim());
+ }
+ }
}
//------------------------------------------------------< DavMethodBase >---
Modified: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/observation/ObservationResource.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/observation/ObservationResource.java?rev=703185&r1=703184&r2=703185&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/observation/ObservationResource.java (original)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/observation/ObservationResource.java Thu Oct 9 08:34:26 2008
@@ -25,7 +25,6 @@
*/
public interface ObservationResource extends DavResource {
- public String COMPLIANCE_CLASS = "observation";
public String METHODS = "SUBSCRIBE, UNSUBSCRIBE, POLL";
/**
Modified: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/ordering/OrderingResource.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/ordering/OrderingResource.java?rev=703185&r1=703184&r2=703185&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/ordering/OrderingResource.java (original)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/ordering/OrderingResource.java Thu Oct 9 08:34:26 2008
@@ -26,7 +26,6 @@
*/
public interface OrderingResource extends DavResource {
- public String COMPLIANCE_CLASS = "ordered-collections";
public String METHODS = "ORDERPATCH";
/**
Modified: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/search/SearchResource.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/search/SearchResource.java?rev=703185&r1=703184&r2=703185&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/search/SearchResource.java (original)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/search/SearchResource.java Thu Oct 9 08:34:26 2008
@@ -26,12 +26,6 @@
public interface SearchResource {
/**
- * No extra compliance class defined by the Webdav Search spec.
- * Instead an extra DASL header is included.
- */
- public String COMPLIANCE_CLASS = "";
-
- /**
* The 'SEARCH' method
*/
public String METHODS = "SEARCH";
Modified: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/security/AclResource.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/security/AclResource.java?rev=703185&r1=703184&r2=703185&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/security/AclResource.java (original)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/security/AclResource.java Thu Oct 9 08:34:26 2008
@@ -28,9 +28,6 @@
*/
public interface AclResource extends DavResource {
- // RFC 3744 defines one additional compliance class for the DAV header.
- public String COMPLIANCE_CLASS = "access-control";
-
/**
* The AclResource must support the ACL method and the REPORT method in order
* to retrieve various security related reports.
Modified: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/transaction/TransactionResource.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/transaction/TransactionResource.java?rev=703185&r1=703184&r2=703185&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/transaction/TransactionResource.java (original)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/transaction/TransactionResource.java Thu Oct 9 08:34:26 2008
@@ -25,7 +25,6 @@
*/
public interface TransactionResource extends DavResource {
- public static final String COMPLIANCE_CLASS = "";
public static final String METHODS = "";
/**
Modified: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/DeltaVResource.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/DeltaVResource.java?rev=703185&r1=703184&r2=703185&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/DeltaVResource.java (original)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/DeltaVResource.java Thu Oct 9 08:34:26 2008
@@ -47,8 +47,6 @@
*/
public interface DeltaVResource extends DavResource {
- public String COMPLIANCE_CLASS = "version-control, checkout-in-place, version-history, update, label, merge, workspace";
-
/**
* The generic deltaV complient resource defines one additional method REPORT.
*
Modified: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/VersionHistoryResource.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/VersionHistoryResource.java?rev=703185&r1=703184&r2=703185&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/VersionHistoryResource.java (original)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/VersionHistoryResource.java Thu Oct 9 08:34:26 2008
@@ -45,8 +45,6 @@
public interface VersionHistoryResource extends DeltaVResource {
// supported METHODS: same as DeltaVResource > set to empty string
- public static final String COMPLIANCE_CLASS = "";
- // supported METHODS: same as DeltaVResource > set to empty string
public static final String METHODS = "";
/**
Modified: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/VersionableResource.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/VersionableResource.java?rev=703185&r1=703184&r2=703185&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/VersionableResource.java (original)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/VersionableResource.java Thu Oct 9 08:34:26 2008
@@ -42,11 +42,6 @@
public interface VersionableResource extends DeltaVResource {
/**
- * No extra compliance class defined, therefore set to empty string
- */
- public static final String COMPLIANCE_CLASS = "";
-
- /**
* The versionable resource defines one additional method VERSION-CONTROL.
*
* @see DeltaVResource#METHODS
Modified: jackrabbit/trunk/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/server/BindTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/server/BindTest.java?rev=703185&r1=703184&r2=703185&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/server/BindTest.java (original)
+++ jackrabbit/trunk/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/server/BindTest.java Thu Oct 9 08:34:26 2008
@@ -22,10 +22,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
-import java.util.HashSet;
import java.util.List;
-import java.util.Set;
-import java.util.StringTokenizer;
import junit.framework.TestCase;
@@ -47,7 +44,6 @@
import org.apache.jackrabbit.webdav.bind.RebindInfo;
import org.apache.jackrabbit.webdav.bind.UnbindInfo;
import org.apache.jackrabbit.webdav.client.methods.BindMethod;
-import org.apache.jackrabbit.webdav.client.methods.DavMethod;
import org.apache.jackrabbit.webdav.client.methods.DavMethodBase;
import org.apache.jackrabbit.webdav.client.methods.DeleteMethod;
import org.apache.jackrabbit.webdav.client.methods.MkColMethod;
@@ -63,7 +59,7 @@
import org.w3c.dom.Node;
/**
- * Test cases for WebDAV BIND functionality (see <a href="http://greenbytes.de/tech/webdav/draft-ietf-webdav-bind-20.html">draft-ietf-webdav-bind-20</a>
+ * Test cases for WebDAV BIND functionality (see <a href="http://greenbytes.de/tech/webdav/draft-ietf-webdav-bind-21.html">draft-ietf-webdav-bind-21</a>
* <p>
* Required system properties:
* <ul>
@@ -104,9 +100,8 @@
OptionsMethod options = new OptionsMethod(this.uri.toASCIIString());
int status = this.client.executeMethod(options);
assertEquals(200, status);
- Set features = getDavFeatures(options);
List allow = Arrays.asList(options.getAllowedMethods());
- assertTrue("DAV header should include 'bind' feature: " + features, features.contains("bind"));
+ assertTrue("DAV header should include 'bind' feature", options.hasComplianceClass("bind"));
assertTrue("Allow header should include BIND method", allow.contains("BIND"));
assertTrue("Allow header should include REBIND method", allow.contains("REBIND"));
assertTrue("Allow header should include UNBIND method", allow.contains("UNBIND"));
@@ -647,17 +642,4 @@
}
return s;
}
-
- private Set getDavFeatures(DavMethod method) {
- Set result = new HashSet();
- Header[] features = method.getResponseHeaders("DAV");
- for (int i = 0; i < features.length; i++) {
- String val = features[i].getValue();
- StringTokenizer tok = new StringTokenizer(val, "\t ,");
- while (tok.hasMoreTokens()) {
- result.add(tok.nextToken());
- }
- }
- return result;
- }
}
Modified: jackrabbit/trunk/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/server/RFC4918PropfindTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/server/RFC4918PropfindTest.java?rev=703185&r1=703184&r2=703185&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/server/RFC4918PropfindTest.java (original)
+++ jackrabbit/trunk/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/server/RFC4918PropfindTest.java Thu Oct 9 08:34:26 2008
@@ -20,6 +20,8 @@
import java.net.URI;
import java.net.URISyntaxException;
+import junit.framework.TestCase;
+
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
@@ -30,17 +32,12 @@
import org.apache.jackrabbit.webdav.DavException;
import org.apache.jackrabbit.webdav.MultiStatus;
import org.apache.jackrabbit.webdav.MultiStatusResponse;
-import org.apache.jackrabbit.webdav.bind.BindConstants;
import org.apache.jackrabbit.webdav.client.methods.DeleteMethod;
+import org.apache.jackrabbit.webdav.client.methods.OptionsMethod;
import org.apache.jackrabbit.webdav.client.methods.PropFindMethod;
-import org.apache.jackrabbit.webdav.property.DavProperty;
-import org.apache.jackrabbit.webdav.property.DavPropertyName;
import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
import org.apache.jackrabbit.webdav.property.DavPropertySet;
import org.apache.jackrabbit.webdav.version.DeltaVConstants;
-import org.w3c.dom.Element;
-
-import junit.framework.TestCase;
/**
* Test cases for RFC 4918 PROPFIND functionality
@@ -80,6 +77,12 @@
super.tearDown();
}
+ public void testOptions() throws HttpException, IOException, DavException, URISyntaxException {
+ OptionsMethod options = new OptionsMethod(this.root);
+ this.client.executeMethod(options);
+ assertTrue(options.hasComplianceClass("3"));
+ }
+
public void testPropfindInclude() throws HttpException, IOException, DavException, URISyntaxException {
String testuri = this.root + "iftest";