package org.jetbrains.plugins.clojure.repl.actions;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.DataKeys;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiFile;
import org.jetbrains.plugins.clojure.ClojureIcons;
import org.jetbrains.plugins.clojure.psi.api.ClojureFile;
/**
* @author ilyas
*/
public class LoadClojureFileInConsoleAction extends ClojureConsoleActionBase {
public LoadClojureFileInConsoleAction() {
getTemplatePresentation().setIcon(ClojureIcons.REPL_LOAD);
}
@Override
public void update(AnActionEvent e) {
super.update(e);
}
@Override
public void actionPerformed(AnActionEvent e) {
final Editor editor = e.getData(DataKeys.EDITOR);
if (editor == null) return;
final Project project = editor.getProject();
if (project == null) return;
final Document document = editor.getDocument();
final PsiFile psiFile = PsiDocumentManager.getInstance(project).getPsiFile(document);
if (psiFile == null || !(psiFile instanceof ClojureFile)) return;
final VirtualFile virtualFile = psiFile.getVirtualFile();
if (virtualFile == null) return;
final String filePath = virtualFile.getPath();
if (filePath == null) return;
final String command = "(load-file \"" + filePath + "\")";
PsiDocumentManager.getInstance(project).commitAllDocuments();
FileDocumentManager.getInstance().saveAllDocuments();
executeCommand(project, command);
}
}