org.apache.jackrabbit.webdav.DavResource Maven / Gradle / Ivy
The newest version!
/*
* 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;
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.DavPropertySet;
import org.apache.jackrabbit.webdav.property.PropEntry;
import java.io.IOException;
import java.util.List;
/**
* DavResource
provides standard WebDAV functionality as specified
* by RFC 2518.
*/
public interface DavResource {
/**
* String constant representing the WebDAV 1 and 2 method set.
*/
public static final String METHODS = "OPTIONS, GET, HEAD, TRACE, PROPFIND, PROPPATCH, MKCOL, COPY, PUT, DELETE, MOVE, LOCK, UNLOCK";
/**
* Returns a comma separated 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 DavResource
.
* This method is a shortcut for DavResource.getLocator().getResourcePath()
.
*
* @return path of the element defined by this DavResource
.
*/
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 The output context.
* @throws IOException If an error occurs.
*/
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 null
* if the property does not exist.
*/
public DavProperty> getProperty(DavPropertyName name);
/**
* Returns all webdav properties present on this resource that will be
* return upon a {@link DavConstants#PROPFIND_ALL_PROP} request. The
* implementation may in addition expose other (protected or calculated)
* properties which should be marked accordingly (see also
* {@link org.apache.jackrabbit.webdav.property.DavProperty#isInvisibleInAllprop()}.
*
* @return a {@link DavPropertySet} containing at least all properties
* of this resource that are exposed in 'allprop' PROPFIND request.
*/
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 and remove the specified properties from this resource.
*
* @param changeList list containing {@link DavPropertyName} objects (for
* properties to be removed) and {@link DavProperty} objects (for
* properties to be added/set).
* @return multistatus response listing the status resulting from
* setting and/or removing the specified properties, in order to allow a
* detailed multistatus response.
* @throws DavException if an error occurred. 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(List extends PropEntry> changeList) 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 null
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.
* 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 null
* 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 enforced on
* one of its 'parent' resources.
*
* @return lock information of this resource or null
if this
* resource has no lock applying it. If an error occurs while retrieving the
* lock information null
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 DavException
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 DavException
is thrown.
* @throws DavException if the lock could not be refreshed.
*/
public ActiveLock refreshLock(LockInfo reqLockInfo, String lockToken) throws DavException;
/**
* Remove the lock identified by the included lock token from this resource.
* This method will return false if the unlocking did not succeed.
*
* @param lockToken identifying 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 DavResourceFactory
that created this resource.
*
* @return the factory that created this resource.
*/
public DavResourceFactory getFactory();
/**
* Retrieve the DavSession
associated with this resource.
*
* @return session object associated with this resource.
*/
public DavSession getSession();
}