package com.atsebak.embeddedlinuxjvm.runner; import com.atsebak.embeddedlinuxjvm.console.EmbeddedLinuxJVMToolWindowFactory; import com.atsebak.embeddedlinuxjvm.console.EmbeddedLinuxJVMConsoleView; import com.atsebak.embeddedlinuxjvm.runner.conf.EmbeddedLinuxJVMRunConfiguration; import com.intellij.execution.ExecutionException; import com.intellij.execution.configurations.RunProfile; import com.intellij.execution.configurations.RunProfileState; import com.intellij.execution.executors.DefaultRunExecutor; import com.intellij.execution.runners.DefaultProgramRunner; import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.execution.ui.RunContentDescriptor; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.wm.ToolWindow; import com.intellij.openapi.wm.ToolWindowManager; import org.jetbrains.annotations.NotNull; public class EmbeddedLinuxJVMRunner extends DefaultProgramRunner { private static final String RUNNER_ID = "RaspberryPIRunner"; /** * Constructor */ public EmbeddedLinuxJVMRunner() { super(); } /** * Executes the Runner, This only gets called in run mode. * It returns null because you want to show only the PI Console * * @param profileState * @param environment * @return * @throws ExecutionException */ @Override protected RunContentDescriptor doExecute(@NotNull RunProfileState profileState, @NotNull ExecutionEnvironment environment) throws ExecutionException { final RunProfile runProfileRaw = environment.getRunProfile(); if (runProfileRaw instanceof EmbeddedLinuxJVMRunConfiguration) { FileDocumentManager.getInstance().saveAllDocuments(); setupConsole(environment.getProject()); return super.doExecute(profileState, environment); } return super.doExecute(profileState, environment); } /** * Gets the active runner id * * @return */ @NotNull @Override public String getRunnerId() { return RUNNER_ID; } /** * Method is constantly called but is always false unless user invokes it from IDEA * @param executorId * @param profile * @return */ @Override public boolean canRun(@NotNull String executorId, @NotNull RunProfile profile) { return (DefaultRunExecutor.EXECUTOR_ID.equals(executorId)) && profile instanceof EmbeddedLinuxJVMRunConfiguration; } /** * Adds a Console Logger From The Remote App * * @param p */ private void setupConsole(Project p) { ToolWindow window = ToolWindowManager.getInstance(p).getToolWindow(EmbeddedLinuxJVMToolWindowFactory.ID); if (window != null) { window.activate(null, true); EmbeddedLinuxJVMConsoleView.getInstance(p).clear(); } } }