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; } }