package com.intellij.perlplugin.extensions.run.configuration; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.DataConstants; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.perlplugin.PerlCli; import com.intellij.perlplugin.Utils; /** * Created by ELI-HOME on 25-May-15. * handles perl run configuration from the context menu */ public class RunPerlAction extends AnAction { public void actionPerformed(AnActionEvent e) { if (Utils.debug) { Utils.print("running perl script action from context..."); } VirtualFile[] files = (VirtualFile[]) e.getDataContext().getData(DataConstants.VIRTUAL_FILE_ARRAY); if (isInvalid(e.getProject(), files)) return; for (int i = 0; i < files.length; i++) { if (files[i].getExtension().equals("pl")) { PerlCli.runFile(e.getProject(), files[i].getPath()); } } } public boolean isInvalid(Project project, VirtualFile[] files) { return (project == null || files == null | files.length == 0); } @Override public void update(AnActionEvent e) { try { super.update(e); VirtualFile[] files = (VirtualFile[]) e.getDataContext().getData(DataConstants.VIRTUAL_FILE_ARRAY); if (isInvalid(e.getProject(), files)) return; //check pl file in order to update display boolean visible = false; String perlScriptName = ""; for (int i = 0; i < files.length; i++) { VirtualFile file = files[i]; if (file != null && file.getExtension().equals("pl")) { visible = true; if (perlScriptName.isEmpty()) { perlScriptName = file.getName(); } else { perlScriptName += ", " + file.getName(); } } } e.getPresentation().setVisible(true);// Visibility e.getPresentation().setEnabled(visible);// Enable or disable e.getPresentation().setText("Run '" + ((perlScriptName.isEmpty()) ? "..." : perlScriptName) + "'");// Update text }finally { } } }