< prev index next >

src/jdk.zipfs/share/classes/jdk/nio/zipfs/ZipFileAttributeView.java

Print this page
rev 54963 : 8213031: (zipfs) Add support for POSIX file permissions

*** 25,43 **** package jdk.nio.zipfs; import java.io.IOException; import java.nio.file.attribute.BasicFileAttributeView; import java.nio.file.attribute.FileTime; import java.util.LinkedHashMap; import java.util.Map; /** * @author Xueming Shen, Rajendra Gutupalli, Jaya Hangal */ class ZipFileAttributeView implements BasicFileAttributeView { ! private enum AttrID { size, creationTime, lastAccessTime, lastModifiedTime, isDirectory, --- 25,46 ---- package jdk.nio.zipfs; import java.io.IOException; import java.nio.file.attribute.BasicFileAttributeView; + import java.nio.file.attribute.BasicFileAttributes; import java.nio.file.attribute.FileTime; + import java.nio.file.attribute.PosixFilePermission; import java.util.LinkedHashMap; import java.util.Map; + import java.util.Set; /** * @author Xueming Shen, Rajendra Gutupalli, Jaya Hangal */ class ZipFileAttributeView implements BasicFileAttributeView { ! static enum AttrID { size, creationTime, lastAccessTime, lastModifiedTime, isDirectory,
*** 45,58 **** isSymbolicLink, isOther, fileKey, compressedSize, crc, ! method } ! private final ZipPath path; private final boolean isZipView; ZipFileAttributeView(ZipPath path, boolean isZipView) { this.path = path; this.isZipView = isZipView; --- 48,64 ---- isSymbolicLink, isOther, fileKey, compressedSize, crc, ! method, ! owner, ! group, ! permissions } ! final ZipPath path; private final boolean isZipView; ZipFileAttributeView(ZipPath path, boolean isZipView) { this.path = path; this.isZipView = isZipView;
*** 62,72 **** public String name() { return isZipView ? "zip" : "basic"; } @Override ! public ZipFileAttributes readAttributes() throws IOException { return path.readAttributes(); } @Override public void setTimes(FileTime lastModifiedTime, --- 68,78 ---- public String name() { return isZipView ? "zip" : "basic"; } @Override ! public BasicFileAttributes readAttributes() throws IOException { return path.readAttributes(); } @Override public void setTimes(FileTime lastModifiedTime,
*** 75,104 **** throws IOException { path.setTimes(lastModifiedTime, lastAccessTime, createTime); } void setAttribute(String attribute, Object value) throws IOException { try { if (AttrID.valueOf(attribute) == AttrID.lastModifiedTime) setTimes((FileTime)value, null, null); if (AttrID.valueOf(attribute) == AttrID.lastAccessTime) setTimes(null, (FileTime)value, null); if (AttrID.valueOf(attribute) == AttrID.creationTime) setTimes(null, null, (FileTime)value); } catch (IllegalArgumentException x) { throw new UnsupportedOperationException("'" + attribute + "' is unknown or read-only attribute"); } } Map<String, Object> readAttributes(String attributes) throws IOException { ! ZipFileAttributes zfas = readAttributes(); LinkedHashMap<String, Object> map = new LinkedHashMap<>(); if ("*".equals(attributes)) { for (AttrID id : AttrID.values()) { try { map.put(id.name(), attribute(id, zfas)); --- 81,117 ---- throws IOException { path.setTimes(lastModifiedTime, lastAccessTime, createTime); } + public void setPermissions(Set<PosixFilePermission> perms) throws IOException { + path.setPermissions(perms); + } + + @SuppressWarnings("unchecked") void setAttribute(String attribute, Object value) throws IOException { try { if (AttrID.valueOf(attribute) == AttrID.lastModifiedTime) setTimes((FileTime)value, null, null); if (AttrID.valueOf(attribute) == AttrID.lastAccessTime) setTimes(null, (FileTime)value, null); if (AttrID.valueOf(attribute) == AttrID.creationTime) setTimes(null, null, (FileTime)value); + if (AttrID.valueOf(attribute) == AttrID.permissions) + setPermissions((Set<PosixFilePermission>)value); } catch (IllegalArgumentException x) { throw new UnsupportedOperationException("'" + attribute + "' is unknown or read-only attribute"); } } Map<String, Object> readAttributes(String attributes) throws IOException { ! ZipFileAttributes zfas = (ZipFileAttributes)readAttributes(); LinkedHashMap<String, Object> map = new LinkedHashMap<>(); if ("*".equals(attributes)) { for (AttrID id : AttrID.values()) { try { map.put(id.name(), attribute(id, zfas));
*** 113,123 **** } } return map; } ! private Object attribute(AttrID id, ZipFileAttributes zfas) { switch (id) { case size: return zfas.size(); case creationTime: return zfas.creationTime(); --- 126,136 ---- } } return map; } ! Object attribute(AttrID id, ZipFileAttributes zfas) { switch (id) { case size: return zfas.size(); case creationTime: return zfas.creationTime();
*** 145,154 **** --- 158,172 ---- break; case method: if (isZipView) return zfas.method(); break; + case permissions: + if (isZipView) { + return zfas.storedPermissions().orElse(null); + } + break; default: break; } return null; }
< prev index next >