< 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 >