1 /* 2 * Copyright (c) 2006-2007 Creative Sphere Limited. 3 * All rights reserved. This program and the accompanying materials 4 * are made available under the terms of the Eclipse Public License v1.0 5 * which accompanies this distribution, and is available at 6 * http://www.eclipse.org/legal/epl-v10.html 7 * 8 * Contributors: 9 * 10 * Creative Sphere - initial API and implementation 11 * 12 */ 13 package org.abstracthorizon.danube.webdav; 14 15 import org.abstracthorizon.danube.webdav.lock.LockingMechanism; 16 import org.abstracthorizon.danube.webdav.util.NamespacesProvider; 17 import org.abstracthorizon.danube.webdav.xml.dav.request.properties.RequestProperty; 18 import org.abstracthorizon.danube.webdav.xml.dav.response.properties.ResponseProperty; 19 20 import java.io.File; 21 import java.io.IOException; 22 import java.io.InputStream; 23 import java.io.OutputStream; 24 25 /** 26 * This is resource adapter interface that simplifies 27 * access to resource from WebDAV handler 28 * 29 * @author Daniel Sendula 30 */ 31 public interface ResourceAdapter { 32 33 /** 34 * <p> 35 * Obtains resource object. It is supposed to be resource 36 * itself or an proxy as {@link File} is. 37 * </p> 38 * <p> 39 * If this method returns <code>null</code> then rest of the method 40 * relying on the resource must be able to deal with it since 41 * this class users might not care what the value is. 42 * </p> 43 * 44 * @param path path to the resource 45 * @return resource 46 */ 47 Object findResource(String path); 48 49 /** 50 * Returns parent resource for given resource. 51 * 52 * 53 * @param resource existing resource 54 * @return parent resource or <code>null</code> if resource is already root of the hierarchy 55 */ 56 Object findParentResource(Object resource); 57 58 /** 59 * Returns resource's length or -1 if unknown 60 * @param resource resource 61 * @return resource's length 62 */ 63 long resourceLength(Object resource); 64 65 /** 66 * Returns when resource was last modified or -1 if unknown 67 * @param resource resource 68 * @return resource's last modified timestamp 69 */ 70 long resourceLastModified(Object resource); 71 72 /** 73 * Returns when resource was created or -1 if unknown 74 * @param resource resource 75 * @return resource's created timestamp 76 */ 77 long resourceCreated(Object resource); 78 79 /** 80 * Returns resource name 81 * @param resource resource name 82 * @return resource name 83 */ 84 String getResourceName(Object resource); 85 86 /** 87 * Returns resource ETag (as specified in RFC-2616) 88 * @param resource resource 89 * @return etag 90 */ 91 String getResourceETag(Object resource); 92 93 /** 94 * Returns <code>true</code> if resource exists 95 * @param resource resource 96 * @return <code>true</code> if resource exists 97 */ 98 boolean exists(Object resource); 99 100 /** 101 * Returns <code>true</code> if resource is a collection 102 * @param resource resource 103 * @return <code>true</code> if resource is a collection 104 */ 105 boolean isCollection(Object resource); 106 107 /** 108 * Deletes resource 109 * 110 * @param resource resource 111 * 112 * @throws IOException thrown if there was a problem deleting the resource 113 */ 114 void delete(Object resource) throws IOException; 115 116 /** 117 * Makes a collection 118 * 119 * @param resource resource that identifies collection 120 * @throws IOException thrown if there was a problem while creating the collection 121 */ 122 void makeCollection(Object resource) throws IOException; 123 124 /** 125 * Copies the resource to given destination. 126 * 127 * @param source source resource 128 * @param destination destination resource 129 * @param recursive will it perform deep copy or not 130 * @throws IOException thrown if there is a problem with copying. 131 */ 132 void copy(Object source, Object destination, boolean recursive) throws IOException; 133 134 /** 135 * Noves the resource to given destination 136 * @param source source 137 * @param destination destination 138 * @throws IOException thrown if moving failed 139 */ 140 void move(Object source, Object destination) throws IOException; 141 142 /** 143 * Returns collection elements for given resource 144 * 145 * @param resource resource 146 * @return collection elements or <code>null</code> if there is no elemetns or resource is not a colleciton 147 */ 148 Object[] collectionElements(Object resource); 149 150 // TODO Refactor this 151 ResponseProperty[] getDefaultResponseProperties(Object resource); 152 153 // TODO Refactor this 154 RequestProperty[] getDefaultRequestProperties(Object resource); 155 156 /** 157 * Returns input stream of a resource 158 * 159 * @param resource resource 160 * @return input stream or <code>null</code> if not supported 161 * 162 * @throws IOException thrown if there is a problem returning the input stream 163 */ 164 InputStream getInputStream(Object resource) throws IOException; 165 166 /** 167 * Returns input stream of a resource's range 168 * 169 * @param resource resource 170 * @param from from offset 171 * @param length amount of bytes to be trasmitted 172 * @return input stream or <code>null</code> if not supported 173 * 174 * @throws IOException thrown if there is a problem returning the input stream 175 */ 176 InputStream getInpusStream(Object resource, long from, long length) throws IOException; 177 178 /** 179 * Returns output stream of a resource. It creates new resource or overwrites 180 * existing. 181 * 182 * @param resource resource 183 * @return output stream or <code>null</code> if not supported 184 * 185 * @throws IOException thrown if there is a problem creating new resource or replaying existing 186 */ 187 OutputStream getOutputStream(Object resource) throws IOException; 188 189 /** 190 * Returns output stream of a resource. It creates new resource or overwrites 191 * existing. Given range specifies that only part of the resource is going to be supplied. 192 * 193 * @param resource resource 194 * @param from from offset 195 * @param length number of bytes to be trasmitted 196 * @return output stream or <code>null</code> if not supported 197 * 198 * @throws IOException thrown if there is a problem creating new resource or replaying existing 199 */ 200 OutputStream getOutputStream(Object resource, long from, long length) throws IOException; 201 202 // TODO - is this right place for the provider? 203 /** 204 * Returns namespace privider 205 * @return namespace provider 206 */ 207 NamespacesProvider getNamespacesProvider(); 208 209 // TODO - re-design obtaining locking mechanism so it doesn't have to be supplied by the adapter 210 /** 211 * Returns locking mechanism 212 * @return locking mechanism 213 */ 214 LockingMechanism getLockingMechanism(); 215 }