package com.github.marschall.memoryfilesystem;
import java.nio.file.attribute.AclFileAttributeView;
import java.nio.file.attribute.BasicFileAttributes;
import java.nio.file.attribute.DosFileAttributeView;
import java.nio.file.attribute.DosFileAttributes;
import java.nio.file.attribute.FileAttributeView;
import java.nio.file.attribute.PosixFileAttributeView;
import java.nio.file.attribute.PosixFileAttributes;
import java.nio.file.attribute.UserDefinedFileAttributeView;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
final class FileAttributeViews {
FileAttributeViews() {
throw new AssertionError("not instantiable");
}
static final String POSIX = "posix";
static final String DOS = "dos";
static final String BASIC = "basic";
static final String ACL = "acl";
static final String USER = "user";
static final String OWNER = "owner";
private static final Set<Class<? extends FileAttributeView>> SUPPORTED_VIEWS;
private static final Set<String> SUPPORTED_VIEW_NAMES;
private static final Map<String, Class<? extends FileAttributeView>> NAME_TO_CLASS_MAP;
private static final Map<Class<? extends FileAttributeView>, String> CLASS_TO_NAME_MAP;
private static final Map<Class<? extends BasicFileAttributes>, String> ATTRIBUTES_TO_VIEW_MAP;
static {
SUPPORTED_VIEWS = new HashSet<Class<? extends FileAttributeView>>(3);
SUPPORTED_VIEWS.add(DosFileAttributeView.class);
SUPPORTED_VIEWS.add(PosixFileAttributeView.class);
SUPPORTED_VIEWS.add(UserDefinedFileAttributeView.class);
SUPPORTED_VIEW_NAMES = new HashSet<>(4);
SUPPORTED_VIEW_NAMES.add(POSIX);
SUPPORTED_VIEW_NAMES.add(DOS);
SUPPORTED_VIEW_NAMES.add(USER);
SUPPORTED_VIEW_NAMES.add(ACL);
CLASS_TO_NAME_MAP = new HashMap<>(4);
CLASS_TO_NAME_MAP.put(PosixFileAttributeView.class, POSIX);
CLASS_TO_NAME_MAP.put(DosFileAttributeView.class, DOS);
CLASS_TO_NAME_MAP.put(UserDefinedFileAttributeView.class, USER);
CLASS_TO_NAME_MAP.put(AclFileAttributeView.class, ACL);
NAME_TO_CLASS_MAP = new HashMap<>(4);
NAME_TO_CLASS_MAP.put(POSIX, PosixFileAttributeView.class);
NAME_TO_CLASS_MAP.put(DOS, DosFileAttributeView.class);
NAME_TO_CLASS_MAP.put(USER, UserDefinedFileAttributeView.class);
NAME_TO_CLASS_MAP.put(ACL, AclFileAttributeView.class);
ATTRIBUTES_TO_VIEW_MAP = new HashMap<>(2);
ATTRIBUTES_TO_VIEW_MAP.put(DosFileAttributes.class, DOS);
ATTRIBUTES_TO_VIEW_MAP.put(PosixFileAttributes.class, POSIX);
}
static boolean isSupported(Class<? extends FileAttributeView> clazz) {
return SUPPORTED_VIEWS.contains(clazz);
}
static boolean isSupported(String name) {
return SUPPORTED_VIEW_NAMES.contains(name);
}
static Class<? extends FileAttributeView> mapAttributeViewName(String name) {
return NAME_TO_CLASS_MAP.get(name);
}
static String mapAttributeView(Class<? extends FileAttributeView> clazz) {
return CLASS_TO_NAME_MAP.get(clazz);
}
static String mapFileAttributes(Class<? extends BasicFileAttributes> clazz) {
return ATTRIBUTES_TO_VIEW_MAP.get(clazz);
}
}