package de.plushnikov.intellij.plugin.action;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.command.CommandProcessor;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.actionSystem.DocCommandGroupId;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
/**
* Date: 15.12.13 Time: 23:09
*/
public abstract class BaseRefactorAction extends AnAction {
protected abstract BaseRefactorHandler initHandler(Project project, DataContext dataContext);
@Override
public void update(AnActionEvent e) {
super.update(e);
boolean visible = isActionAvailable(e);
final Presentation presentation = e.getPresentation();
presentation.setVisible(visible);
presentation.setEnabled(visible);
}
private boolean isActionAvailable(AnActionEvent e) {
final VirtualFile file = getVirtualFiles(e);
if (getEventProject(e) != null && file != null) {
final FileType fileType = file.getFileType();
if (StdFileTypes.JAVA.equals(fileType)) {
return true;
}
}
return false;
}
private VirtualFile getVirtualFiles(AnActionEvent e) {
return PlatformDataKeys.VIRTUAL_FILE.getData(e.getDataContext());
}
public void actionPerformed(AnActionEvent e) {
final Project project = e.getProject();
final BaseRefactorHandler handler = initHandler(project, e.getDataContext());
boolean processChooser = handler.processChooser();
if (processChooser) {
final Editor editor = getEditor(e);
CommandProcessor.getInstance().executeCommand(project, new Runnable() {
@Override
public void run() {
ApplicationManager.getApplication().runWriteAction(handler);
}
}, getClass().getName() + "-Commandname", DocCommandGroupId.noneGroupId(editor.getDocument()));
}
}
private Editor getEditor(AnActionEvent e) {
return PlatformDataKeys.EDITOR.getData(e.getDataContext());
}
}