blob: e2250421bce4e54df70c983e5a85508fe379f4fb [file] [log] [blame]
/*
* Copyright 2005 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* 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;
import org.apache.jackrabbit.webdav.io.InputContext;
import org.apache.jackrabbit.webdav.io.OutputContext;
import org.apache.jackrabbit.webdav.lock.ActiveLock;
import org.apache.jackrabbit.webdav.lock.LockInfo;
import org.apache.jackrabbit.webdav.lock.LockManager;
import org.apache.jackrabbit.webdav.lock.Scope;
import org.apache.jackrabbit.webdav.lock.Type;
import org.apache.jackrabbit.webdav.property.DavProperty;
import org.apache.jackrabbit.webdav.property.DavPropertyName;
import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
import org.apache.jackrabbit.webdav.property.DavPropertySet;
import java.io.IOException;
/**
* <code>DavResource</code> provides standard WebDAV functionality as specified
* by <a href="http://www.ietf.org/rfc/rfc2518.txt">RFC 2518</a>.
*/
public interface DavResource {
/**
* Constant for WebDAV 1 and 2 compliance class as is represented by this
* resource.
*/
public static final String COMPLIANCE_CLASS = "1, 2";
/**
* String constant representing the WebDAV 1 and 2 method set.
*/
public static final String METHODS = "OPTIONS, GET, HEAD, POST, TRACE, PROPFIND, PROPPATCH, MKCOL, COPY, PUT, DELETE, MOVE, LOCK, UNLOCK";
/**
* Returns a comma separted list of all compliance classes the given
* resource is fulfilling.
*
* @return compliance classes
*/
public String getComplianceClass();
/**
* Returns a comma separated list of all METHODS supported by the given
* resource.
*
* @return METHODS supported by this resource.
*/
public String getSupportedMethods();
/**
* Returns true if this webdav resource represents an existing repository item.
*
* @return true, if the resource represents an existing repository item.
*/
public boolean exists();
/**
* Returns true if this webdav resource has the resourcetype 'collection'.
*
* @return true if the resource represents a collection resource.
*/
public boolean isCollection();
/**
* Returns the display name of this resource.
*
* @return display name.
*/
public String getDisplayName();
/**
* Returns the {@link DavResourceLocator locator} object for this webdav resource,
* which encapsulates the information for building the complete 'href'.
*
* @return the locator for this resource.
* @see #getResourcePath()
* @see #getHref()
*/
public DavResourceLocator getLocator();
/**
* Returns the path of the hierarchy element defined by this <code>DavResource</code>.
* This method is a shortcut for <code>DavResource.getLocator().getResourcePath()</code>.
*
* @return path of the element defined by this <code>DavResource</code>.
*/
public String getResourcePath();
/**
* Returns the absolute href of this resource as returned in the
* multistatus response body.
*
* @return href
*/
public String getHref();
/**
* Return the time of the last modification or -1 if the modification time
* could not be retrieved.
*
* @return time of last modification or -1.
*/
public long getModificationTime();
/**
* Spools the resource properties and ev. content to the specified context
* (e.g. to respond to a 'GET' or 'HEAD' request). The context could e.g.
* wrap the servlet response.
*
* @param outputContext
* @throws IOException
*/
public void spool(OutputContext outputContext) throws IOException;
/**
* Returns an array of all {@link DavPropertyName property names} available
* on this resource.
*
* @return an array of property names.
*/
public DavPropertyName[] getPropertyNames();
/**
* Return the webdav property with the specified name.
*
* @param name name of the webdav property
* @return the {@link DavProperty} with the given name or <code>null</code>
* if the property does not exist.
*/
public DavProperty getProperty(DavPropertyName name);
/**
* Returns all webdav properties present on this resource.
*
* @return a {@link DavPropertySet} containing all webdav property
* of this resource.
*/
public DavPropertySet getProperties();
/**
* Add/Set the specified property on this resource.
*
* @param property
* @throws DavException if an error occurs
*/
public void setProperty(DavProperty property) throws DavException;
/**
* Remove the specified property from this resource.
*
* @param propertyName
* @throws DavException if an error occurs
*/
public void removeProperty(DavPropertyName propertyName) throws DavException;
/**
* Set/add the specified properties and remove the properties with the given
* names from this resource respectively.
*
* @param setProperties Set of properties to be added or modified
* @param removePropertyNames Set of property names to be removed
* @return multistatus response listing the status resulting from
* setting and/or removing the specified properties, in order to allow a
* detailled multistatus response.
* @throws DavException if an error occured. This may be the case if the
* general state of the resource prevents any properties to be set or removed
* (e.g. due to a lock).
*/
public MultiStatusResponse alterProperties(DavPropertySet setProperties, DavPropertyNameSet removePropertyNames) throws DavException;
/**
* Retrieve the resource this resource is internal member of.
*
* @return resource this resource is an internal member of. In case this resource
* is the root <code>null</code> is returned.
*/
public DavResource getCollection();
/**
* Add the given resource as an internal member to this resource.
*
* @param resource {@link DavResource} to be added as internal member.
* @param inputContext Context providing the properties and content for the
* internal member to be created or replaced.
* @throws DavException
*/
public void addMember(DavResource resource, InputContext inputContext) throws DavException;
/**
* Returns an iterator over all internal members.
*
* @return a {@link DavResourceIterator) over all internal members.
*/
public DavResourceIterator getMembers();
/**
* Removes the specified member from this resource.
*
* @throws DavException
*/
public void removeMember(DavResource member) throws DavException;
/**
* Move this DavResource to the given destination resource
*
* @param destination
* @throws DavException
*/
public void move(DavResource destination) throws DavException;
/**
* Copy this DavResource to the given destination resource
*
* @param destination
* @param shallow
* @throws DavException
*/
public void copy(DavResource destination, boolean shallow) throws DavException;
/**
* Returns true, if the this resource allows locking. NOTE, that this method
* does not define, whether a lock/unlock can be successfully executed.
*
* @return true, if this resource supports any locking.
* @param type
* @param scope
*/
public boolean isLockable(Type type, Scope scope);
/**
* Returns true if a lock applies to this resource. This may be either a
* lock on this resource itself or a deep lock inherited from a collection
* above this resource.<br>
* Note, that true is returned whenever a lock applies to that resource even
* if the lock is expired or not effective due to the fact that the request
* provides the proper lock token.
*
* @return true if a lock applies to this resource.
* @param type
*/
public boolean hasLock(Type type, Scope scope);
/**
* Return the lock present on this webdav resource or <code>null</code>
* if the resource is either not locked or not lockable at all. Note, that
* a resource may have a lock that is inherited by a deep lock inforced on
* one of its 'parent' resources.
*
* @return lock information of this resource or <code>null</code> if this
* resource has no lock applying it. If an error occurs while retrieving the
* lock information <code>null</code> is returned as well.
* @param type
*/
public ActiveLock getLock(Type type, Scope scope) ;
/**
* Returns an array of all locks applied to the given resource.
*
* @return array of locks. The array is empty if there are no locks applied
* to this resource.
*/
public ActiveLock[] getLocks();
/**
* Lock this webdav resource with the information retrieve from the request
* and return the resulting lockdiscovery object.
*
* @param reqLockInfo lock info as retrieved from the request.
* @return lockdiscovery object to be returned in the response. If the lock
* could not be obtained a <code>DavException</code> is thrown.
* @throws DavException if the lock could not be obtained.
*/
public ActiveLock lock(LockInfo reqLockInfo) throws DavException;
/**
* Refresh an existing lock by resetting the timeout.
*
* @param reqLockInfo lock info as retrieved from the request.
* @param lockToken identifying the lock to be refreshed.
* @return lockdiscovery object to be returned in the response body. If the lock
* could not be refreshed a <code>DavException</code> is thrown.
* @throws DavException if the lock could not be refreshed.
*/
public ActiveLock refreshLock(LockInfo reqLockInfo, String lockToken) throws DavException;
/**
* Remove the lock indentified by the included lock token from this resource.
* This method will return false if the unlocking did not succeed.
*
* @param lockToken indentifying the lock to be removed.
* @throws DavException if the lock could not be removed.
*/
public void unlock(String lockToken) throws DavException;
/**
* Add an external {@link LockManager} to this resource. This method may
* throw {@link UnsupportedOperationException} if the resource does handle
* locking itself.
*
* @param lockmgr
* @see LockManager
*/
public void addLockManager(LockManager lockmgr);
/**
* Return the <code>DavResourceFactory</code> that created this resource.
*
* @return the factory that created this resource.
*/
public DavResourceFactory getFactory();
}