/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.plugin.ij.filesystem;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.vfs.VirtualFile;
import gw.config.CommonServices;
import gw.fs.IDirectory;
import gw.fs.IFile;
import gw.fs.IResource;
import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class IDEADirectory extends IDEAResource implements IDirectory {
public IDEADirectory(VirtualFile dir) {
super(dir);
}
public IDEADirectory(String dir) {
super(dir);
}
@Override
public IDirectory dir(@NotNull String relativePath) {
if (relativePath.startsWith(File.separator)) {
relativePath = relativePath.substring(1);
}
String path = _path + "/" + relativePath.replace(File.separatorChar, '/');
return ((IDEAFileSystem) CommonServices.getFileSystem()).getIDirectory(path);
}
@Override
public IFile file(@NotNull String relativePath) {
if (relativePath.startsWith(File.separator)) {
relativePath = relativePath.substring(1);
}
String path = _path + "/" + relativePath.replace(File.separatorChar, '/');
return ((IDEAFileSystem) CommonServices.getFileSystem()).getIFile(path);
}
@Override
public boolean mkdir() throws IOException {
return create();
}
@NotNull
@Override
public List<? extends IDirectory> listDirs() {
List<IDirectory> result = new ArrayList<>();
if (_virtualFile != null) {
for (VirtualFile child : _virtualFile.getChildren()) {
if (child.isDirectory()) {
result.add(new IDEADirectory(child));
}
}
}
return result;
}
@NotNull
@Override
public List<? extends IFile> listFiles() {
List<IFile> result = new ArrayList<>();
if (_virtualFile != null) {
for (VirtualFile child : _virtualFile.getChildren()) {
if (!child.isDirectory()) {
result.add(new IDEAFile(child));
}
}
}
return result;
}
@Override
public String relativePath(@NotNull IResource resource) {
String path = ((IDEAResource) resource)._path;
int index = _path.length() + 1;
return index > path.length() ? "" : path.substring(index);
}
@Override
public void clearCaches() {
throw new RuntimeException("Not supported");
}
protected VirtualFile create(@NotNull final VirtualFile virtualFile, @NotNull final String name) throws IOException {
final VirtualFile[] result = new VirtualFile[1];
ApplicationManager.getApplication().runWriteAction(new Runnable() {
@Override
public void run() {
try {
result[0] = virtualFile.createChildDirectory(this, name);
} catch (IOException e) {
e.printStackTrace();
}
}
});
return result[0];
}
}