package com.beijunyi.parallelgit.filesystem; import java.io.IOException; import java.nio.file.FileStore; import java.nio.file.attribute.FileAttributeView; import java.nio.file.attribute.FileStoreAttributeView; import javax.annotation.Nonnull; import javax.annotation.Nullable; import com.beijunyi.parallelgit.filesystem.io.GfsFileAttributeView; import com.beijunyi.parallelgit.filesystem.io.RootNode; import org.eclipse.jgit.revwalk.RevCommit; import static com.beijunyi.parallelgit.filesystem.GitFileSystemProvider.GFS; import static com.beijunyi.parallelgit.filesystem.io.RootNode.*; public class GfsFileStore extends FileStore { private final RootNode root; public GfsFileStore(@Nullable RevCommit commit, GfsObjectService objService) throws IOException { root = commit != null ? fromCommit(commit, objService) : newRoot(objService); } @Nonnull @Override public String name() { return GFS; } @Nonnull @Override public String type() { return GFS; } @Override public boolean isReadOnly() { return false; } @Override public long getTotalSpace() { return 0; } @Override public long getUsableSpace() { return 0; } @Override public long getUnallocatedSpace() { return 0; } @Override public boolean supportsFileAttributeView(Class<? extends FileAttributeView> type) { return type.isAssignableFrom(GfsFileAttributeView.Basic.class) || type.isAssignableFrom(GfsFileAttributeView.Posix.class) || type.isAssignableFrom(GfsFileAttributeView.Git.class); } @Override public boolean supportsFileAttributeView(String name) { switch(name) { case GfsFileAttributeView.Basic.BASIC_VIEW: case GfsFileAttributeView.Posix.POSIX_VIEW: case GfsFileAttributeView.Git.GIT_VIEW: return true; default: return false; } } @Nullable @Override public <V extends FileStoreAttributeView> V getFileStoreAttributeView(Class<V> type) { return null; } @Override public Object getAttribute(String attribute) throws IOException { if(attribute.equals("totalSpace")) return getTotalSpace(); if(attribute.equals("usableSpace")) return getUsableSpace(); if(attribute.equals("unallocatedSpace")) return getUnallocatedSpace(); throw new UnsupportedOperationException("'" + attribute + "' not recognized"); } @Nonnull public RootNode getRoot() { return root; } }