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.zip;
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.AbstractLayeredFileProvider;
27: import org.apache.commons.vfs.provider.FileProvider;
28: import org.apache.commons.vfs.provider.LayeredFileName;
29:
30: import java.util.Arrays;
31: import java.util.Collection;
32: import java.util.Collections;
33:
34: /**
35: * A file system provider for Zip files. Provides read-only file systems.
36: *
37: * @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a>
38: * @version $Revision: 480428 $ $Date: 2006-11-28 22:15:24 -0800 (Tue, 28 Nov 2006) $
39: */
40: public class ZipFileProvider extends AbstractLayeredFileProvider
41: implements FileProvider {
42: protected final static Collection capabilities = Collections
43: .unmodifiableCollection(Arrays.asList(new Capability[] {
44: Capability.GET_LAST_MODIFIED, Capability.GET_TYPE,
45: Capability.LIST_CHILDREN, Capability.READ_CONTENT,
46: Capability.URI, Capability.COMPRESS,
47: Capability.VIRTUAL }));
48:
49: public ZipFileProvider() {
50: super ();
51: }
52:
53: /**
54: * Creates a layered file system. This method is called if the file system
55: * is not cached.
56: *
57: * @param scheme The URI scheme.
58: * @param file The file to create the file system on top of.
59: * @return The file system.
60: */
61: protected FileSystem doCreateFileSystem(final String scheme,
62: final FileObject file,
63: final FileSystemOptions fileSystemOptions)
64: throws FileSystemException {
65: final FileName rootName = new LayeredFileName(scheme, file
66: .getName(), FileName.ROOT_PATH, FileType.FOLDER);
67: return new ZipFileSystem(rootName, file, fileSystemOptions);
68: }
69:
70: public Collection getCapabilities() {
71: return capabilities;
72: }
73: }
|