001: /***************************************************************
002: * This file is part of the [fleXive](R) project.
003: *
004: * Copyright (c) 1999-2007
005: * UCS - unique computing solutions gmbh (http://www.ucs.at)
006: * All rights reserved
007: *
008: * The [fleXive](R) project is free software; you can redistribute
009: * it and/or modify it under the terms of the GNU General Public
010: * License as published by the Free Software Foundation;
011: * either version 2 of the License, or (at your option) any
012: * later version.
013: *
014: * The GNU General Public License can be found at
015: * http://www.gnu.org/copyleft/gpl.html.
016: * A copy is found in the textfile GPL.txt and important notices to the
017: * license from the author are found in LICENSE.txt distributed with
018: * these libraries.
019: *
020: * This library is distributed in the hope that it will be useful,
021: * but WITHOUT ANY WARRANTY; without even the implied warranty of
022: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
023: * GNU General Public License for more details.
024: *
025: * For further information about UCS - unique computing solutions gmbh,
026: * please see the company website: http://www.ucs.at
027: *
028: * For further information about [fleXive](R), please see the
029: * project website: http://www.flexive.org
030: *
031: *
032: * This copyright notice MUST APPEAR in all copies of the file!
033: ***************************************************************/package com.flexive.war.webdav;
034:
035: import javax.servlet.http.HttpServletRequest;
036: import javax.servlet.http.HttpServletResponse;
037: import java.io.IOException;
038:
039: /**
040: * Abstract context class for webDav operations.
041: */
042: public abstract class FxDavContext {
043:
044: /**
045: * Returns a singleton for the class.
046: *
047: * @return a singleton for the class.
048: */
049: public abstract FxDavContext getSingleton();
050:
051: /**
052: * Gets the resource stored under the given name, or null if the resource does not exist.
053: * <p/>
054: * The returned resource may be a collection (directory) or file.<br>
055: * The path starts always from the root entry, but there is no starting '/' character.<br>
056: * A empty String denotes the root collection.
057: *
058: * @param request the current request
059: * @param name the name of the resource, eg 'myFolder1/myFolder2/demo.html'
060: * @return the resource
061: */
062: public abstract FxDavEntry getResource(HttpServletRequest request,
063: String name);
064:
065: /**
066: * Returns all childs of a given resource.
067: * <p/>
068: * A empty String denotes the root collection.
069: *
070: * @param request the current request
071: * @param name the name of the resource, eg 'myFolder1/myFolder2', 'myFolder1/File1.txt', 'File.txt'
072: * @return all childs of a given resource.
073: */
074: public abstract FxDavEntry[] getChildren(
075: HttpServletRequest request, String name);
076:
077: /**
078: * Serves a resource to the webdav client.
079: *
080: * @param request the current request
081: * @param response the response
082: * @param name the name of the resource, eg 'myFolder1/File1.txt'
083: * @throws IOException if the resource could not be served
084: */
085: public abstract void serviceResource(HttpServletRequest request,
086: HttpServletResponse response, String name)
087: throws IOException;
088:
089: /**
090: * Create a collection (Mkcol operation).
091: * <p/>
092: * MKCOL creates a new collection resource at the location specified by the Request-URI.
093: * If the resource identified by the Request-URI is non-null then the MKCOL MUST fail.
094: * During MKCOL processing, a server MUST make the Request-URI a member of its parent collection, unless the
095: * Request-URI is "/". If no such ancestor exists, the method MUST fail.<br>
096: * When the MKCOL operation creates a new collection resource, all ancestors MUST already exist, or the method MUST
097: * fail with a 409 (Conflict) status code. For example, if a request to create collection /a/b/c/d/ is made, and
098: * neither /a/b/ nor /a/b/c/ exists, the request must fail.<br>
099: * <br><br>
100: * Possible return codes:
101: * 201 (Created) - The collection or structured resource was created in its entirety.<br>
102: * 403 (Forbidden) - This indicates at least one of two conditions: 1) the server does not allow the creation of
103: * collections at the given location in its namespace, or 2) the parent collection of the Request-URI exists but
104: * cannot accept members.<br>
105: * 405 (Method Not Allowed) - MKCOL can only be executed on a deleted/non-existent resource.<br>
106: * 409 (Conflict) - A collection cannot be made at the Request-URI until one or more intermediate collections have
107: * been created.<br>
108: * 507 (Insufficient Storage) - The resource does not have sufficient space to record the state of the resource
109: * after the execution of this method.<br>
110: * 423 (Locked) - The resource is locked
111: *
112: * @param request the current request
113: * @param name the absolute name of the collection, eg 'folder1/folder2/new_folder'
114: * @return the status code, FxWebDavStatus.SC_CREATED if the operation was successfull
115: */
116: public abstract int createCollection(HttpServletRequest request,
117: String name);
118:
119: /**
120: * Creates a resource.
121: *
122: * @param path the absolute path of the new resource, eg 'folder1/folder2/file.txt'
123: * @param request the request containing the data for the resource
124: * @return the status code, FxWebDavStatus.SC_CREATED if the operation was successful
125: */
126: public abstract int createResource(HttpServletRequest request,
127: String path);
128:
129: /**
130: * Deletes a resource.
131: *
132: * @param path the absolute path of the new resource, eg 'folder1/folder2/file.txt'
133: * @param request the request containing the data for the resource
134: * @return the status code, FxWebDavStatus.SC_OK if the operation was successful
135: */
136: public abstract int deleteResource(HttpServletRequest request,
137: String path);
138:
139: /**
140: * Copies a resource.
141: *
142: * @param src the absolute path of the source resource, eg 'folder1/folder2/file.txt'
143: * @param dest the absolute path of the destination resource, eg 'folder1/folder2/file_new.txt'
144: * @param request the request containing the data for the resource
145: * @return the status code, FxWebDavStatus.SC_OK if the operation was successfull
146: */
147: public abstract int copyResource(HttpServletRequest request,
148: String src, String dest);
149:
150: /**
151: * Moves a resource.
152: *
153: * @param src the absolute path of the source resource, eg 'folder1/folder2/file.txt'
154: * @param dest the absolute path of the destination resource, eg 'folder1/folder2/file_new.txt'
155: * @param request the request containing the data for the resource
156: */
157: public abstract void moveResource(HttpServletRequest request,
158: String src, String dest);
159:
160: }
|