01: /*
02: * Licensed to the Apache Software Foundation (ASF) under one or more
03: * contributor license agreements. See the NOTICE file distributed with
04: * this work for additional information regarding copyright ownership.
05: * The ASF licenses this file to You under the Apache License, Version 2.0
06: * (the "License"); you may not use this file except in compliance with
07: * the License. You may obtain a copy of the License at
08: *
09: * http://www.apache.org/licenses/LICENSE-2.0
10: *
11: * Unless required by applicable law or agreed to in writing, software
12: * distributed under the License is distributed on an "AS IS" BASIS,
13: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14: * See the License for the specific language governing permissions and
15: * limitations under the License.
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-28 22:15:24 -0800 (Tue, 28 Nov 2006) $
41: */
42: public class JarFileProvider extends ZipFileProvider {
43: final static Collection capabilities;
44:
45: static {
46: Collection combined = new ArrayList();
47: combined.addAll(ZipFileProvider.capabilities);
48: combined.addAll(Arrays.asList(new Capability[] {
49: Capability.ATTRIBUTES, Capability.FS_ATTRIBUTES,
50: Capability.SIGNING, Capability.MANIFEST_ATTRIBUTES,
51: Capability.VIRTUAL }));
52: capabilities = Collections.unmodifiableCollection(combined);
53: }
54:
55: public JarFileProvider() {
56: super ();
57: }
58:
59: /**
60: * Creates a layered file system. This method is called if the file system
61: * is not cached.
62: *
63: * @param scheme The URI scheme.
64: * @param file The file to create the file system on top of.
65: * @return The file system.
66: */
67: protected FileSystem doCreateFileSystem(final String scheme,
68: final FileObject file,
69: final FileSystemOptions fileSystemOptions)
70: throws FileSystemException {
71: final FileName name = new LayeredFileName(scheme, file
72: .getName(), FileName.ROOT_PATH, FileType.FOLDER);
73: return new JarFileSystem(name, file, fileSystemOptions);
74: }
75:
76: public Collection getCapabilities() {
77: return capabilities;
78: }
79: }
|