blob: b173eadba70079a75157debd9764aac0c2b66722 [file] [log] [blame]
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);
}
}