1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.vfs.provider.url;
18
19 import org.apache.commons.vfs.Capability;
20 import org.apache.commons.vfs.FileName;
21 import org.apache.commons.vfs.FileObject;
22 import org.apache.commons.vfs.FileSystem;
23 import org.apache.commons.vfs.FileSystemConfigBuilder;
24 import org.apache.commons.vfs.FileSystemException;
25 import org.apache.commons.vfs.FileSystemOptions;
26 import org.apache.commons.vfs.provider.AbstractFileProvider;
27
28 import java.net.MalformedURLException;
29 import java.net.URL;
30 import java.util.Arrays;
31 import java.util.Collection;
32 import java.util.Collections;
33
34 /***
35 * A file provider backed by Java's URL API.
36 *
37 * @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a>
38 * @version $Revision: 480428 $ $Date: 2006-11-29 07:15:24 +0100 (Mi, 29 Nov 2006) $
39 */
40 public class UrlFileProvider
41 extends AbstractFileProvider
42 {
43 protected final static Collection capabilities = Collections.unmodifiableCollection(Arrays.asList(new Capability[]
44 {
45 Capability.READ_CONTENT,
46 Capability.URI,
47 Capability.GET_LAST_MODIFIED
48 }));
49
50 public UrlFileProvider()
51 {
52 super();
53 setFileNameParser(new UrlFileNameParser());
54 }
55
56 /***
57 * Locates a file object, by absolute URI.
58 */
59 public synchronized FileObject findFile(final FileObject baseFile,
60 final String uri,
61 final FileSystemOptions fileSystemOptions)
62 throws FileSystemException
63 {
64 try
65 {
66 final URL url = new URL(uri);
67
68 URL rootUrl = new URL(url, "/");
69 final String key = this.getClass().getName() + rootUrl.toString();
70 FileSystem fs = findFileSystem(key, fileSystemOptions);
71 if (fs == null)
72 {
73 String extForm = rootUrl.toExternalForm();
74 final FileName rootName =
75 getContext().parseURI(extForm);
76
77
78 fs = new UrlFileSystem(rootName, fileSystemOptions);
79 addFileSystem(key, fs);
80 }
81 return fs.resolveFile(url.getPath());
82 }
83 catch (final MalformedURLException e)
84 {
85 throw new FileSystemException("vfs.provider.url/badly-formed-uri.error", uri, e);
86 }
87 }
88
89 public FileSystemConfigBuilder getConfigBuilder()
90 {
91 return org.apache.commons.vfs.provider.res.ResourceFileSystemConfigBuilder.getInstance();
92 }
93
94 public Collection getCapabilities()
95 {
96 return capabilities;
97 }
98 }