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 2016/12/12 15:57:23 UTC
svn commit: r1773809 [1/3] - in /jackrabbit/trunk/jackrabbit-webdav: ./
src/main/java/org/apache/jackrabbit/webdav/client/methods/
src/main/java/org/apache/jackrabbit/webdav/header/
src/main/java/org/apache/jackrabbit/webdav/util/ src/test/java/org/apa...
Author: reschke
Date: Mon Dec 12 15:57:22 2016
New Revision: 1773809
URL: http://svn.apache.org/viewvc?rev=1773809&view=rev
Log:
JCR-4065: add WebDAV API based on HttpClient4
Added:
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/BaseDavRequest.java (with props)
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpBind.java (with props)
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpCheckin.java (with props)
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpCheckout.java (with props)
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpCopy.java (with props)
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpDelete.java (with props)
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpLabel.java (with props)
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpLock.java (with props)
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpMerge.java (with props)
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpMkcol.java (with props)
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpMkworkspace.java (with props)
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpMove.java (with props)
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpOptions.java (with props)
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpOrderpatch.java (with props)
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpPoll.java (with props)
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpPropfind.java (with props)
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpProppatch.java (with props)
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpRebind.java (with props)
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpReport.java (with props)
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpSearch.java (with props)
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpSubscribe.java (with props)
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpUnbind.java (with props)
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpUnlock.java (with props)
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpUnsubscribe.java (with props)
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpUpdate.java (with props)
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpVersionControl.java (with props)
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/XmlEntity.java (with props)
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/FieldValueParser.java (with props)
jackrabbit/trunk/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/header/
jackrabbit/trunk/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/header/FieldValueParserTest.java (with props)
jackrabbit/trunk/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/server/WebDAVTest.java (with props)
Modified:
jackrabbit/trunk/jackrabbit-webdav/pom.xml
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/package-info.java
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/package-info.java
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/util/LinkHeaderFieldParser.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/RFC4918DestinationHeaderTest.java
jackrabbit/trunk/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/server/RFC4918IfHeaderTest.java
jackrabbit/trunk/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/server/RFC4918PropfindTest.java
jackrabbit/trunk/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/util/LinkHeaderFieldParserTest.java
Modified: jackrabbit/trunk/jackrabbit-webdav/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/pom.xml?rev=1773809&r1=1773808&r2=1773809&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/pom.xml (original)
+++ jackrabbit/trunk/jackrabbit-webdav/pom.xml Mon Dec 12 15:57:22 2016
@@ -101,6 +101,16 @@
<scope>provided</scope>
</dependency>
<dependency>
+ <groupId>commons-codec</groupId>
+ <artifactId>commons-codec</artifactId>
+ <version>1.10</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpclient</artifactId>
+ <version>4.5.2</version>
+ </dependency>
+ <dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
Added: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/BaseDavRequest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/BaseDavRequest.java?rev=1773809&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/BaseDavRequest.java (added)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/BaseDavRequest.java Mon Dec 12 15:57:22 2016
@@ -0,0 +1,219 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.webdav.client.methods;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.StatusLine;
+import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
+import org.apache.jackrabbit.webdav.DavConstants;
+import org.apache.jackrabbit.webdav.DavException;
+import org.apache.jackrabbit.webdav.MultiStatus;
+import org.apache.jackrabbit.webdav.lock.LockDiscovery;
+import org.apache.jackrabbit.webdav.observation.EventDiscovery;
+import org.apache.jackrabbit.webdav.observation.ObservationConstants;
+import org.apache.jackrabbit.webdav.observation.Subscription;
+import org.apache.jackrabbit.webdav.observation.SubscriptionDiscovery;
+import org.apache.jackrabbit.webdav.xml.DomUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.xml.sax.SAXException;
+
+/**
+ * Base class for HTTP request classes defined in this package.
+ */
+public abstract class BaseDavRequest extends HttpEntityEnclosingRequestBase {
+
+ private static Logger log = LoggerFactory.getLogger(BaseDavRequest.class);
+
+ public BaseDavRequest(URI uri) {
+ super();
+ super.setURI(uri);
+ }
+
+ /**
+ * Gets a {@link Document} representing the response body.
+ * @return document or {@code null} for null entity
+ * @throws IOException in case of I/O or XMP pasting problems
+ */
+ public Document getResponseBodyAsDocument(HttpEntity entity) throws IOException {
+
+ if (entity == null) {
+ return null;
+ } else {
+ // read response and try to build a xml document
+ InputStream in = entity.getContent();
+ try {
+ return DomUtil.parseDocument(in);
+ } catch (ParserConfigurationException ex) {
+ throw new IOException("XML parser configuration error", ex);
+ } catch (SAXException ex) {
+ throw new IOException("XML parsing error", ex);
+ } finally {
+ in.close();
+ }
+ }
+ }
+
+ /**
+ * Return response body as {@link MultiStatus} object.
+ * @throws IllegalStateException when response does not represent a {@link MultiStatus}
+ * @throws DavException for failures in obtaining/parsing the response body
+ */
+ public MultiStatus getResponseBodyAsMultiStatus(HttpResponse response) throws DavException {
+ try {
+ Document doc = getResponseBodyAsDocument(response.getEntity());
+ if (doc == null) {
+ throw new DavException(response.getStatusLine().getStatusCode(), "no response body");
+ }
+ return MultiStatus.createFromXml(doc.getDocumentElement());
+ } catch (IOException ex) {
+ throw new DavException(response.getStatusLine().getStatusCode(), ex);
+ }
+ }
+
+ /**
+ * Return response body as {@link LockDiscovery} object.
+ * @throws IllegalStateException when response does not represent a {@link LockDiscovery}
+ * @throws DavException for failures in obtaining/parsing the response body
+ */
+ public LockDiscovery getResponseBodyAsLockDiscovery(HttpResponse response) throws DavException {
+ try {
+ Document doc = getResponseBodyAsDocument(response.getEntity());
+ if (doc == null) {
+ throw new DavException(response.getStatusLine().getStatusCode(), "no response body");
+ }
+ Element root = doc.getDocumentElement();
+
+ if (!DomUtil.matches(root, DavConstants.XML_PROP, DavConstants.NAMESPACE)
+ && DomUtil.hasChildElement(root, DavConstants.PROPERTY_LOCKDISCOVERY, DavConstants.NAMESPACE)) {
+ throw new DavException(response.getStatusLine().getStatusCode(),
+ "Missing DAV:prop response body in LOCK response.");
+ }
+
+ Element lde = DomUtil.getChildElement(root, DavConstants.PROPERTY_LOCKDISCOVERY, DavConstants.NAMESPACE);
+ if (!DomUtil.hasChildElement(lde, DavConstants.XML_ACTIVELOCK, DavConstants.NAMESPACE)) {
+ throw new DavException(response.getStatusLine().getStatusCode(),
+ "The DAV:lockdiscovery must contain a least a single DAV:activelock in response to a successful LOCK request.");
+ }
+
+ return LockDiscovery.createFromXml(lde);
+ } catch (IOException ex) {
+ throw new DavException(response.getStatusLine().getStatusCode(), ex);
+ }
+ }
+
+ /**
+ * Return response body as {@link SubscriptionDiscovery} object.
+ * @throws IllegalStateException when response does not represent a {@link SubscriptionDiscovery}
+ * @throws DavException for failures in obtaining/parsing the response body
+ */
+ public SubscriptionDiscovery getResponseBodyAsSubscriptionDiscovery(HttpResponse response) throws DavException {
+ try {
+ Document doc = getResponseBodyAsDocument(response.getEntity());
+ if (doc == null) {
+ throw new DavException(response.getStatusLine().getStatusCode(), "no response body");
+ }
+ Element root = doc.getDocumentElement();
+
+ if (!DomUtil.matches(root, DavConstants.XML_PROP, DavConstants.NAMESPACE)
+ && DomUtil.hasChildElement(root, ObservationConstants.SUBSCRIPTIONDISCOVERY.getName(),
+ ObservationConstants.SUBSCRIPTIONDISCOVERY.getNamespace())) {
+ throw new DavException(response.getStatusLine().getStatusCode(),
+ "Missing DAV:prop response body in SUBSCRIBE response.");
+ }
+
+ Element sde = DomUtil.getChildElement(root, ObservationConstants.SUBSCRIPTIONDISCOVERY.getName(),
+ ObservationConstants.SUBSCRIPTIONDISCOVERY.getNamespace());
+ SubscriptionDiscovery sd = SubscriptionDiscovery.createFromXml(sde);
+ if (((Subscription[]) sd.getValue()).length > 0) {
+ return sd;
+ } else {
+ throw new DavException(response.getStatusLine().getStatusCode(),
+ "Missing 'subscription' elements in SUBSCRIBE response body. At least a single subscription must be present if SUBSCRIBE was successful.");
+ }
+ } catch (IOException ex) {
+ throw new DavException(response.getStatusLine().getStatusCode(), ex);
+ }
+ }
+
+ /**
+ * Return response body as {@link EventDiscovery} object.
+ * @throws IllegalStateException when response does not represent a {@link EventDiscovery}
+ * @throws DavException for failures in obtaining/parsing the response body
+ */
+ public EventDiscovery getResponseBodyAsEventDiscovery(HttpResponse response) throws DavException {
+ try {
+ Document doc = getResponseBodyAsDocument(response.getEntity());
+ if (doc == null) {
+ throw new DavException(response.getStatusLine().getStatusCode(), "no response body");
+ }
+ return EventDiscovery.createFromXml(doc.getDocumentElement());
+ } catch (IOException ex) {
+ throw new DavException(response.getStatusLine().getStatusCode(), ex);
+ }
+ }
+
+ /**
+ * Check the response and throw when it is considered to represent a failure.
+ */
+ public void checkSuccess(HttpResponse response) throws DavException {
+ if (!succeeded(response)) {
+ throw getResponseException(response);
+ }
+ }
+
+ /**
+ * Obtain a {@link DavException} representing the response.
+ * @throws IllegalStateException when the response is considered to be successful
+ */
+ public DavException getResponseException(HttpResponse response) {
+ if (succeeded(response)) {
+ String msg = "Cannot retrieve exception from successful response.";
+ log.warn(msg);
+ throw new IllegalStateException(msg);
+ }
+
+ StatusLine st = response.getStatusLine();
+ Element responseRoot = null;
+ try {
+ responseRoot = getResponseBodyAsDocument(response.getEntity()).getDocumentElement();
+ } catch (IOException e) {
+ // non-parseable body -> use null element
+ }
+
+ return new DavException(st.getStatusCode(), st.getReasonPhrase(), null, responseRoot);
+ }
+
+ /**
+ * Check the provided {@link HttpResponse} for successful execution. The default implementation treats all
+ * 2xx status codes (<a href="http://webdav.org/specs/rfc7231.html#rfc.section.6.3">RFC 7231, Section 6.3</a>).
+ * Implementations can further restrict the accepted range of responses (or even check the response body).
+ */
+ public boolean succeeded(HttpResponse response) {
+ int status = response.getStatusLine().getStatusCode();
+ return status >= 200 && status <= 299;
+ }
+}
Propchange: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/BaseDavRequest.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpBind.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpBind.java?rev=1773809&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpBind.java (added)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpBind.java Mon Dec 12 15:57:22 2016
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.webdav.client.methods;
+
+import java.io.IOException;
+import java.net.URI;
+
+import org.apache.http.HttpResponse;
+import org.apache.jackrabbit.webdav.DavMethods;
+import org.apache.jackrabbit.webdav.DavServletResponse;
+import org.apache.jackrabbit.webdav.bind.BindInfo;
+
+/**
+ * Represents an HTTP BIND request.
+ *
+ * @see <a href="http://webdav.org/specs/rfc5842.html#rfc.section.4">RFC 5842, Section 4</a>
+ * @since 2.13.6
+ */
+public class HttpBind extends BaseDavRequest {
+
+ public HttpBind(URI uri, BindInfo info) throws IOException {
+ super(uri);
+ super.setEntity(XmlEntity.create(info));
+ }
+
+ public HttpBind(String uri, BindInfo info) throws IOException {
+ this(URI.create(uri), info);
+ }
+
+ @Override
+ public String getMethod() {
+ return DavMethods.METHOD_BIND;
+ }
+
+ @Override
+ public boolean succeeded(HttpResponse response) {
+ int statusCode = response.getStatusLine().getStatusCode();
+ return statusCode == DavServletResponse.SC_OK || statusCode == DavServletResponse.SC_CREATED;
+ }
+}
\ No newline at end of file
Propchange: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpBind.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpCheckin.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpCheckin.java?rev=1773809&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpCheckin.java (added)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpCheckin.java Mon Dec 12 15:57:22 2016
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.webdav.client.methods;
+
+import java.net.URI;
+
+import org.apache.http.HttpResponse;
+import org.apache.jackrabbit.webdav.DavMethods;
+import org.apache.jackrabbit.webdav.DavServletResponse;
+
+/**
+ * Represents an HTTP CHECKIN request.
+ *
+ * @see <a href="http://webdav.org/specs/rfc3253.html#rfc.section.4.4">RFC 3253, Section 4.4</a>
+ * @since 2.13.6
+ */
+public class HttpCheckin extends BaseDavRequest {
+
+ public HttpCheckin(URI uri) {
+ super(uri);
+ }
+
+ public HttpCheckin(String uri) {
+ this(URI.create(uri));
+ }
+
+ @Override
+ public String getMethod() {
+ return DavMethods.METHOD_CHECKIN;
+ }
+
+ @Override
+ public boolean succeeded(HttpResponse response) {
+ int statusCode = response.getStatusLine().getStatusCode();
+ return statusCode == DavServletResponse.SC_CREATED;
+ }
+}
Propchange: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpCheckin.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpCheckout.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpCheckout.java?rev=1773809&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpCheckout.java (added)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpCheckout.java Mon Dec 12 15:57:22 2016
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.webdav.client.methods;
+
+import java.net.URI;
+
+import org.apache.http.HttpResponse;
+import org.apache.jackrabbit.webdav.DavMethods;
+import org.apache.jackrabbit.webdav.DavServletResponse;
+
+/**
+ * Represents an HTTP CHECKOUT request.
+ *
+ * @see <a href="http://webdav.org/specs/rfc3253.html#rfc.section.4.3">RFC 3253, Section 4.3</a>
+ * @since 2.13.6
+ */
+public class HttpCheckout extends BaseDavRequest {
+
+ public HttpCheckout(URI uri) {
+ super(uri);
+ }
+
+ public HttpCheckout(String uri) {
+ this(URI.create(uri));
+ }
+
+ @Override
+ public String getMethod() {
+ return DavMethods.METHOD_CHECKOUT;
+ }
+
+ @Override
+ public boolean succeeded(HttpResponse response) {
+ int statusCode = response.getStatusLine().getStatusCode();
+ return statusCode == DavServletResponse.SC_OK;
+ }
+}
Propchange: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpCheckout.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpCopy.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpCopy.java?rev=1773809&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpCopy.java (added)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpCopy.java Mon Dec 12 15:57:22 2016
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.webdav.client.methods;
+
+import java.net.URI;
+
+import org.apache.http.HttpResponse;
+import org.apache.jackrabbit.webdav.DavConstants;
+import org.apache.jackrabbit.webdav.DavMethods;
+import org.apache.jackrabbit.webdav.DavServletResponse;
+
+/**
+ * Represents an HTTP COPY request.
+ *
+ * @see <a href="http://webdav.org/specs/rfc4918.html#rfc.section.9.8">RFC 4918, Section 9.8</a>
+ * @since 2.13.6
+ */
+public class HttpCopy extends BaseDavRequest {
+
+ public HttpCopy(URI uri, URI dest, boolean overwrite, boolean shallow) {
+ super(uri);
+ super.setHeader(DavConstants.HEADER_DESTINATION, dest.toASCIIString());
+ if (!overwrite) {
+ super.setHeader(DavConstants.HEADER_OVERWRITE, "F");
+ }
+ if (shallow) {
+ super.setHeader("Depth", "0");
+ }
+ }
+
+ public HttpCopy(String uri, String dest, boolean overwrite, boolean shallow) {
+ this(URI.create(uri), URI.create(dest), overwrite, shallow);
+ }
+
+ @Override
+ public String getMethod() {
+ return DavMethods.METHOD_COPY;
+ }
+
+ @Override
+ public boolean succeeded(HttpResponse response) {
+ int statusCode = response.getStatusLine().getStatusCode();
+ return statusCode == DavServletResponse.SC_CREATED || statusCode == DavServletResponse.SC_NO_CONTENT;
+ }
+}
Propchange: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpCopy.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpDelete.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpDelete.java?rev=1773809&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpDelete.java (added)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpDelete.java Mon Dec 12 15:57:22 2016
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.webdav.client.methods;
+
+import java.net.URI;
+
+import org.apache.jackrabbit.webdav.DavMethods;
+
+/**
+ * Represents an HTTP DELETE request.
+ *
+ * @see <a href="http://webdav.org/specs/rfc7231.html#rfc.section.4.3.5">RFC 7231, Section 4.3.5</a>
+ * @since 2.13.6
+ */
+public class HttpDelete extends BaseDavRequest {
+
+ public HttpDelete(URI uri){
+ super(uri);
+ }
+
+ public HttpDelete(String uri) {
+ this(URI.create(uri));
+ }
+
+ @Override
+ public String getMethod() {
+ return DavMethods.METHOD_DELETE;
+ }
+}
\ No newline at end of file
Propchange: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpDelete.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpLabel.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpLabel.java?rev=1773809&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpLabel.java (added)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpLabel.java Mon Dec 12 15:57:22 2016
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.webdav.client.methods;
+
+import java.io.IOException;
+import java.net.URI;
+
+import org.apache.http.HttpResponse;
+import org.apache.jackrabbit.webdav.DavMethods;
+import org.apache.jackrabbit.webdav.DavServletResponse;
+import org.apache.jackrabbit.webdav.header.DepthHeader;
+import org.apache.jackrabbit.webdav.version.LabelInfo;
+
+/**
+ * Represents an HTTP LABEL request.
+ *
+ * @see <a href="http://webdav.org/specs/rfc3253.html#rfc.section.8.2">RFC 3253, Section 8.2</a>
+ * @since 2.13.6
+ */
+public class HttpLabel extends BaseDavRequest {
+
+ public HttpLabel(URI uri, LabelInfo labelInfo) throws IOException {
+ super(uri);
+ DepthHeader dh = new DepthHeader(labelInfo.getDepth());
+ super.setHeader(dh.getHeaderName(), dh.getHeaderValue());
+ super.setEntity(XmlEntity.create(labelInfo));
+ }
+
+ public HttpLabel(String uri, LabelInfo labelInfo) throws IOException {
+ this(URI.create(uri), labelInfo);
+ }
+
+ @Override
+ public String getMethod() {
+ return DavMethods.METHOD_LABEL;
+ }
+
+ @Override
+ public boolean succeeded(HttpResponse response) {
+ int statusCode = response.getStatusLine().getStatusCode();
+ return statusCode == DavServletResponse.SC_OK;
+ }
+}
Propchange: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpLabel.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpLock.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpLock.java?rev=1773809&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpLock.java (added)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpLock.java Mon Dec 12 15:57:22 2016
@@ -0,0 +1,107 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.webdav.client.methods;
+
+import java.io.IOException;
+import java.net.URI;
+import java.util.Arrays;
+
+import org.apache.http.Header;
+import org.apache.http.HttpResponse;
+import org.apache.jackrabbit.webdav.DavConstants;
+import org.apache.jackrabbit.webdav.DavMethods;
+import org.apache.jackrabbit.webdav.DavServletResponse;
+import org.apache.jackrabbit.webdav.header.DepthHeader;
+import org.apache.jackrabbit.webdav.header.IfHeader;
+import org.apache.jackrabbit.webdav.header.TimeoutHeader;
+import org.apache.jackrabbit.webdav.lock.LockInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Represents an HTTP LOCK request.
+ *
+ * @see <a href="http://webdav.org/specs/rfc4918.html#rfc.section.9.10">RFC 4918, Section 9.10</a>
+ * @since 2.13.6
+ */
+public class HttpLock extends BaseDavRequest {
+
+ private static final Logger LOG = LoggerFactory.getLogger(HttpLock.class);
+
+ private final boolean isRefresh;
+
+ public HttpLock(URI uri, LockInfo lockInfo) throws IOException {
+ super(uri);
+
+ TimeoutHeader th = new TimeoutHeader(lockInfo.getTimeout());
+ super.setHeader(th.getHeaderName(), th.getHeaderValue());
+ DepthHeader dh = new DepthHeader(lockInfo.isDeep());
+ super.setHeader(dh.getHeaderName(), dh.getHeaderValue());
+
+ super.setEntity(XmlEntity.create(lockInfo));
+
+ isRefresh = false;
+ }
+
+ public HttpLock(String uri, LockInfo lockInfo) throws IOException {
+ this(URI.create(uri), lockInfo);
+ }
+
+ public HttpLock(URI uri, long timeout, String[] lockTokens) {
+ super(uri);
+
+ TimeoutHeader th = new TimeoutHeader(timeout);
+ super.setHeader(th.getHeaderName(), th.getHeaderValue());
+ IfHeader ifh = new IfHeader(lockTokens);
+ super.setHeader(ifh.getHeaderName(), ifh.getHeaderValue());
+ isRefresh = true;
+ }
+
+ public HttpLock(String uri, long timeout, String[] lockTokens) {
+ this(URI.create(uri), timeout, lockTokens);
+ }
+
+ @Override
+ public String getMethod() {
+ return DavMethods.METHOD_LOCK;
+ }
+
+ public String getLockToken(HttpResponse response) {
+ Header[] ltHeader = response.getHeaders(DavConstants.HEADER_LOCK_TOKEN);
+ if (ltHeader == null || ltHeader.length == 0) {
+ return null;
+ } else if (ltHeader.length != 1) {
+ LOG.debug("Multiple 'Lock-Token' header fields in response for " + getURI() + ": " + Arrays.asList(ltHeader));
+ return null;
+ } else {
+ String v = ltHeader[0].getValue().trim();
+ if (!v.startsWith("<") || !v.endsWith(">")) {
+ LOG.debug("Invalid 'Lock-Token' header field in response for " + getURI() + ": " + Arrays.asList(ltHeader));
+ return null;
+ } else {
+ return v.substring(1, v.length() - 1);
+ }
+ }
+ }
+
+ @Override
+ public boolean succeeded(HttpResponse response) {
+ int statusCode = response.getStatusLine().getStatusCode();
+ boolean lockTokenHeaderOk = isRefresh || null != getLockToken(response);
+ return lockTokenHeaderOk && (statusCode == DavServletResponse.SC_OK || statusCode == DavServletResponse.SC_CREATED);
+ }
+}
\ No newline at end of file
Propchange: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpLock.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpMerge.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpMerge.java?rev=1773809&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpMerge.java (added)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpMerge.java Mon Dec 12 15:57:22 2016
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.webdav.client.methods;
+
+import java.io.IOException;
+import java.net.URI;
+
+import org.apache.http.HttpResponse;
+import org.apache.jackrabbit.webdav.DavMethods;
+import org.apache.jackrabbit.webdav.DavServletResponse;
+import org.apache.jackrabbit.webdav.version.MergeInfo;
+
+/**
+ * Represents an HTTP MERGE request.
+ *
+ * @see <a href="http://webdav.org/specs/rfc3253.html#rfc.section.11.2">RFC 3253, Section 11.2</a>
+ * @since 2.13.6
+ */
+public class HttpMerge extends BaseDavRequest {
+
+ public HttpMerge(URI uri, MergeInfo mergeInfo) throws IOException {
+ super(uri);
+ super.setEntity(XmlEntity.create(mergeInfo));
+ }
+
+ public HttpMerge(String uri, MergeInfo mergeInfo) throws IOException {
+ this(URI.create(uri), mergeInfo);
+ }
+
+ @Override
+ public String getMethod() {
+ return DavMethods.METHOD_MERGE;
+ }
+
+ @Override
+ public boolean succeeded(HttpResponse response) {
+ int statusCode = response.getStatusLine().getStatusCode();
+ // TODO: is this correct?
+ return statusCode == DavServletResponse.SC_MULTI_STATUS;
+ }
+}
Propchange: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpMerge.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpMkcol.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpMkcol.java?rev=1773809&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpMkcol.java (added)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpMkcol.java Mon Dec 12 15:57:22 2016
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.webdav.client.methods;
+
+import java.net.URI;
+
+import org.apache.http.HttpResponse;
+import org.apache.jackrabbit.webdav.DavMethods;
+import org.apache.jackrabbit.webdav.DavServletResponse;
+
+/**
+ * Represents an HTTP MKCOL request.
+ *
+ * @see <a href="http://webdav.org/specs/rfc4918.html#rfc.section.9.3">RFC 4918, Section 9.3</a>
+ * @since 2.13.6
+ */
+public class HttpMkcol extends BaseDavRequest {
+
+ public HttpMkcol(URI uri) {
+ super(uri);
+ }
+
+ public HttpMkcol(String uri) {
+ this(URI.create(uri));
+ }
+
+ @Override
+ public String getMethod() {
+ return DavMethods.METHOD_MKCOL;
+ }
+
+ @Override
+ public boolean succeeded(HttpResponse response) {
+ int statusCode = response.getStatusLine().getStatusCode();
+ return statusCode == DavServletResponse.SC_CREATED;
+ }
+}
Propchange: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpMkcol.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpMkworkspace.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpMkworkspace.java?rev=1773809&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpMkworkspace.java (added)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpMkworkspace.java Mon Dec 12 15:57:22 2016
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.webdav.client.methods;
+
+import java.net.URI;
+
+import org.apache.http.HttpResponse;
+import org.apache.jackrabbit.webdav.DavMethods;
+import org.apache.jackrabbit.webdav.DavServletResponse;
+
+/**
+ * Represents an HTTP MKWORKSPACE request.
+ *
+ * @see <a href="http://webdav.org/specs/rfc3253.html#rfc.section.6.3">RFC 3253, Section 6.3</a>
+ * @since 2.13.6
+ */
+public class HttpMkworkspace extends BaseDavRequest {
+
+ public HttpMkworkspace(URI uri) {
+ super(uri);
+ }
+
+ public HttpMkworkspace(String uri) {
+ this(URI.create(uri));
+ }
+
+ @Override
+ public String getMethod() {
+ return DavMethods.METHOD_MKWORKSPACE;
+ }
+
+ @Override
+ public boolean succeeded(HttpResponse response) {
+ int statusCode = response.getStatusLine().getStatusCode();
+ return statusCode == DavServletResponse.SC_CREATED;
+ }
+}
Propchange: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpMkworkspace.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpMove.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpMove.java?rev=1773809&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpMove.java (added)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpMove.java Mon Dec 12 15:57:22 2016
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.webdav.client.methods;
+
+import java.net.URI;
+
+import org.apache.http.HttpResponse;
+import org.apache.jackrabbit.webdav.DavConstants;
+import org.apache.jackrabbit.webdav.DavMethods;
+import org.apache.jackrabbit.webdav.DavServletResponse;
+
+/**
+ * Represents an HTTP MOVE request.
+ *
+ * @see <a href="http://webdav.org/specs/rfc4918.html#rfc.section.9.9">RFC 4918, Section 9.9</a>
+ * @since 2.13.6
+ */
+public class HttpMove extends BaseDavRequest {
+
+ public HttpMove(URI uri, URI dest, boolean overwrite) {
+ super(uri);
+ super.setHeader(DavConstants.HEADER_DESTINATION, dest.toASCIIString());
+ if (!overwrite) {
+ super.setHeader(DavConstants.HEADER_OVERWRITE, "F");
+ }
+ }
+
+ public HttpMove(String uri, String dest, boolean overwrite) {
+ this(URI.create(uri), URI.create(dest), overwrite);
+ }
+
+ @Override
+ public String getMethod() {
+ return DavMethods.METHOD_MOVE;
+ }
+
+ @Override
+ public boolean succeeded(HttpResponse response) {
+ int statusCode = response.getStatusLine().getStatusCode();
+ return statusCode == DavServletResponse.SC_CREATED || statusCode == DavServletResponse.SC_NO_CONTENT;
+ }
+}
Propchange: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpMove.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpOptions.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpOptions.java?rev=1773809&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpOptions.java (added)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpOptions.java Mon Dec 12 15:57:22 2016
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.webdav.client.methods;
+
+import java.net.URI;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.http.Header;
+import org.apache.http.HttpResponse;
+import org.apache.jackrabbit.webdav.DavConstants;
+import org.apache.jackrabbit.webdav.header.FieldValueParser;
+import org.apache.jackrabbit.webdav.search.SearchConstants;
+
+/**
+ * Represents an HTTP OPTIONS request.
+ *
+ * @see <a href="http://webdav.org/specs/rfc7231.html#rfc.section.4.3.7">RFC 7231, Section 4.3.7</a>
+ * @since 2.13.6
+ */
+public class HttpOptions extends org.apache.http.client.methods.HttpOptions {
+
+ public HttpOptions(URI uri) {
+ super(uri);
+ }
+
+ public HttpOptions(String uri) {
+ super(URI.create(uri));
+ }
+
+ /**
+ * Compute the set of compliance classes returned in the "dav" header field
+ */
+ public Set<String> getDavComplianceClasses(HttpResponse response) {
+ Header[] headers = response.getHeaders(DavConstants.HEADER_DAV);
+ return parseTokenOrCodedUrlheaderField(headers, false);
+ }
+
+ /**
+ * Compute set of search grammars returned in the "dasl" header field
+ */
+ public Set<String> getSearchGrammars(HttpResponse response) {
+ Header[] headers = response.getHeaders(SearchConstants.HEADER_DASL);
+ return parseTokenOrCodedUrlheaderField(headers, true);
+ }
+
+ private Set<String> parseTokenOrCodedUrlheaderField(Header[] headers, boolean removeBrackets) {
+ if (headers == null) {
+ return Collections.emptySet();
+ }
+ else {
+ Set<String> result = new HashSet<String>();
+ for (Header h : headers) {
+ for (String s : FieldValueParser.tokenizeList(h.getValue())) {
+ if (removeBrackets && s.startsWith("<") && s.endsWith(">")) {
+ s = s.substring(1, s.length() - 1);
+ }
+ result.add(s.trim());
+ }
+ }
+ return Collections.unmodifiableSet(result);
+ }
+ }
+}
Propchange: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpOptions.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpOrderpatch.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpOrderpatch.java?rev=1773809&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpOrderpatch.java (added)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpOrderpatch.java Mon Dec 12 15:57:22 2016
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.webdav.client.methods;
+
+import java.io.IOException;
+import java.net.URI;
+
+import org.apache.http.HttpResponse;
+import org.apache.jackrabbit.webdav.DavMethods;
+import org.apache.jackrabbit.webdav.DavServletResponse;
+import org.apache.jackrabbit.webdav.ordering.OrderPatch;
+
+/**
+ * Represents an HTTP ORDERPATCH request.
+ *
+ * @see <a href="http://webdav.org/specs/rfc3648.html#rfc.section.5">RFC 3648, Section 5</a>
+ * @since 2.13.6
+ */
+public class HttpOrderpatch extends BaseDavRequest {
+
+ public HttpOrderpatch(URI uri, OrderPatch info) throws IOException {
+ super(uri);
+ super.setEntity(XmlEntity.create(info));
+ }
+
+ public HttpOrderpatch(String uri, OrderPatch info) throws IOException {
+ this(URI.create(uri), info);
+ }
+
+ @Override
+ public String getMethod() {
+ return DavMethods.METHOD_ORDERPATCH;
+ }
+
+ @Override
+ public boolean succeeded(HttpResponse response) {
+ return response.getStatusLine().getStatusCode() == DavServletResponse.SC_OK;
+ }
+}
\ No newline at end of file
Propchange: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpOrderpatch.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpPoll.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpPoll.java?rev=1773809&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpPoll.java (added)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpPoll.java Mon Dec 12 15:57:22 2016
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.webdav.client.methods;
+
+import java.net.URI;
+
+import org.apache.http.HttpResponse;
+import org.apache.jackrabbit.webdav.DavMethods;
+import org.apache.jackrabbit.webdav.DavServletResponse;
+import org.apache.jackrabbit.webdav.header.PollTimeoutHeader;
+import org.apache.jackrabbit.webdav.observation.ObservationConstants;
+
+/**
+ * Represents an HTTP POLL request.
+ * <p>
+ * Note that "POLL" is a custom HTTP extension, not defined in a standards paper.
+ * @since 2.13.6
+ */
+public class HttpPoll extends BaseDavRequest {
+
+ public HttpPoll(URI uri, String subscriptionId, long timeout) {
+ super(uri);
+ super.setHeader(ObservationConstants.HEADER_SUBSCRIPTIONID, subscriptionId);
+ if (timeout > 0) {
+ PollTimeoutHeader th = new PollTimeoutHeader(timeout);
+ super.setHeader(th.getHeaderName(), th.getHeaderValue());
+ }
+ }
+
+ public HttpPoll(String uri, String subscriptionId, long timeout) {
+ this(URI.create(uri), subscriptionId, timeout);
+ }
+
+ @Override
+ public String getMethod() {
+ return DavMethods.METHOD_POLL;
+ }
+
+ @Override
+ public boolean succeeded(HttpResponse response) {
+ int statusCode = response.getStatusLine().getStatusCode();
+ return statusCode == DavServletResponse.SC_OK;
+ }
+}
\ No newline at end of file
Propchange: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpPoll.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpPropfind.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpPropfind.java?rev=1773809&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpPropfind.java (added)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpPropfind.java Mon Dec 12 15:57:22 2016
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.webdav.client.methods;
+
+import java.io.IOException;
+import java.net.URI;
+
+import org.apache.http.HttpResponse;
+import org.apache.jackrabbit.webdav.DavConstants;
+import org.apache.jackrabbit.webdav.DavMethods;
+import org.apache.jackrabbit.webdav.DavServletResponse;
+import org.apache.jackrabbit.webdav.header.DepthHeader;
+import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
+import org.apache.jackrabbit.webdav.property.PropfindInfo;
+
+/**
+ * Represents an HTTP PROPFIND request.
+ *
+ * @see <a href="http://webdav.org/specs/rfc4918.html#rfc.section.9.1">RFC 4918, Section 9.1</a>
+ * @since 2.13.6
+ */
+public class HttpPropfind extends BaseDavRequest {
+
+ public HttpPropfind(URI uri, int propfindType, DavPropertyNameSet names, int depth) throws IOException {
+ super(uri);
+
+ DepthHeader dh = new DepthHeader(depth);
+ super.setHeader(dh.getHeaderName(), dh.getHeaderValue());
+
+ PropfindInfo info = new PropfindInfo(propfindType, names);
+ super.setEntity(XmlEntity.create(info));
+ }
+
+ public HttpPropfind(URI uri, DavPropertyNameSet names, int depth) throws IOException {
+ this(uri, DavConstants.PROPFIND_BY_PROPERTY, names, depth);
+ }
+
+ public HttpPropfind(URI uri, int propfindType, int depth) throws IOException {
+ this(uri, propfindType, new DavPropertyNameSet(), depth);
+ }
+
+ public HttpPropfind(String uri, int propfindType, int depth) throws IOException {
+ this(URI.create(uri), propfindType, depth);
+ }
+
+ public HttpPropfind(String uri, int propfindType, DavPropertyNameSet names, int depth) throws IOException {
+ this(URI.create(uri), propfindType, names, depth);
+ }
+
+ public HttpPropfind(String uri, DavPropertyNameSet names, int depth) throws IOException {
+ this(URI.create(uri), names, depth);
+ }
+
+ @Override
+ public String getMethod() {
+ return DavMethods.METHOD_PROPFIND;
+ }
+
+ @Override
+ public boolean succeeded(HttpResponse response) {
+ return response.getStatusLine().getStatusCode() == DavServletResponse.SC_MULTI_STATUS;
+ }
+}
\ No newline at end of file
Propchange: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpPropfind.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpProppatch.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpProppatch.java?rev=1773809&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpProppatch.java (added)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpProppatch.java Mon Dec 12 15:57:22 2016
@@ -0,0 +1,104 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.webdav.client.methods;
+
+import java.io.IOException;
+import java.net.URI;
+import java.util.List;
+
+import org.apache.http.HttpResponse;
+import org.apache.jackrabbit.webdav.DavMethods;
+import org.apache.jackrabbit.webdav.DavServletResponse;
+import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
+import org.apache.jackrabbit.webdav.property.DavPropertySet;
+import org.apache.jackrabbit.webdav.property.PropEntry;
+import org.apache.jackrabbit.webdav.property.ProppatchInfo;
+
+/**
+ * Represents an HTTP PROPPATCH request.
+ *
+ * @see <a href="http://webdav.org/specs/rfc4918.html#rfc.section.9.2">RFC 4918, Section 9.2</a>
+ * @since 2.13.6
+ */
+public class HttpProppatch extends BaseDavRequest {
+
+ // private DavPropertyNameSet propertyNames;
+
+ public HttpProppatch(URI uri, ProppatchInfo info) throws IOException {
+ super(uri);
+ super.setEntity(XmlEntity.create(info));
+ // this.propertyNames = info.getAffectedProperties();
+ }
+
+ public HttpProppatch(URI uri, List<? extends PropEntry> changeList) throws IOException {
+ this(uri, new ProppatchInfo(changeList));
+ }
+
+ public HttpProppatch(URI uri, DavPropertySet setProperties, DavPropertyNameSet removeProperties) throws IOException {
+ this(uri, new ProppatchInfo(setProperties, removeProperties));
+ }
+
+ public HttpProppatch(String uri, List<? extends PropEntry> changeList) throws IOException {
+ this(URI.create(uri), new ProppatchInfo(changeList));
+ }
+
+ public HttpProppatch(String uri, DavPropertySet setProperties, DavPropertyNameSet removeProperties) throws IOException {
+ this(URI.create(uri), new ProppatchInfo(setProperties, removeProperties));
+ }
+
+ @Override
+ public String getMethod() {
+ return DavMethods.METHOD_PROPPATCH;
+ }
+
+ @Override
+ public boolean succeeded(HttpResponse response) {
+ return response.getStatusLine().getStatusCode() == DavServletResponse.SC_MULTI_STATUS;
+
+ // disabled code that fails for current PROPPATCH behavior of Jackrabbit
+// MultiStatusResponse responses[] = super.getResponseBodyAsMultiStatus(response).getResponses();
+// if (responses.length != 1) {
+// throw new DavException(DavServletResponse.SC_MULTI_STATUS,
+// "PROPPATCH failed: Expected exactly one multistatus response element, but got " + responses.length);
+// }
+// DavPropertyNameSet okSet = responses[0].getPropertyNames(DavServletResponse.SC_OK);
+// if (okSet.isEmpty()) {
+// throw new DavException(DavServletResponse.SC_MULTI_STATUS,
+// "PROPPATCH failed: No 'OK' response found for resource " + responses[0].getHref());
+// } else {
+// DavPropertyNameIterator it = propertyNames.iterator();
+// while (it.hasNext()) {
+// DavPropertyName pn = it.nextPropertyName();
+// boolean success = okSet.remove(pn);
+// if (!success) {
+// throw new DavException(DavServletResponse.SC_MULTI_STATUS,
+// "PROPPATCH failed: Property name not present in multistatus response: " + pn);
+// }
+// }
+// }
+// if (!okSet.isEmpty()) {
+// StringBuilder b = new StringBuilder();
+// DavPropertyNameIterator it = okSet.iterator();
+// while (it.hasNext()) {
+// b.append(it.nextPropertyName().toString()).append("; ");
+// }
+// throw new DavException(DavServletResponse.SC_MULTI_STATUS,
+// "PROPPATCH failed: The following properties outside of the original request where set or removed: " + b.toString());
+// }
+// return true;
+ }
+}
\ No newline at end of file
Propchange: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpProppatch.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpRebind.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpRebind.java?rev=1773809&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpRebind.java (added)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpRebind.java Mon Dec 12 15:57:22 2016
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.webdav.client.methods;
+
+import java.io.IOException;
+import java.net.URI;
+
+import org.apache.http.HttpResponse;
+import org.apache.jackrabbit.webdav.DavMethods;
+import org.apache.jackrabbit.webdav.DavServletResponse;
+import org.apache.jackrabbit.webdav.bind.RebindInfo;
+
+/**
+ * Represents an HTTP REBIND request.
+ *
+ * @see <a href="http://webdav.org/specs/rfc5842.html#rfc.section.6">RFC 5842, Section 6</a>
+ * @since 2.13.6
+ */
+public class HttpRebind extends BaseDavRequest {
+
+ public HttpRebind(URI uri, RebindInfo info) throws IOException {
+ super(uri);
+ super.setEntity(XmlEntity.create(info));
+ }
+
+ public HttpRebind(String uri, RebindInfo info) throws IOException {
+ this(URI.create(uri), info);
+ }
+
+ @Override
+ public String getMethod() {
+ return DavMethods.METHOD_REBIND;
+ }
+
+ @Override
+ public boolean succeeded(HttpResponse response) {
+ int statusCode = response.getStatusLine().getStatusCode();
+ return statusCode == DavServletResponse.SC_OK || statusCode == DavServletResponse.SC_CREATED;
+ }
+}
\ No newline at end of file
Propchange: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpRebind.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpReport.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpReport.java?rev=1773809&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpReport.java (added)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpReport.java Mon Dec 12 15:57:22 2016
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.webdav.client.methods;
+
+import java.io.IOException;
+import java.net.URI;
+
+import org.apache.http.HttpResponse;
+import org.apache.jackrabbit.webdav.DavConstants;
+import org.apache.jackrabbit.webdav.DavMethods;
+import org.apache.jackrabbit.webdav.DavServletResponse;
+import org.apache.jackrabbit.webdav.header.DepthHeader;
+import org.apache.jackrabbit.webdav.version.report.ReportInfo;
+
+/**
+ * Represents an HTTP REPORT request.
+ *
+ * @see <a href="http://webdav.org/specs/rfc3253.html#rfc.section.3.6">RFC 3253, Section 3.6</a>
+ * @since 2.13.6
+ */
+public class HttpReport extends BaseDavRequest {
+
+ private final boolean isDeep;
+
+ public HttpReport(URI uri, ReportInfo reportInfo) throws IOException {
+ super(uri);
+ DepthHeader dh = new DepthHeader(reportInfo.getDepth());
+ isDeep = reportInfo.getDepth() > DavConstants.DEPTH_0;
+ super.setHeader(dh.getHeaderName(), dh.getHeaderValue());
+ super.setEntity(XmlEntity.create(reportInfo));
+ }
+
+ public HttpReport(String uri, ReportInfo reportInfo) throws IOException {
+ this(URI.create(uri), reportInfo);
+ }
+
+ @Override
+ public String getMethod() {
+ return DavMethods.METHOD_REPORT;
+ }
+
+ @Override
+ public boolean succeeded(HttpResponse response) {
+ int statusCode = response.getStatusLine().getStatusCode();
+ if (isDeep) {
+ return statusCode == DavServletResponse.SC_MULTI_STATUS;
+ } else {
+ return statusCode == DavServletResponse.SC_OK || statusCode == DavServletResponse.SC_MULTI_STATUS;
+ }
+
+ }
+}
\ No newline at end of file
Propchange: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpReport.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpSearch.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpSearch.java?rev=1773809&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpSearch.java (added)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpSearch.java Mon Dec 12 15:57:22 2016
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.webdav.client.methods;
+
+import java.io.IOException;
+import java.net.URI;
+
+import org.apache.http.HttpResponse;
+import org.apache.jackrabbit.webdav.DavMethods;
+import org.apache.jackrabbit.webdav.DavServletResponse;
+import org.apache.jackrabbit.webdav.search.SearchInfo;
+
+/**
+ * Represents an HTTP SEARCH request.
+ *
+ * @see <a href="http://webdav.org/specs/rfc5323.html#rfc.section.2">RFC 5323, Section 2</a>
+ * @since 2.13.6
+ */
+public class HttpSearch extends BaseDavRequest {
+
+ public HttpSearch(URI uri, SearchInfo searchInfo) throws IOException {
+ super(uri);
+ super.setEntity(XmlEntity.create(searchInfo));
+ }
+
+ public HttpSearch(String uri, SearchInfo searchInfo) throws IOException {
+ this(URI.create(uri), searchInfo);
+ }
+
+ @Override
+ public String getMethod() {
+ return DavMethods.METHOD_SEARCH;
+ }
+
+ @Override
+ public boolean succeeded(HttpResponse response) {
+ int statusCode = response.getStatusLine().getStatusCode();
+ return statusCode == DavServletResponse.SC_MULTI_STATUS;
+ }
+}
\ No newline at end of file
Propchange: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpSearch.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpSubscribe.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpSubscribe.java?rev=1773809&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpSubscribe.java (added)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpSubscribe.java Mon Dec 12 15:57:22 2016
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.webdav.client.methods;
+
+import java.io.IOException;
+import java.net.URI;
+
+import org.apache.http.HttpResponse;
+import org.apache.jackrabbit.webdav.DavConstants;
+import org.apache.jackrabbit.webdav.DavMethods;
+import org.apache.jackrabbit.webdav.DavServletResponse;
+import org.apache.jackrabbit.webdav.header.CodedUrlHeader;
+import org.apache.jackrabbit.webdav.header.DepthHeader;
+import org.apache.jackrabbit.webdav.header.TimeoutHeader;
+import org.apache.jackrabbit.webdav.observation.ObservationConstants;
+import org.apache.jackrabbit.webdav.observation.SubscriptionInfo;
+
+/**
+ * Represents an HTTP SUBSCRIBE request.
+ * <p>
+ * Note that "SUBSCRIBE" is a custom HTTP extension, not defined in a standards paper.
+ * @since 2.13.6
+ */
+public class HttpSubscribe extends BaseDavRequest {
+
+ public HttpSubscribe(URI uri, SubscriptionInfo info, String subscriptionId) throws IOException {
+ super(uri);
+ if (info == null) {
+ throw new IllegalArgumentException("SubscriptionInfo must not be null.");
+ }
+ // optional subscriptionId (only required to modify an existing
+ // subscription)
+ if (subscriptionId != null) {
+ CodedUrlHeader h = new CodedUrlHeader(ObservationConstants.HEADER_SUBSCRIPTIONID, subscriptionId);
+ super.setHeader(h.getHeaderName(), h.getHeaderValue());
+ }
+ // optional timeout header
+ long to = info.getTimeOut();
+ if (to != DavConstants.UNDEFINED_TIMEOUT) {
+ TimeoutHeader h = new TimeoutHeader(info.getTimeOut());
+ super.setHeader(h.getHeaderName(), h.getHeaderValue());
+ }
+ // always set depth header since value is boolean flag
+ DepthHeader dh = new DepthHeader(info.isDeep());
+ super.setHeader(dh.getHeaderName(), dh.getHeaderValue());
+ super.setEntity(XmlEntity.create(info));
+ }
+
+ public HttpSubscribe(String uri, SubscriptionInfo info, String subscriptionId) throws IOException {
+ this(URI.create(uri), info, subscriptionId);
+ }
+
+ public String getSubscriptionId(HttpResponse response) {
+ org.apache.http.Header sbHeader = response.getFirstHeader(ObservationConstants.HEADER_SUBSCRIPTIONID);
+ if (sbHeader != null) {
+ CodedUrlHeader cuh = new CodedUrlHeader(ObservationConstants.HEADER_SUBSCRIPTIONID, sbHeader.getValue());
+ return cuh.getCodedUrl();
+ }
+ else {
+ return null;
+ }
+ }
+
+ @Override
+ public String getMethod() {
+ return DavMethods.METHOD_SUBSCRIBE;
+ }
+
+ @Override
+ public boolean succeeded(HttpResponse response) {
+ int statusCode = response.getStatusLine().getStatusCode();
+ return statusCode == DavServletResponse.SC_OK;
+ }
+}
\ No newline at end of file
Propchange: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpSubscribe.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpUnbind.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpUnbind.java?rev=1773809&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpUnbind.java (added)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpUnbind.java Mon Dec 12 15:57:22 2016
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.webdav.client.methods;
+
+import java.io.IOException;
+import java.net.URI;
+
+import org.apache.http.HttpResponse;
+import org.apache.jackrabbit.webdav.DavMethods;
+import org.apache.jackrabbit.webdav.DavServletResponse;
+import org.apache.jackrabbit.webdav.bind.UnbindInfo;
+
+/**
+ * Represents an HTTP UNBIND request.
+ *
+ * @see <a href="http://webdav.org/specs/rfc5842.html#rfc.section.5">RFC 5842, Section 5</a>
+ * @since 2.13.6
+ */
+public class HttpUnbind extends BaseDavRequest {
+
+ public HttpUnbind(URI uri, UnbindInfo info) throws IOException {
+ super(uri);
+ super.setEntity(XmlEntity.create(info));
+ }
+
+ public HttpUnbind(String uri, UnbindInfo info) throws IOException {
+ this(URI.create(uri), info);
+ }
+
+ @Override
+ public String getMethod() {
+ return DavMethods.METHOD_UNBIND;
+ }
+
+ @Override
+ public boolean succeeded(HttpResponse response) {
+ int statusCode = response.getStatusLine().getStatusCode();
+ return statusCode == DavServletResponse.SC_OK || statusCode == DavServletResponse.SC_NO_CONTENT;
+ }
+}
\ No newline at end of file
Propchange: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpUnbind.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpUnlock.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpUnlock.java?rev=1773809&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpUnlock.java (added)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpUnlock.java Mon Dec 12 15:57:22 2016
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.webdav.client.methods;
+
+import java.net.URI;
+
+import org.apache.http.HttpResponse;
+import org.apache.jackrabbit.webdav.DavConstants;
+import org.apache.jackrabbit.webdav.DavMethods;
+import org.apache.jackrabbit.webdav.DavServletResponse;
+import org.apache.jackrabbit.webdav.header.CodedUrlHeader;
+
+/**
+ * Represents an HTTP UNLOCK request.
+ *
+ * @see <a href="http://webdav.org/specs/rfc4918.html#rfc.section.9.11">RFC 4918, Section 9.11</a>
+ * @since 2.13.6
+ */
+public class HttpUnlock extends BaseDavRequest {
+
+ public HttpUnlock(URI uri, String lockToken) {
+ super(uri);
+ CodedUrlHeader lth = new CodedUrlHeader(DavConstants.HEADER_LOCK_TOKEN, lockToken);
+ super.setHeader(lth.getHeaderName(), lth.getHeaderValue());
+ }
+
+ public HttpUnlock(String uri, String lockToken) {
+ this(URI.create(uri), lockToken);
+ }
+
+ @Override
+ public String getMethod() {
+ return DavMethods.METHOD_UNLOCK;
+ }
+
+ @Override
+ public boolean succeeded(HttpResponse response) {
+ int statusCode = response.getStatusLine().getStatusCode();
+ return statusCode == DavServletResponse.SC_OK || statusCode == DavServletResponse.SC_NO_CONTENT;
+ }
+}
\ No newline at end of file
Propchange: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpUnlock.java
------------------------------------------------------------------------------
svn:eol-style = native