All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.jackrabbit.webdav.DavResource Maven / Gradle / Ivy

There is a newer version: 2.23.1-beta
Show 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 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(); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy