1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.vfs2.provider.temp;
18
19 import java.io.File;
20 import java.util.Collection;
21
22 import org.apache.commons.vfs2.Capability;
23 import org.apache.commons.vfs2.FileName;
24 import org.apache.commons.vfs2.FileObject;
25 import org.apache.commons.vfs2.FileSystem;
26 import org.apache.commons.vfs2.FileSystemException;
27 import org.apache.commons.vfs2.FileSystemOptions;
28 import org.apache.commons.vfs2.provider.AbstractFileProvider;
29 import org.apache.commons.vfs2.provider.UriParser;
30 import org.apache.commons.vfs2.provider.local.DefaultLocalFileProvider;
31 import org.apache.commons.vfs2.provider.local.LocalFileSystem;
32
33
34
35
36 public class TemporaryFileProvider extends AbstractFileProvider implements Comparable<Object> {
37
38 private File rootFile;
39
40
41
42
43
44
45
46
47
48
49
50 public TemporaryFileProvider() {
51 }
52
53
54
55
56
57
58 public TemporaryFileProvider(final File rootFile) {
59 this();
60 this.rootFile = rootFile;
61 }
62
63 @Override
64 public int compareTo(final Object o) {
65 final int h1 = hashCode();
66 final int h2 = o.hashCode();
67 return Integer.compare(h1, h2);
68 }
69
70
71
72
73
74
75
76
77
78
79 @Override
80 public synchronized FileObject findFile(final FileObject baseFile, final String uri,
81 final FileSystemOptions fileSystemOptions) throws FileSystemException {
82
83 final StringBuilder buffer = new StringBuilder(uri);
84 final String scheme = UriParser.extractScheme(getContext().getFileSystemManager().getSchemes(), uri, buffer);
85 UriParser.fixSeparators(buffer);
86 UriParser.normalisePath(buffer);
87 final String path = buffer.toString();
88
89
90
91 FileSystem filesystem = findFileSystem(this, fileSystemOptions);
92 if (filesystem == null) {
93 if (rootFile == null) {
94 rootFile = getContext().getTemporaryFileStore().allocateFile("tempfs");
95 }
96 final FileName rootName = getContext().parseURI(scheme + ":" + FileName.ROOT_PATH);
97
98
99 filesystem = new LocalFileSystem(rootName, rootFile.getAbsolutePath(), fileSystemOptions);
100 addFileSystem(this, filesystem);
101 }
102
103
104 return filesystem.resolveFile(path);
105 }
106
107 @Override
108 public Collection<Capability> getCapabilities() {
109 return DefaultLocalFileProvider.capabilities;
110 }
111 }