Mercurial Hosting > luan
comparison src/org/eclipse/jetty/util/resource/URLResource.java @ 802:3428c60d7cfc
replace jetty jars with source
| author | Franklin Schmidt <fschmidt@gmail.com> |
|---|---|
| date | Wed, 07 Sep 2016 21:15:48 -0600 |
| parents | |
| children | 8e9db0bbf4f9 |
comparison
equal
deleted
inserted
replaced
| 801:6a21393191c1 | 802:3428c60d7cfc |
|---|---|
| 1 // | |
| 2 // ======================================================================== | |
| 3 // Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd. | |
| 4 // ------------------------------------------------------------------------ | |
| 5 // All rights reserved. This program and the accompanying materials | |
| 6 // are made available under the terms of the Eclipse Public License v1.0 | |
| 7 // and Apache License v2.0 which accompanies this distribution. | |
| 8 // | |
| 9 // The Eclipse Public License is available at | |
| 10 // http://www.eclipse.org/legal/epl-v10.html | |
| 11 // | |
| 12 // The Apache License v2.0 is available at | |
| 13 // http://www.opensource.org/licenses/apache2.0.php | |
| 14 // | |
| 15 // You may elect to redistribute this code under either of these licenses. | |
| 16 // ======================================================================== | |
| 17 // | |
| 18 | |
| 19 package org.eclipse.jetty.util.resource; | |
| 20 | |
| 21 import java.io.File; | |
| 22 import java.io.IOException; | |
| 23 import java.io.InputStream; | |
| 24 import java.io.OutputStream; | |
| 25 import java.net.MalformedURLException; | |
| 26 import java.net.URL; | |
| 27 import java.net.URLConnection; | |
| 28 import java.security.Permission; | |
| 29 | |
| 30 import org.eclipse.jetty.util.URIUtil; | |
| 31 import org.eclipse.jetty.util.log.Log; | |
| 32 import org.eclipse.jetty.util.log.Logger; | |
| 33 | |
| 34 /* ------------------------------------------------------------ */ | |
| 35 /** Abstract resource class. | |
| 36 */ | |
| 37 public class URLResource extends Resource | |
| 38 { | |
| 39 private static final Logger LOG = Log.getLogger(URLResource.class); | |
| 40 protected URL _url; | |
| 41 protected String _urlString; | |
| 42 | |
| 43 protected URLConnection _connection; | |
| 44 protected InputStream _in=null; | |
| 45 transient boolean _useCaches = Resource.__defaultUseCaches; | |
| 46 | |
| 47 /* ------------------------------------------------------------ */ | |
| 48 protected URLResource(URL url, URLConnection connection) | |
| 49 { | |
| 50 _url = url; | |
| 51 _urlString=_url.toString(); | |
| 52 _connection=connection; | |
| 53 } | |
| 54 | |
| 55 /* ------------------------------------------------------------ */ | |
| 56 protected URLResource (URL url, URLConnection connection, boolean useCaches) | |
| 57 { | |
| 58 this (url, connection); | |
| 59 _useCaches = useCaches; | |
| 60 } | |
| 61 | |
| 62 /* ------------------------------------------------------------ */ | |
| 63 protected synchronized boolean checkConnection() | |
| 64 { | |
| 65 if (_connection==null) | |
| 66 { | |
| 67 try{ | |
| 68 _connection=_url.openConnection(); | |
| 69 _connection.setUseCaches(_useCaches); | |
| 70 } | |
| 71 catch(IOException e) | |
| 72 { | |
| 73 LOG.ignore(e); | |
| 74 } | |
| 75 } | |
| 76 return _connection!=null; | |
| 77 } | |
| 78 | |
| 79 /* ------------------------------------------------------------ */ | |
| 80 /** Release any resources held by the resource. | |
| 81 */ | |
| 82 @Override | |
| 83 public synchronized void release() | |
| 84 { | |
| 85 if (_in!=null) | |
| 86 { | |
| 87 try{_in.close();}catch(IOException e){LOG.ignore(e);} | |
| 88 _in=null; | |
| 89 } | |
| 90 | |
| 91 if (_connection!=null) | |
| 92 _connection=null; | |
| 93 } | |
| 94 | |
| 95 /* ------------------------------------------------------------ */ | |
| 96 /** | |
| 97 * Returns true if the represented resource exists. | |
| 98 */ | |
| 99 @Override | |
| 100 public boolean exists() | |
| 101 { | |
| 102 try | |
| 103 { | |
| 104 synchronized(this) | |
| 105 { | |
| 106 if (checkConnection() && _in==null ) | |
| 107 _in = _connection.getInputStream(); | |
| 108 } | |
| 109 } | |
| 110 catch (IOException e) | |
| 111 { | |
| 112 LOG.ignore(e); | |
| 113 } | |
| 114 return _in!=null; | |
| 115 } | |
| 116 | |
| 117 /* ------------------------------------------------------------ */ | |
| 118 /** | |
| 119 * Returns true if the respresenetd resource is a container/directory. | |
| 120 * If the resource is not a file, resources ending with "/" are | |
| 121 * considered directories. | |
| 122 */ | |
| 123 @Override | |
| 124 public boolean isDirectory() | |
| 125 { | |
| 126 return exists() && _url.toString().endsWith("/"); | |
| 127 } | |
| 128 | |
| 129 | |
| 130 /* ------------------------------------------------------------ */ | |
| 131 /** | |
| 132 * Returns the last modified time | |
| 133 */ | |
| 134 @Override | |
| 135 public long lastModified() | |
| 136 { | |
| 137 if (checkConnection()) | |
| 138 return _connection.getLastModified(); | |
| 139 return -1; | |
| 140 } | |
| 141 | |
| 142 | |
| 143 /* ------------------------------------------------------------ */ | |
| 144 /** | |
| 145 * Return the length of the resource | |
| 146 */ | |
| 147 @Override | |
| 148 public long length() | |
| 149 { | |
| 150 if (checkConnection()) | |
| 151 return _connection.getContentLength(); | |
| 152 return -1; | |
| 153 } | |
| 154 | |
| 155 /* ------------------------------------------------------------ */ | |
| 156 /** | |
| 157 * Returns an URL representing the given resource | |
| 158 */ | |
| 159 @Override | |
| 160 public URL getURL() | |
| 161 { | |
| 162 return _url; | |
| 163 } | |
| 164 | |
| 165 /* ------------------------------------------------------------ */ | |
| 166 /** | |
| 167 * Returns an File representing the given resource or NULL if this | |
| 168 * is not possible. | |
| 169 */ | |
| 170 @Override | |
| 171 public File getFile() | |
| 172 throws IOException | |
| 173 { | |
| 174 // Try the permission hack | |
| 175 if (checkConnection()) | |
| 176 { | |
| 177 Permission perm = _connection.getPermission(); | |
| 178 if (perm instanceof java.io.FilePermission) | |
| 179 return new File(perm.getName()); | |
| 180 } | |
| 181 | |
| 182 // Try the URL file arg | |
| 183 try {return new File(_url.getFile());} | |
| 184 catch(Exception e) {LOG.ignore(e);} | |
| 185 | |
| 186 // Don't know the file | |
| 187 return null; | |
| 188 } | |
| 189 | |
| 190 /* ------------------------------------------------------------ */ | |
| 191 /** | |
| 192 * Returns the name of the resource | |
| 193 */ | |
| 194 @Override | |
| 195 public String getName() | |
| 196 { | |
| 197 return _url.toExternalForm(); | |
| 198 } | |
| 199 | |
| 200 /* ------------------------------------------------------------ */ | |
| 201 /** | |
| 202 * Returns an input stream to the resource | |
| 203 */ | |
| 204 @Override | |
| 205 public synchronized InputStream getInputStream() | |
| 206 throws java.io.IOException | |
| 207 { | |
| 208 if (!checkConnection()) | |
| 209 throw new IOException( "Invalid resource"); | |
| 210 | |
| 211 try | |
| 212 { | |
| 213 if( _in != null) | |
| 214 { | |
| 215 InputStream in = _in; | |
| 216 _in=null; | |
| 217 return in; | |
| 218 } | |
| 219 return _connection.getInputStream(); | |
| 220 } | |
| 221 finally | |
| 222 { | |
| 223 _connection=null; | |
| 224 } | |
| 225 } | |
| 226 | |
| 227 | |
| 228 /* ------------------------------------------------------------ */ | |
| 229 /** | |
| 230 * Returns an output stream to the resource | |
| 231 */ | |
| 232 @Override | |
| 233 public OutputStream getOutputStream() | |
| 234 throws java.io.IOException, SecurityException | |
| 235 { | |
| 236 throw new IOException( "Output not supported"); | |
| 237 } | |
| 238 | |
| 239 /* ------------------------------------------------------------ */ | |
| 240 /** | |
| 241 * Deletes the given resource | |
| 242 */ | |
| 243 @Override | |
| 244 public boolean delete() | |
| 245 throws SecurityException | |
| 246 { | |
| 247 throw new SecurityException( "Delete not supported"); | |
| 248 } | |
| 249 | |
| 250 /* ------------------------------------------------------------ */ | |
| 251 /** | |
| 252 * Rename the given resource | |
| 253 */ | |
| 254 @Override | |
| 255 public boolean renameTo( Resource dest) | |
| 256 throws SecurityException | |
| 257 { | |
| 258 throw new SecurityException( "RenameTo not supported"); | |
| 259 } | |
| 260 | |
| 261 /* ------------------------------------------------------------ */ | |
| 262 /** | |
| 263 * Returns a list of resource names contained in the given resource | |
| 264 */ | |
| 265 @Override | |
| 266 public String[] list() | |
| 267 { | |
| 268 return null; | |
| 269 } | |
| 270 | |
| 271 /* ------------------------------------------------------------ */ | |
| 272 /** | |
| 273 * Returns the resource contained inside the current resource with the | |
| 274 * given name | |
| 275 */ | |
| 276 @Override | |
| 277 public Resource addPath(String path) | |
| 278 throws IOException,MalformedURLException | |
| 279 { | |
| 280 if (path==null) | |
| 281 return null; | |
| 282 | |
| 283 path = URIUtil.canonicalPath(path); | |
| 284 | |
| 285 return newResource(URIUtil.addPaths(_url.toExternalForm(),path)); | |
| 286 } | |
| 287 | |
| 288 /* ------------------------------------------------------------ */ | |
| 289 @Override | |
| 290 public String toString() | |
| 291 { | |
| 292 return _urlString; | |
| 293 } | |
| 294 | |
| 295 /* ------------------------------------------------------------ */ | |
| 296 @Override | |
| 297 public int hashCode() | |
| 298 { | |
| 299 return _urlString.hashCode(); | |
| 300 } | |
| 301 | |
| 302 /* ------------------------------------------------------------ */ | |
| 303 @Override | |
| 304 public boolean equals( Object o) | |
| 305 { | |
| 306 return o instanceof URLResource && _urlString.equals(((URLResource)o)._urlString); | |
| 307 } | |
| 308 | |
| 309 /* ------------------------------------------------------------ */ | |
| 310 public boolean getUseCaches () | |
| 311 { | |
| 312 return _useCaches; | |
| 313 } | |
| 314 | |
| 315 /* ------------------------------------------------------------ */ | |
| 316 @Override | |
| 317 public boolean isContainedIn (Resource containingResource) throws MalformedURLException | |
| 318 { | |
| 319 return false; //TODO check this! | |
| 320 } | |
| 321 } |
