package com.thoughtworks.gauge.extract; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiFile; import com.thoughtworks.gauge.helper.ModuleHelper; import com.thoughtworks.gauge.util.GaugeUtil; import org.jetbrains.annotations.NotNull; public class ExtractConceptAction extends AnAction { private ModuleHelper moduleHelper; public ExtractConceptAction() { this.moduleHelper = new ModuleHelper(); } ExtractConceptAction(ModuleHelper moduleHelper) { this.moduleHelper = moduleHelper; } @Override public void actionPerformed(@NotNull AnActionEvent anActionEvent) { DataContext dataContext = anActionEvent.getDataContext(); Editor editor = CommonDataKeys.EDITOR.getData(dataContext); PsiFile file = CommonDataKeys.PSI_FILE.getData(dataContext); Project project = CommonDataKeys.PROJECT.getData(dataContext); if (file == null || project == null || editor == null) { Messages.showErrorDialog("Cannot find project details, rejecting extract to concept request.", "Extract To Concept"); return; } new ExtractConceptHandler().invoke(project, editor, file); } @Override public void update(@NotNull AnActionEvent e) { VirtualFile file = CommonDataKeys.VIRTUAL_FILE.getData(e.getDataContext()); Project project = CommonDataKeys.PROJECT.getData(e.getDataContext()); Boolean enable = true; if (file == null || project == null || !moduleHelper.isGaugeModule(file, project) || !GaugeUtil.isGaugeFile(file)) enable = false; e.getPresentation().setEnabled(enable); } }