--- old/src/jdk.zipfs/share/classes/jdk/nio/zipfs/ZipPath.java 2019-05-21 17:13:39.732554500 +0200
+++ new/src/jdk.zipfs/share/classes/jdk/nio/zipfs/ZipPath.java 2019-05-21 17:13:38.534424200 +0200
@@ -34,11 +34,7 @@
import java.nio.channels.SeekableByteChannel;
import java.nio.file.*;
import java.nio.file.DirectoryStream.Filter;
-import java.nio.file.attribute.BasicFileAttributeView;
-import java.nio.file.attribute.BasicFileAttributes;
-import java.nio.file.attribute.FileAttribute;
-import java.nio.file.attribute.FileAttributeView;
-import java.nio.file.attribute.FileTime;
+import java.nio.file.attribute.*;
import java.util.Arrays;
import java.util.Iterator;
import java.util.Map;
@@ -711,6 +707,12 @@
return (V)new ZipFileAttributeView(this, false);
if (type == ZipFileAttributeView.class)
return (V)new ZipFileAttributeView(this, true);
+ if (zfs.supportPosix) {
+ if (type == PosixFileAttributeView.class)
+ return (V)new ZipPosixFileAttributeView(this, false);
+ if (type == FileOwnerAttributeView.class)
+ return (V)new ZipPosixFileAttributeView(this,true);
+ }
throw new UnsupportedOperationException("view <" + type + "> is not supported");
}
@@ -721,6 +723,12 @@
return new ZipFileAttributeView(this, false);
if ("zip".equals(type))
return new ZipFileAttributeView(this, true);
+ if (zfs.supportPosix) {
+ if ("posix".equals(type))
+ return new ZipPosixFileAttributeView(this, false);
+ if ("owner".equals(type))
+ return new ZipPosixFileAttributeView(this, true);
+ }
throw new UnsupportedOperationException("view <" + type + "> is not supported");
}
@@ -764,10 +772,16 @@
@SuppressWarnings("unchecked") // Cast to A
A readAttributes(Class type) throws IOException {
+ // unconditionally support BasicFileAttributes and ZipFileAttributes
if (type == BasicFileAttributes.class || type == ZipFileAttributes.class) {
return (A)readAttributes();
}
+ // support PosixFileAttributes when activated
+ if (type == PosixFileAttributes.class && zfs.supportPosix) {
+ return (A)readAttributes();
+ }
+
throw new UnsupportedOperationException("Attributes of type " +
type.getName() + " not supported");
}
@@ -794,9 +808,22 @@
zfs.setTimes(getResolvedPath(), mtime, atime, ctime);
}
- Map readAttributes(String attributes, LinkOption... options)
+ void setOwner(UserPrincipal owner) throws IOException {
+ zfs.setOwner(getResolvedPath(), owner);
+ }
+
+ void setPermissions(Set perms)
throws IOException
+ {
+ zfs.setPermissions(getResolvedPath(), perms);
+ }
+ void setGroup(GroupPrincipal group) throws IOException {
+ zfs.setGroup(getResolvedPath(), group);
+ }
+
+ Map readAttributes(String attributes, LinkOption... options)
+ throws IOException
{
String view;
String attrs;
@@ -948,12 +975,14 @@
}
}
if (copyAttrs) {
- BasicFileAttributeView view =
- target.getFileAttributeView(BasicFileAttributeView.class);
+ ZipFileAttributeView view =
+ target.getFileAttributeView(ZipFileAttributeView.class);
try {
view.setTimes(zfas.lastModifiedTime(),
zfas.lastAccessTime(),
zfas.creationTime());
+ // copy permissions
+ view.setPermissions(zfas.storedPermissions().orElse(null));
} catch (IOException x) {
// rollback?
try {