1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.vfs.provider.jar;
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.FileSystemException;
24 import org.apache.commons.vfs.FileSystemOptions;
25 import org.apache.commons.vfs.FileType;
26 import org.apache.commons.vfs.provider.LayeredFileName;
27 import org.apache.commons.vfs.provider.zip.ZipFileProvider;
28
29 import java.util.ArrayList;
30 import java.util.Arrays;
31 import java.util.Collection;
32 import java.util.Collections;
33
34 /***
35 * A file system provider for Jar files. Provides read-only file
36 * systems. This provides access to Jar specific features like Signing and
37 * Manifest Attributes.
38 *
39 * @author <a href="mailto:brian@mmmanager.org">Brian Olsen</a>
40 * @version $Revision: 480428 $ $Date: 2006-11-29 07:15:24 +0100 (Mi, 29 Nov 2006) $
41 */
42 public class JarFileProvider
43 extends ZipFileProvider
44 {
45 final static Collection capabilities;
46
47 static
48 {
49 Collection combined = new ArrayList();
50 combined.addAll(ZipFileProvider.capabilities);
51 combined.addAll(Arrays.asList(new Capability[]
52 {
53 Capability.ATTRIBUTES,
54 Capability.FS_ATTRIBUTES,
55 Capability.SIGNING,
56 Capability.MANIFEST_ATTRIBUTES,
57 Capability.VIRTUAL
58 }));
59 capabilities = Collections.unmodifiableCollection(combined);
60 }
61
62 public JarFileProvider()
63 {
64 super();
65 }
66
67 /***
68 * Creates a layered file system. This method is called if the file system
69 * is not cached.
70 *
71 * @param scheme The URI scheme.
72 * @param file The file to create the file system on top of.
73 * @return The file system.
74 */
75 protected FileSystem doCreateFileSystem(final String scheme,
76 final FileObject file,
77 final FileSystemOptions fileSystemOptions)
78 throws FileSystemException
79 {
80 final FileName name =
81 new LayeredFileName(scheme, file.getName(), FileName.ROOT_PATH, FileType.FOLDER);
82 return new JarFileSystem(name, file, fileSystemOptions);
83 }
84
85 public Collection getCapabilities()
86 {
87 return capabilities;
88 }
89 }