package org.jetbrains.android.util; import com.android.io.FolderWrapper; import com.android.io.IAbstractFile; import com.android.io.IAbstractFolder; import com.android.io.IAbstractResource; import com.intellij.openapi.util.io.FileUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.io.File; /** * @author Eugene.Kudelevsky */ public class BufferingFolderWrapper implements IAbstractFolder { private final File myFile; private final IAbstractFolder myDelegate; public BufferingFolderWrapper(@NotNull File file) { myFile = file; myDelegate = new FolderWrapper(file); } @Override public boolean hasFile(String name) { return myDelegate.hasFile(name); } @Override public IAbstractFile getFile(String name) { return new BufferingFileWrapper(new File(myFile, name)); } @Override public IAbstractFolder getFolder(String name) { return new BufferingFolderWrapper(new File(myFile, name)); } @Override public IAbstractResource[] listMembers() { final File[] files = myFile.listFiles(); if (files == null) { return new IAbstractResource[0]; } final IAbstractResource[] result = new IAbstractResource[files.length]; for (int i = 0; i < result.length; i++) { final File file = files[i]; result[i] = file.isFile() ? new BufferingFileWrapper(file) : new BufferingFolderWrapper(file); } return result; } @Override public String[] list(FilenameFilter filter) { return myDelegate.list(filter); } @Override public String getName() { return myFile.getName(); } @Override public String getOsLocation() { return myFile.getAbsolutePath(); } @Override public boolean exists() { return myFile.isDirectory(); } @Nullable @Override public IAbstractFolder getParentFolder() { final File parent = myFile.getParentFile(); return parent != null ? new BufferingFolderWrapper(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; BufferingFolderWrapper wrapper = (BufferingFolderWrapper)o; return FileUtil.filesEqual(myFile, wrapper.myFile); } @Override public int hashCode() { return FileUtil.fileHashCode(myFile); } }