1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.vfs2.provider.url;
18
19 import java.net.URI;
20 import java.util.Arrays;
21 import java.util.Collection;
22 import java.util.Collections;
23
24 import org.apache.commons.vfs2.Capability;
25 import org.apache.commons.vfs2.FileName;
26 import org.apache.commons.vfs2.FileObject;
27 import org.apache.commons.vfs2.FileSystem;
28 import org.apache.commons.vfs2.FileSystemConfigBuilder;
29 import org.apache.commons.vfs2.FileSystemException;
30 import org.apache.commons.vfs2.FileSystemOptions;
31 import org.apache.commons.vfs2.provider.AbstractFileProvider;
32
33
34
35
36 public class UrlFileProvider extends AbstractFileProvider {
37
38
39 protected static final Collection<Capability> capabilities = Collections.unmodifiableCollection(
40 Arrays.asList(Capability.READ_CONTENT, Capability.URI, Capability.GET_LAST_MODIFIED));
41
42
43
44
45 public UrlFileProvider() {
46 setFileNameParser(new UrlFileNameParser());
47 }
48
49
50
51
52
53
54
55
56
57
58 @Override
59 public synchronized FileObject findFile(final FileObject baseFile, final String fileUri,
60 final FileSystemOptions fileSystemOptions) throws FileSystemException {
61 try {
62 final URI uri = URI.create(fileUri);
63 final URI rootUri = uri.resolve("/");
64 final String key = this.getClass().getName() + rootUri;
65 FileSystem fs = findFileSystem(key, fileSystemOptions);
66 if (fs == null) {
67 final String extForm = rootUri.toString();
68 final FileName rootName = getContext().parseURI(extForm);
69
70
71 fs = new UrlFileSystem(rootName, fileSystemOptions);
72 addFileSystem(key, fs);
73 }
74 return fs.resolveFile(uri.getPath());
75 } catch (final Exception e) {
76 throw new FileSystemException("vfs.provider.url/badly-formed-uri.error", fileUri, e);
77 }
78 }
79
80 @Override
81 public Collection<Capability> getCapabilities() {
82 return capabilities;
83 }
84
85 @Override
86 public FileSystemConfigBuilder getConfigBuilder() {
87 return org.apache.commons.vfs2.provider.res.ResourceFileSystemConfigBuilder.getInstance();
88 }
89 }