package jetbrains.mps.ide.make; /*Generated by MPS */ import com.intellij.openapi.vfs.newvfs.impl.StubVirtualFile; import jetbrains.mps.text.TextUnit; import org.jetbrains.annotations.NotNull; import java.io.IOException; import java.nio.charset.Charset; import jetbrains.mps.util.FileUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.Nullable; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileSystem; import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.fileTypes.FileTypeRegistry; import com.intellij.openapi.fileTypes.UnknownFileType; import com.intellij.openapi.fileTypes.PlainTextFileType; import com.intellij.openapi.vfs.newvfs.NewVirtualFileSystem; import com.intellij.openapi.util.io.FileAttributes; import java.io.OutputStream; import java.io.InputStream; import com.intellij.util.ArrayUtil; public class TextPreviewFile extends StubVirtualFile { private static TextPreviewFile.TextPreviewVirtualFileSystem FS = new TextPreviewFile.TextPreviewVirtualFileSystem(); private static final String BINARY_CONTENT = "<binary content>"; private final String myName; private final String myModelName; private final Object myFileContent; public TextPreviewFile(String name, Object fileContent, String modelName) { this.myName = name; this.myFileContent = fileContent; this.myModelName = modelName; } public TextPreviewFile(TextUnit textUnit, String modelName) { // FIXME what's in modelName, do we really care to prepend it to file name? this(textUnit.getFileName(), textUnit, modelName); } @NotNull @Override public byte[] contentsToByteArray() throws IOException { if (myFileContent instanceof String) { return ((String) myFileContent).getBytes(getCharset()); } if (myFileContent instanceof TextUnit) { return ((TextUnit) myFileContent).getBytes(); } return BINARY_CONTENT.getBytes(getCharset()); } @Override @NotNull public Charset getCharset() { if (myFileContent instanceof TextUnit) { return ((TextUnit) myFileContent).getEncoding(); } return FileUtil.DEFAULT_CHARSET; } @NotNull @NonNls @Override public String getName() { return myName; } @Override public long getTimeStamp() { return 0L; } @Override public long getModificationStamp() { return 0L; } @Override @NotNull public String getPath() { return myModelName + "/" + myName; } @Nullable @Override public VirtualFile getParent() { return null; } @NotNull @Override public String getUrl() { return TextPreviewFile.TextPreviewVirtualFileSystem.PROTOCOL + getPath(); } @NotNull @Override public VirtualFileSystem getFileSystem() { return FS; } @Override public boolean isDirectory() { return false; } @Override public boolean isValid() { return true; } @Override public boolean isWritable() { return false; } @Override public long getLength() { return (myFileContent instanceof String ? ((String) myFileContent).getBytes(getCharset()).length : 0); } @NotNull @Override public FileType getFileType() { FileType fileType = FileTypeRegistry.getInstance().getFileTypeByFileName(myName); if (fileType.equals(UnknownFileType.INSTANCE)) { return PlainTextFileType.INSTANCE; } return fileType; } private static class TextPreviewVirtualFileSystem extends NewVirtualFileSystem { private static String PROTOCOL = "preview"; public TextPreviewVirtualFileSystem() { } @Override @NotNull public String getCanonicallyCasedName(VirtualFile file) { return file.getName(); } @Nullable @Override public FileAttributes getAttributes(@NotNull VirtualFile file) { if (file instanceof TextPreviewFile) { return new FileAttributes(false, false, false, false, file.getLength(), file.getModificationStamp(), false); } return null; } @Override public boolean markNewFilesAsDirty() { return false; } @Override public boolean isReadOnly() { return true; } @Override public void refresh(boolean b) { } @Override public void refreshWithoutFileWatcher(boolean b) { } @Nullable @Override protected String normalize(String string) { return string; } @Nullable @Override public VirtualFile refreshAndFindFileByPath(@NotNull String string) { return null; } @Nullable @Override public VirtualFile findFileByPathIfCached(@NotNull @NonNls String string) { return null; } @Nullable @Override public VirtualFile findFileByPath(@NotNull @NonNls String string) { return null; } @Override @NotNull public String extractPresentableUrl(@NotNull String string) { return string; } @Override public void renameFile(Object object, @NotNull VirtualFile file, @NotNull String string) throws IOException { } @Override public void moveFile(Object object, @NotNull VirtualFile file, @NotNull VirtualFile file1) throws IOException { } @Override public void deleteFile(Object object, @NotNull VirtualFile file) throws IOException { } @Override @NotNull public VirtualFile createChildFile(Object object, @NotNull VirtualFile file, @NotNull String string) throws IOException { return null; } @NotNull @Override public VirtualFile createChildDirectory(Object object, @NotNull VirtualFile file, @NotNull String string) throws IOException { return null; } @Override @NotNull public VirtualFile copyFile(Object object, @NotNull VirtualFile file, @NotNull VirtualFile file1, @NotNull String string) throws IOException { return null; } @Override public int getRank() { return 0; } @NotNull @Override protected String extractRootPath(@NotNull String string) { return "/"; } @Override public boolean isCaseSensitive() { return false; } @Override public long getLength(VirtualFile file) { return 0L; } @NotNull @Override public OutputStream getOutputStream(VirtualFile file, Object object, long l, long l1) throws IOException { return null; } @NotNull @Override public InputStream getInputStream(VirtualFile file) throws IOException { return null; } @NotNull @Override public byte[] contentsToByteArray(VirtualFile file) throws IOException { return null; } @Override public void setWritable(VirtualFile file, boolean b) throws IOException { } @Override public boolean isWritable(VirtualFile file) { return false; } @Override public void setTimeStamp(VirtualFile file, long l) throws IOException { } @Override public long getTimeStamp(VirtualFile file) { return 0L; } @Override public boolean isDirectory(VirtualFile file) { return false; } @NotNull @Override public String[] list(VirtualFile file) { return ArrayUtil.EMPTY_STRING_ARRAY; } @NonNls @NotNull @Override public String getProtocol() { return PROTOCOL; } @Override public boolean exists(VirtualFile file) { return false; } } @Override public void refresh(boolean b, boolean b1, Runnable runnable) { // Do nothing and don't throw exception as StubVirtualFile to prevent error from TextPreviewModel_Action } }