package com.jakewharton.resourcefs;
import java.io.IOException;
import java.net.URI;
import java.nio.file.FileStore;
import java.nio.file.FileSystem;
import java.nio.file.Path;
import java.nio.file.PathMatcher;
import java.nio.file.WatchService;
import java.nio.file.attribute.UserPrincipalLookupService;
import java.nio.file.spi.FileSystemProvider;
import java.util.Collections;
import java.util.Set;
import static java.util.Objects.requireNonNull;
final class ResourceFileSystem extends FileSystem {
private final Iterable<Path> rootDirectories;
private final Iterable<FileStore> fileStores;
private final Set<String> supportedFileAttributeViews;
private final ResourceFileSystemProvider provider;
ResourceFileSystem(ResourceFileSystemProvider provider) {
this.provider = requireNonNull(provider, "provider");
rootDirectories = Collections.<Path>singletonList(new ResourcePath(this, URI.create("/")));
fileStores = Collections.singletonList(provider.fileStore);
supportedFileAttributeViews = Collections.singleton("basic");
}
@Override public FileSystemProvider provider() {
return provider;
}
@Override public void close() throws IOException {
}
@Override public boolean isOpen() {
return true;
}
@Override public boolean isReadOnly() {
return true;
}
@Override public String getSeparator() {
return "/";
}
@Override public Iterable<Path> getRootDirectories() {
return rootDirectories;
}
@Override public Iterable<FileStore> getFileStores() {
return fileStores;
}
@Override public Set<String> supportedFileAttributeViews() {
return supportedFileAttributeViews;
}
@Override public Path getPath(String first, String... more) {
StringBuilder builder = new StringBuilder(first);
for (String m : more) {
builder.append(getSeparator()).append(m);
}
return new ResourcePath(this, URI.create(builder.toString()));
}
@Override public PathMatcher getPathMatcher(String syntaxAndPattern) {
return null; // TODO
}
@Override public UserPrincipalLookupService getUserPrincipalLookupService() {
return null; // TODO
}
@Override public WatchService newWatchService() throws IOException {
return null; // TODO
}
}