/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.plugin.ij.lang.psi.impl;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.FileViewProvider;
import com.intellij.psi.PsiElement;
import com.intellij.psi.impl.PsiManagerImpl;
import gw.lang.reflect.gs.GosuClassTypeLoader;
import gw.lang.reflect.module.IModule;
import gw.plugin.ij.icons.GosuIcons;
import gw.plugin.ij.util.GosuModuleUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.io.File;
import java.io.IOException;
public class GosuScratchpadFileImpl extends GosuProgramFileImpl {
public static final String GOSU_SCRATCHPAD_NAME = "Gosu Scratchpad";
public static final String GOSU_SCRATCHPAD_PKG = "scratchpad";
public static final String FQN = GOSU_SCRATCHPAD_PKG + '.' + GOSU_SCRATCHPAD_NAME;
@Nullable
public static GosuScratchpadFileImpl instance(@NotNull Project project) {
return (GosuScratchpadFileImpl) PsiManagerImpl.getInstance(project).findFile(getScratchpadFile(project));
}
public GosuScratchpadFileImpl(@NotNull FileViewProvider viewProvider) {
super(viewProvider);
}
@Override
public VirtualFile getVirtualFile() {
return getScratchpadFile( getProject() );
}
@Override
public boolean isPhysical() {
return true;
}
@NotNull
@Override
public String getQualifiedClassNameFromFile() {
return FQN;
}
@NotNull
@Override
public String getPackageName() {
return GOSU_SCRATCHPAD_PKG;
}
@Override
public IModule getModuleForPsi() {
return GosuModuleUtil.getGlobalModule(getProject());
}
@Override
public IModule getModule() {
return GosuModuleUtil.getGlobalModule(getProject());
}
@Nullable
public static VirtualFile getScratchpadFile(@NotNull Project project) {
String strFile = getScratchpadFileName(project);
return LocalFileSystem.getInstance().findFileByPath(strFile);
}
public static String getScratchpadFileName(@NotNull Project project) {
String strTempDir = System.getProperty( "java.io.tmpdir" );
String strProjectDir = project.getLocationHash();
String strTempFile = GosuScratchpadFileImpl.GOSU_SCRATCHPAD_NAME + GosuClassTypeLoader.GOSU_PROGRAM_FILE_EXT;
File dir = new File( strTempDir, strProjectDir );
if( !dir.isDirectory() ) {
dir.mkdir();
}
File tempFile = new File(dir, strTempFile);
try {
tempFile.createNewFile();
} catch (IOException e) {
throw new RuntimeException(e);
}
return tempFile.getAbsolutePath();
}
@Override
public PsiElement getNavigationElement() {
return this;
}
@Override
protected Icon getElementIcon(@IconFlags int flags) {
return GosuIcons.FILE_SCRATCHPAD;
}
}