package com.intellij.perlplugin.extensions.run.configuration;
import com.intellij.execution.ExecutionException;
import com.intellij.execution.ExecutionResult;
import com.intellij.execution.Executor;
import com.intellij.execution.configurations.RunProfileState;
import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.execution.runners.ProgramRunner;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.newvfs.impl.VirtualFileImpl;
import com.intellij.perlplugin.PerlCli;
import com.intellij.perlplugin.Utils;
import org.jetbrains.annotations.Nullable;
import java.io.BufferedReader;
import java.io.InputStreamReader;
/**
* Created by ELI-HOME on 22-May-15.
*/
public class PerlRunProfileState implements RunProfileState {
private final Project project;
private ExecutionEnvironment executionEnvironment;
public PerlRunProfileState(ExecutionEnvironment executionEnvironment) {
this.executionEnvironment = executionEnvironment;
this.project = executionEnvironment.getProject();
String file = "";
Object vFile = executionEnvironment.getDataContext().getData("virtualFile");
if(vFile != null && vFile instanceof VirtualFileImpl && ((VirtualFileImpl) vFile).getExtension().equals("pl")) {
//get file path from context
file = ((VirtualFileImpl) vFile).getPath();
}else{
//get file from selected text editor
file = FileDocumentManager.getInstance().getFile(FileEditorManager.getInstance(executionEnvironment.getProject()).getSelectedTextEditor().getDocument()).toString();
}
if(file.endsWith("pl")) {
PerlCli.runFile(executionEnvironment.getProject(), file);
}
}
@Nullable
@Override
public ExecutionResult execute(Executor executor, ProgramRunner programRunner) throws ExecutionException {
try {
String cmd = PerlCli.getPerlPath(project);
String[] params = {cmd ,"-e","'print 1;'"};
Process p = Runtime.getRuntime().exec(params);
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
String sdkVersion = "UNKNOWN";
while ((line = input.readLine()) != null) {
Utils.print(sdkVersion = line);
}
input.close();
int result = p.waitFor();
if (result != 0) {
throw new Exception("Failed to get perl version - make sure PERL_HOME directs to the right folder");
}
} catch (Exception e) {
e.printStackTrace();
}
return null;//TODO:: Implement ExecutionResult
}
}