blob: c3744fb3ea7867cbd3595a019697933bbdf1fdd0 [file] [log] [blame]
package org.jetbrains.android.uipreview;
import com.android.io.IAbstractFile;
import com.android.io.IAbstractFolder;
import com.android.io.IAbstractResource;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.ArrayUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
/**
* @author Eugene.Kudelevsky
*/
public class VirtualFolderWrapper implements IAbstractFolder {
private final Project myProject;
private final VirtualFile myFolder;
public VirtualFolderWrapper(@NotNull Project project, @NotNull VirtualFile folder) {
myProject = project;
myFolder = folder;
}
@Override
public boolean hasFile(String name) {
return myFolder.findChild(name) != null;
}
@Nullable
@Override
public IAbstractFile getFile(String name) {
final VirtualFile child = myFolder.findChild(name);
return child != null && !child.isDirectory()
? new VirtualFileWrapper(myProject, child)
: null;
}
@Nullable
@Override
public IAbstractFolder getFolder(String name) {
final VirtualFile child = myFolder.findChild(name);
return child != null && child.isDirectory()
? new VirtualFolderWrapper(myProject, child)
: null;
}
@Override
public IAbstractResource[] listMembers() {
final VirtualFile[] children = myFolder.getChildren();
final IAbstractResource[] result = new IAbstractResource[children.length];
for (int i = 0; i < result.length; i++) {
final VirtualFile child = children[i];
result[i] = child.isDirectory()
? new VirtualFolderWrapper(myProject, child)
: new VirtualFileWrapper(myProject, child);
}
return result;
}
@Override
public String[] list(FilenameFilter filter) {
final VirtualFile[] children = myFolder.getChildren();
final List<String> result = new ArrayList<String>();
for (VirtualFile child : children) {
final String name = child.getName();
if (filter == null || filter.accept(this, name)) {
result.add(name);
}
}
return ArrayUtil.toStringArray(result);
}
@Override
public String getName() {
return myFolder.getName();
}
@Override
public String getOsLocation() {
return FileUtil.toSystemDependentName(myFolder.getPath());
}
@Override
public boolean exists() {
return myFolder.exists();
}
@Nullable
@Override
public IAbstractFolder getParentFolder() {
final VirtualFile parent = myFolder.getParent();
return parent != null
? new VirtualFolderWrapper(myProject, parent)
: null;
}
@Override
public boolean delete() {
throw new UnsupportedOperationException();
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
VirtualFolderWrapper wrapper = (VirtualFolderWrapper)o;
if (!myFolder.equals(wrapper.myFolder)) {
return false;
}
if (!myProject.equals(wrapper.myProject)) {
return false;
}
return true;
}
@Override
public int hashCode() {
int result = myProject.hashCode();
result = 31 * result + myFolder.hashCode();
return result;
}
}