package automately.core.file.nio;
import automately.core.file.VirtualFile;
import java.nio.file.attribute.*;
import java.util.Date;
import java.util.LinkedHashSet;
import java.util.Set;
class UserFileAttributes implements BasicFileAttributes, PosixFileAttributes {
public static final Set<PosixFilePermission> DEFAULT_PERMISSIONS;
public static final Set<PosixFilePermission> DEFAULT_PUBLIC_PERMISSIONS;
static {
DEFAULT_PERMISSIONS = new LinkedHashSet<>();
DEFAULT_PERMISSIONS.add(PosixFilePermission.OWNER_READ);
DEFAULT_PERMISSIONS.add(PosixFilePermission.OWNER_EXECUTE);
DEFAULT_PERMISSIONS.add(PosixFilePermission.GROUP_READ);
DEFAULT_PERMISSIONS.add(PosixFilePermission.GROUP_EXECUTE);
DEFAULT_PERMISSIONS.add(PosixFilePermission.OWNER_WRITE);
DEFAULT_PERMISSIONS.add(PosixFilePermission.GROUP_WRITE);
DEFAULT_PUBLIC_PERMISSIONS = new LinkedHashSet<>();
DEFAULT_PUBLIC_PERMISSIONS.add(PosixFilePermission.OWNER_READ);
DEFAULT_PUBLIC_PERMISSIONS.add(PosixFilePermission.OWNER_EXECUTE);
DEFAULT_PUBLIC_PERMISSIONS.add(PosixFilePermission.GROUP_READ);
DEFAULT_PUBLIC_PERMISSIONS.add(PosixFilePermission.GROUP_EXECUTE);
DEFAULT_PUBLIC_PERMISSIONS.add(PosixFilePermission.OWNER_WRITE);
DEFAULT_PUBLIC_PERMISSIONS.add(PosixFilePermission.GROUP_WRITE);
DEFAULT_PUBLIC_PERMISSIONS.add(PosixFilePermission.OTHERS_READ);
DEFAULT_PUBLIC_PERMISSIONS.add(PosixFilePermission.OTHERS_EXECUTE);
}
private final FileTime lastModifiedTime;
private final FileTime creationTime;
private final boolean isDirectory;
private final long size;
private final String fileKey;
private final UserPrincipal userPrincipal;
private final GroupPrincipal groupPrincipal;
private final boolean isPublic;
UserFileAttributes(UserFileSystem fs, VirtualFile file) {
if (file != null) {
lastModifiedTime = FileTime.fromMillis(file.updated.getTime());
creationTime = FileTime.fromMillis(file.created.getTime());
isDirectory = file.isDirectory;
size = file.size;
fileKey = file.token();
isPublic = file.isPublic;
} else {
lastModifiedTime = FileTime.fromMillis(new Date().getTime());
creationTime = FileTime.fromMillis(new Date().getTime());
isDirectory = true;
size = 0;
fileKey = "/";
isPublic = false;
}
String username = fs.getUser().username;
userPrincipal = () -> username;
groupPrincipal = () -> username;
}
@Override
public FileTime lastModifiedTime() {
return lastModifiedTime;
}
@Override
public FileTime lastAccessTime() {
throw new UnsupportedOperationException();
}
@Override
public FileTime creationTime() {
return creationTime;
}
@Override
public boolean isRegularFile() {
return !isDirectory;
}
@Override
public boolean isDirectory() {
return isDirectory;
}
@Override
public boolean isSymbolicLink() {
return false;
}
@Override
public boolean isOther() {
return false;
}
@Override
public long size() {
return size;
}
@Override
public Object fileKey() {
return fileKey;
}
@Override
public UserPrincipal owner() {
return userPrincipal;
}
@Override
public GroupPrincipal group() {
return groupPrincipal;
}
@Override
public Set<PosixFilePermission> permissions() {
if(isPublic){
return DEFAULT_PUBLIC_PERMISSIONS;
}
return DEFAULT_PERMISSIONS;
}
}