blob: 45022d7b8d9f40d27eef0a51281bcff08f76d699 [file] [log] [blame]
package org.jetbrains.android.uipreview;
import com.android.io.IAbstractFile;
import com.android.io.IAbstractFolder;
import com.android.io.StreamException;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.OutputStream;
/**
* @author Eugene.Kudelevsky
*/
public class VirtualFileWrapper implements IAbstractFile {
private final Project myProject;
private final VirtualFile myFile;
public VirtualFileWrapper(@NotNull Project project, @NotNull VirtualFile file) {
myFile = file;
myProject = project;
}
@Override
public InputStream getContents() throws StreamException {
final String content = getFileContent();
return new ByteArrayInputStream(content.getBytes());
}
@NotNull
private String getFileContent() {
return ApplicationManager.getApplication().runReadAction(new Computable<String>() {
@Override
public String compute() {
if (!myFile.isValid()) {
return "";
}
final PsiFile psiFile = PsiManager.getInstance(myProject).findFile(myFile);
return psiFile != null ? psiFile.getText() : "";
}
});
}
@Override
public void setContents(InputStream source) throws StreamException {
throw new UnsupportedOperationException();
}
@Override
public OutputStream getOutputStream() throws StreamException {
throw new UnsupportedOperationException();
}
@Override
public PreferredWriteMode getPreferredWriteMode() {
throw new UnsupportedOperationException();
}
@Override
public long getModificationStamp() {
return myFile.getTimeStamp();
}
@Override
public String getName() {
return myFile.getName();
}
@Override
public String getOsLocation() {
return FileUtil.toSystemDependentName(myFile.getPath());
}
@Override
public boolean exists() {
return myFile.exists();
}
@Nullable
@Override
public IAbstractFolder getParentFolder() {
final VirtualFile parent = myFile.getParent();
return parent != null ? new VirtualFolderWrapper(myProject, parent) : null;
}
@Override
public boolean delete() {
throw new UnsupportedOperationException();
}
@NotNull
public VirtualFile getFile() {
return myFile;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
VirtualFileWrapper wrapper = (VirtualFileWrapper)o;
if (!myFile.equals(wrapper.myFile)) {
return false;
}
if (!myProject.equals(wrapper.myProject)) {
return false;
}
return true;
}
@Override
public int hashCode() {
int result = myProject.hashCode();
result = 31 * result + myFile.hashCode();
return result;
}
}