001: /*
002: * Copyright (c) 1998-2008 Caucho Technology -- all rights reserved
003: *
004: * This file is part of Resin(R) Open Source
005: *
006: * Each copy or derived work must preserve the copyright notice and this
007: * notice unmodified.
008: *
009: * Resin Open Source is free software; you can redistribute it and/or modify
010: * it under the terms of the GNU General Public License as published by
011: * the Free Software Foundation; either version 2 of the License, or
012: * (at your option) any later version.
013: *
014: * Resin Open Source is distributed in the hope that it will be useful,
015: * but WITHOUT ANY WARRANTY; without even the implied warranty of
016: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty
017: * of NON-INFRINGEMENT. See the GNU General Public License for more
018: * details.
019: *
020: * You should have received a copy of the GNU General Public License
021: * along with Resin Open Source; if not, write to the
022: * Free SoftwareFoundation, Inc.
023: * 59 Temple Place, Suite 330
024: * Boston, MA 02111-1307 USA
025: *
026: * @author Scott Ferguson
027: */
028:
029: package com.caucho.servlets.webdav;
030:
031: import com.caucho.server.webapp.Application;
032: import com.caucho.util.NullIterator;
033: import com.caucho.vfs.Path;
034:
035: import javax.servlet.ServletContext;
036: import javax.servlet.http.HttpServletRequest;
037: import java.io.IOException;
038: import java.io.InputStream;
039: import java.io.OutputStream;
040: import java.util.Iterator;
041:
042: /**
043: * Represents a virtual filesystem.
044: */
045: public class ApplicationPath extends AbstractPath {
046: /**
047: * Returns true if the named file is a file.
048: *
049: * @param path the requested relative path
050: */
051: public boolean isFile(String path, HttpServletRequest request,
052: ServletContext app) throws IOException {
053: return getPath(path, request, app).isFile();
054: }
055:
056: /**
057: * Returns true if the named file is a directory.
058: *
059: * @param path the requested relative path
060: */
061: public boolean isDirectory(String path, HttpServletRequest request,
062: ServletContext app) throws IOException {
063: return getPath(path, request, app).isDirectory();
064: }
065:
066: /**
067: * Returns true if the file can be read.
068: *
069: * @param path the requested relative path
070: */
071: public boolean canRead(String path, HttpServletRequest request,
072: ServletContext app) throws IOException {
073: return getPath(path, request, app).canRead();
074: }
075:
076: /**
077: * Returns true if the file exists.
078: *
079: * @param path the requested relative path
080: */
081: public boolean exists(String path, HttpServletRequest request,
082: ServletContext app) throws IOException {
083: return getPath(path, request, app).exists();
084: }
085:
086: /**
087: * Returns the length of the named file.
088: *
089: * @param path the requested relative path
090: */
091: public long getLength(String path, HttpServletRequest request,
092: ServletContext app) throws IOException {
093: return getPath(path, request, app).getLength();
094: }
095:
096: /**
097: * Returns the last modified time of the named file.
098: *
099: * @param path the requested relative path
100: */
101: public long getLastModified(String path,
102: HttpServletRequest request, ServletContext app)
103: throws IOException {
104: return getPath(path, request, app).getLastModified();
105: }
106:
107: /**
108: * Returns an iterator over the attribute names.
109: * Each attribute name is of the type AttributeName.
110: *
111: * @param path the requested relative path
112: * @param request the servlet request
113: * @param app the servlet context
114: */
115: public Iterator getAttributeNames(String path,
116: HttpServletRequest request, ServletContext app)
117: throws IOException {
118: return NullIterator.create();
119: }
120:
121: /**
122: * Returns an attribute value.
123: *
124: * @param name the attribute name
125: * @param path the requested relative path
126: * @param request the servlet request
127: * @param app the servlet context
128: */
129: public String getAttribute(AttributeName name, String path,
130: HttpServletRequest request, ServletContext app)
131: throws IOException {
132: return null;
133: }
134:
135: /**
136: * Sets an attribute value.
137: *
138: * @param name the attribute name
139: * @param value the attribute value
140: * @param path the requested relative path
141: * @param request the servlet request
142: * @param app the servlet context
143: *
144: * @return true if the setting was successful
145: */
146: public boolean setAttribute(AttributeName name, String value,
147: String path, HttpServletRequest request, ServletContext app)
148: throws IOException {
149: return false;
150: }
151:
152: /**
153: * Removes an attribute value.
154: *
155: * @param name the attribute name
156: * @param path the requested relative path
157: * @param request the servlet request
158: * @param app the servlet context
159: */
160: public void removeAttribute(String name, String path,
161: HttpServletRequest request, ServletContext app)
162: throws IOException {
163: }
164:
165: /**
166: * Returns a list of the files in the directory.
167: *
168: * @param path the requested relative path
169: */
170: public String[] list(String path, HttpServletRequest request,
171: ServletContext app) throws IOException {
172: return getPath(path, request, app).list();
173: }
174:
175: /**
176: * Creates the named directory.
177: *
178: * @param path the requested relative path
179: *
180: * @return true if the creation succeeded.
181: */
182: public boolean mkdir(String path, HttpServletRequest request,
183: ServletContext app) throws IOException {
184: return getPath(path, request, app).mkdir();
185: }
186:
187: /**
188: * Removes the named directory.
189: *
190: * @param path the requested relative path
191: *
192: * @return true if the remove succeeded.
193: */
194: public boolean rmdir(String path, HttpServletRequest request,
195: ServletContext app) throws IOException {
196: return getPath(path, request, app).remove();
197: }
198:
199: /**
200: * Deletes the file
201: *
202: * @param path the requested relative path
203: *
204: * @return true if the remove succeeded.
205: */
206: public boolean remove(String path, HttpServletRequest request,
207: ServletContext app) throws IOException {
208: return getPath(path, request, app).remove();
209: }
210:
211: /**
212: * Opens an OutputStream for writing.
213: *
214: * @param path the requested relative path
215: *
216: * @return the output stream to the resource.
217: */
218: public OutputStream openWrite(String path,
219: HttpServletRequest request, ServletContext app)
220: throws IOException {
221: return getPath(path, request, app).openWrite();
222: }
223:
224: /**
225: * Opens an InputStream for reading
226: *
227: * @param path the requested relative path
228: *
229: * @return the input stream to the resource.
230: */
231: public InputStream openRead(String path,
232: HttpServletRequest request, ServletContext app)
233: throws IOException {
234: return getPath(path, request, app).openRead();
235: }
236:
237: /**
238: * Returns the underlying path.
239: */
240: protected Path getPath(String path, HttpServletRequest request,
241: ServletContext app) throws IOException {
242: Path appDir = ((Application) app).getAppDir();
243:
244: return appDir.lookup("./" + path);
245: }
246: }
|