/*
* Copyright (C) 2009 eXo Platform SAS.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.exoplatform.services.jcr.webdav;
import org.exoplatform.common.util.HierarchicalProperty;
import java.io.InputStream;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
/**
* Created by The eXo Platform SARL .<br>
* JCR WebDAV entry point. Defines WebDav protocol methods: RFC-2518 HTTP
* Extensions for Distributed Authoring -- WEBDAV RFC-3253 Versioning Extensions
* to WebDAV RFC-3648: Web Distributed Authoring and Versioning (WebDAV) Ordered
* Collections Protocol
*
* @author Gennady Azarenkov
*/
public interface WebDavService
{
/**
* WedDAV "GET" method. See <a href='http://www.ietf.org/rfc/rfc2518.txt'>HTTP
* methods for distributed authoring sec. 8.4 "GET, HEAD for Collections"</a>.
*
* @param repoName repository name
* @param repoPath path in repository
* @param range Range HTTP header
* @param version version name
* @param ifModifiedSince if-modified-since header
* @param ifModifiedSince if-none-match header
* @param baseURI base URI info
* @return the instance of javax.ws.rs.core.Response
*/
Response get(String repoName, String repoPath, String range, String ifModifiedSince, String ifNoneMatch,
String version, UriInfo baseURI);
/**
* WedDAV "HEAD" method. see <a
* href='http://www.ietf.org/rfc/rfc2518.txt'>HTTP methods for distributed
* authoring sec. 8.4 "GET, HEAD for Collections"</a>.
*
* @param repoName repository name
* @param repoPath path in repository
* @param baseURI base URI info
* @return the instance of javax.ws.rs.core.Response
*/
Response head(String repoName, String repoPath, UriInfo baseURI);
/**
* WedDAV "PUT" method. See <a
* href='http://www.ietf.org/rfc/rfc2518.txt'>HTTP methods for distributed
* authoring sec. 8.7 "PUT"</a>.
*
* @param repoName repository name
* @param repoPath path in repository
* @param lockTokenHeader Lock-Token HTTP header
* @param ifHeader If HTTP Header
* @param fileNodeTypeHeader JCR NodeType header
* @param contentNodeTypeHeader JCR Content-NodeType header
* @param mixinTypes JCR Mixin types header
* @param mediaType Content-Type HTTP header
* @param userAgent User-Agent HTTP header
* @param inputStream stream that contain incoming data
* @param uriInfo URI info
* @return the instance of javax.ws.rs.core.Response
*/
Response put(String repoName, String repoPath, String lockTokenHeader, String ifHeader, String fileNodeTypeHeader,
String contentNodeTypeHeader, String mixinTypes, MediaType mediaType, String userAgent, InputStream inputStream,
UriInfo uriInfo);
/**
* @param repoName repository name
* @param repoPath path in repository
* @param lockTokenHeader Lock-Token HTTP header
* @param ifHeader If HTTP Header
* @return the instance of javax.ws.rs.core.Response
*/
Response delete(String repoName, String repoPath, String lockTokenHeader, String ifHeader);
/**
* @param repoName repository name
* @param repoPath path in repository
* @param destinationHeader Destination HTTP Header
* @param lockTokenHeader Lock-Token HTTP header
* @param ifHeader If- HTTP Header
* @param depthHeader Depth HTTP header
* @param overwriteHeader Overwrite HTTP header
* @param baseURI base URI info
* @param body Request body
* @return the instance of javax.ws.rs.core.Response
*/
Response copy(String repoName, String repoPath, String destinationHeader, String lockTokenHeader, String ifHeader,
String depthHeader, String overwriteHeader, UriInfo baseURI, HierarchicalProperty body);
/**
* @param repoName repository name
* @param repoPath path in repository
* @param lockTokenHeader Lock-Token HTTP header
* @param ifHeader If- HTTP Header
* @param nodeTypeHeader JCR Node-Type header
* @param mixinTypesHeader JCR Mixin-Types header
* @return the instance of javax.ws.rs.core.Response
*/
Response mkcol(String repoName, String repoPath, String lockTokenHeader, String ifHeader, String nodeTypeHeader,
String mixinTypesHeader, UriInfo uriInfo);
/**
* @param repoName repository name
* @param repoPath path in repository
* @param destinationHeader Destination HTTP header
* @param lockTokenHeader Lock-Token HTTP header
* @param ifHeader If- HTTP Header
* @param depthHeader Depth HTTP header
* @param overwriteHeader Overwrite HTTP header
* @param baseURI base URI info
* @param body Request body
* @return the instance of javax.ws.rs.core.Response
*/
Response move(String repoName, String repoPath, String destinationHeader, String lockTokenHeader, String ifHeader,
String depthHeader, String overwriteHeader, UriInfo baseURI, HierarchicalProperty body);
/**
* @param repoName repository name
* @return the instance of javax.ws.rs.core.Response
*/
Response options(String repoName);
/**
* @param repoName repository name
* @param repoPath path in repository
* @param depthHeader Depth HTTP header
* @param baseURI base URI info
* @param body Request body
* @return the instance of javax.ws.rs.core.Response HTTP response
*/
Response propfind(String repoName, String repoPath, String depthHeader, UriInfo baseURI, HierarchicalProperty body);
/**
* @param repoName repository name
* @param repoPath path in repository
* @param lockTokenHeader Lock-Token HTTP header
* @param ifHeader If- HTTP Header
* @param baseURI base URI info
* @param body Request body
* @return the instance of javax.ws.rs.core.Response HTTP response
*/
Response proppatch(String repoName, String repoPath, String lockTokenHeader, String ifHeader, UriInfo baseURI,
HierarchicalProperty body);
/**
* @param repoName repository name
* @param repoPath path in repository
* @param lockTokenHeader Lock-Token HTTP header
* @param ifHeader If- HTTP Header
* @param depth Depth HTTP header
* @param body Request body
* @return the instance of javax.ws.rs.core.Response
*/
Response lock(String repoName, String repoPath, String lockTokenHeader, String ifHeader, String depth,
HierarchicalProperty body);
/**
* @param repoName repository name
* @param repoPath path in repository
* @param lockTokenHeader Lock-Token HTTP header
* @param ifHeader If- HTTP Header
* @return the instance of javax.ws.rs.core.Response
*/
Response unlock(String repoName, String repoPath, String lockTokenHeader, String ifHeader);
// DeltaV: RFC-3253 Versioning Extensions to WebDAV
/**
* @param repoName repository name
* @param repoPath path in repository
* @param lockTokenHeader Lock-Token HTTP header
* @param ifHeader If- HTTP Header
* @return the instance of javax.ws.rs.core.Response
*/
Response checkin(String repoName, String repoPath, String lockTokenHeader, String ifHeader);
/**
* @param repoName repository name
* @param repoPath path in repository
* @param lockTokenHeader Lock-Token HTTP header
* @param ifHeader If- HTTP Header
* @return the instance of javax.ws.rs.core.Response
*/
Response checkout(String repoName, String repoPath, String lockTokenHeader, String ifHeader);
/**
* @param repoName repository name
* @param repoPath path in repository
* @param depth Depth HTTP header
* @param baseURI base URI info
* @param body Request body
* @return the instance of javax.ws.rs.core.Response
*/
Response report(String repoName, String repoPath, String depth, UriInfo baseURI, HierarchicalProperty body);
/**
* @param repoName repository name
* @param repoPath path in repository
* @param lockTokenHeader Lock-Token HTTP header
* @param ifHeader If- HTTP Header
* @return the instance of javax.ws.rs.core.Response
*/
Response uncheckout(String repoName, String repoPath, String lockTokenHeader, String ifHeader);
/**
* @param repoName repository name
* @param repoPath path in repository
* @param lockTokenHeader Lock-Token HTTP header
* @param ifHeader If- HTTP Header
* @return the instance of javax.ws.rs.core.Response
*/
Response versionControl(String repoName, String repoPath, String lockTokenHeader, String ifHeader);
// Order: RFC-3648: Web Distributed Authoring and Versioning (WebDAV)
// Ordered Collections Protocol
/**
* @param repoName repository name
* @param repoPath path in repository
* @param lockTokenHeader Lock-Token HTTP header
* @param ifHeader If- HTTP Header
* @param baseURI base URI info
* @param body Request body
* @return the instance of javax.ws.rs.core.Response
*/
Response order(String repoName, String repoPath, String lockTokenHeader, String ifHeader, UriInfo baseURI,
HierarchicalProperty body);
// Search
/**
* @param repoName repository name
* @param repoPath path in repository
* @param baseURI base URI info
* @param body Request body
* @return the instance of javax.ws.rs.core.Response
*/
Response search(String repoName, String repoPath, UriInfo baseURI, HierarchicalProperty body);
/**
* WebDAV ACL method according to protocol extension - Access Control Protocol: RFC3744
* More details here: <a href='http://www.webdav.org/specs/rfc3744.html'>Web Distributed
* Authoring and Versioning (WebDAV) Access Control Protocol</a>
* @param repoName repository name
* @param repoPath path in repository
* @param lockTokenHeader Lock-Token HTTP header
* @param ifHeader If- HTTP Header
* @param body Request body
* @return the instance of javax.ws.rs.core.Response
*/
Response acl(String repoName, String repoPath, String lockTokenHeader, String ifHeader, HierarchicalProperty body);
}