/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.plugin.ij.filetypes;
import com.intellij.openapi.fileEditor.OpenFileDescriptor;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.FileViewProvider;
import gw.plugin.ij.icons.GosuIcons;
import gw.plugin.ij.lang.psi.IGosuFile;
import gw.plugin.ij.lang.psi.impl.GosuFragmentFileImpl;
import gw.plugin.ij.lang.psi.impl.GosuProgramFileImpl;
import gw.plugin.ij.lang.psi.impl.GosuScratchpadFileImpl;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
public class GosuProgramFileProvider implements IGosuFileTypeProvider {
public static final String EXT_PROGRAM = "gsp";
public static boolean isScratchpad(@NotNull VirtualFile file) {
return isProgram(file) && file.getName().startsWith(GosuScratchpadFileImpl.GOSU_SCRATCHPAD_NAME);
}
public static boolean isDebuggerFragement(@NotNull VirtualFile file) {
return isProgram(file) && file.getName().contains( "Gosu_Frag" );
}
public static boolean isProgram(@Nullable VirtualFile file) {
return file != null && EXT_PROGRAM.equals(file.getExtension());
}
@NotNull
@Override
public IGosuFile createGosuFile(@NotNull FileViewProvider viewProvider) {
if (isScratchpad(viewProvider.getVirtualFile())) {
return new GosuScratchpadFileImpl(viewProvider);
}
else if( isDebuggerFragement( viewProvider.getVirtualFile() ) ) {
return new GosuFragmentFileImpl( viewProvider );
}
else {
return new GosuProgramFileImpl(viewProvider);
}
}
@Nullable
@Override
public Icon getIcon(@NotNull VirtualFile file) {
return isScratchpad(file) ? GosuIcons.FILE_SCRATCHPAD : GosuIcons.FILE_PROGRAM;
}
public OpenFileDescriptor getOpenFileDescriptor(Project project, VirtualFile virtualFile, int offset) {
return new OpenFileDescriptor(project, virtualFile, offset);
}
}