1 /* 2 * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 8 * - Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 11 * - Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 15 * - Neither the name of Oracle nor the names of its 16 * contributors may be used to endorse or promote products derived 17 * from this software without specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS 20 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 21 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 26 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 27 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 28 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 29 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 */ 31 32 package com.sun.nio.zipfs; 33 34 import java.io.IOException; 35 import java.nio.file.Files; 36 import java.nio.file.FileStore; 37 import java.nio.file.FileSystems; 38 import java.nio.file.Path; 39 import java.nio.file.attribute.BasicFileAttributes; 40 import java.nio.file.attribute.FileAttributeView; 41 import java.nio.file.attribute.FileStoreAttributeView; 42 import java.nio.file.attribute.BasicFileAttributeView; 43 import java.util.Formatter; 44 45 /* 46 * 47 * @author Xueming Shen, Rajendra Gutupalli, Jaya Hangal 48 */ 49 50 public class ZipFileStore extends FileStore { 51 52 private final ZipFileSystem zfs; 53 54 ZipFileStore(ZipPath zpath) { 55 this.zfs = (ZipFileSystem)zpath.getFileSystem(); 56 } 57 58 @Override 59 public String name() { 60 return zfs.toString() + "/"; 61 } 62 63 @Override 64 public String type() { 65 return "zipfs"; 66 } 67 68 @Override 69 public boolean isReadOnly() { 70 return zfs.isReadOnly(); 71 } 72 73 @Override 74 public boolean supportsFileAttributeView(Class<? extends FileAttributeView> type) { 75 return (type == BasicFileAttributeView.class || 76 type == ZipFileAttributeView.class); 77 } 78 79 @Override 80 public boolean supportsFileAttributeView(String name) { 81 return name.equals("basic") || name.equals("zip"); 82 } 83 84 @Override 85 @SuppressWarnings("unchecked") 86 public <V extends FileStoreAttributeView> V getFileStoreAttributeView(Class<V> type) { 87 if (type == null) 88 throw new NullPointerException(); 89 return (V)null; 90 } 91 92 @Override 93 public long getTotalSpace() throws IOException { 94 return new ZipFileStoreAttributes(this).totalSpace(); 95 } 96 97 @Override 98 public long getUsableSpace() throws IOException { 99 return new ZipFileStoreAttributes(this).usableSpace(); 100 } 101 102 @Override 103 public long getUnallocatedSpace() throws IOException { 104 return new ZipFileStoreAttributes(this).unallocatedSpace(); 105 } 106 107 @Override 108 public Object getAttribute(String attribute) throws IOException { 109 if (attribute.equals("totalSpace")) 110 return getTotalSpace(); 111 if (attribute.equals("usableSpace")) 112 return getUsableSpace(); 113 if (attribute.equals("unallocatedSpace")) 114 return getUnallocatedSpace(); 115 throw new UnsupportedOperationException("does not support the given attribute"); 116 } 117 118 private static class ZipFileStoreAttributes { 119 final FileStore fstore; 120 final long size; 121 122 public ZipFileStoreAttributes(ZipFileStore fileStore) 123 throws IOException 124 { 125 Path path = FileSystems.getDefault().getPath(fileStore.name()); 126 this.size = Files.size(path); 127 this.fstore = Files.getFileStore(path); 128 } 129 130 public long totalSpace() { 131 return size; 132 } 133 134 public long usableSpace() throws IOException { 135 if (!fstore.isReadOnly()) 136 return fstore.getUsableSpace(); 137 return 0; 138 } 139 140 public long unallocatedSpace() throws IOException { 141 if (!fstore.isReadOnly()) 142 return fstore.getUnallocatedSpace(); 143 return 0; 144 } 145 } 146 }