package com.lightd.ideap.maven;
import com.intellij.execution.DefaultExecutionResult;
import com.intellij.execution.ExecutionException;
import com.intellij.execution.ExecutionResult;
import com.intellij.execution.Executor;
import com.intellij.execution.configurations.JavaCommandLineState;
import com.intellij.execution.configurations.JavaParameters;
import com.intellij.execution.process.OSProcessHandler;
import com.intellij.execution.process.ProcessAdapter;
import com.intellij.execution.process.ProcessEvent;
import com.intellij.execution.process.ProcessTerminatedListener;
import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.execution.runners.ProgramRunner;
import com.intellij.openapi.wm.ToolWindowId;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.idea.maven.execution.MavenResumeAction;
import org.jetbrains.idea.maven.execution.MavenRunnerParameters;
import java.util.Arrays;
import java.util.List;
public class DebugServerCommandLineState extends JavaCommandLineState {
private final MvnRunConfiguration config;
private final List<String> goals;
protected DebugServerCommandLineState(@NotNull ExecutionEnvironment environment, MvnRunConfiguration config, List<String> goals) {
super(environment);
this.config = config;
this.goals = goals;
}
@Override
protected JavaParameters createJavaParameters() throws ExecutionException {
return config.createJavaParameters(getEnvironment().getProject());
}
@NotNull
@Override
public ExecutionResult execute(@NotNull Executor executor, @NotNull ProgramRunner runner) throws ExecutionException {
DefaultExecutionResult res = (DefaultExecutionResult) super.execute(executor, runner);
if (executor.getId().equals(ToolWindowId.RUN)
&& MavenResumeAction.isApplicable(getEnvironment().getProject(), getJavaParameters(), config)) {
MavenResumeAction resumeAction = new MavenResumeAction(res.getProcessHandler(), runner, getEnvironment());
res.setRestartActions(resumeAction);
}
return res;
}
@NotNull
@Override
protected OSProcessHandler startProcess() throws ExecutionException {
if (config.getStopGoal() != null && goals == null) {
MavenRunnerParameters parameters = config.getRunnerParameters().clone();
parameters.setGoals(Arrays.asList(config.getStopGoal()));
OSProcessHandler result = new DebugServerProcessHandler(createCommandLine(),
config.getProject(), parameters);
ProcessTerminatedListener.attach(result);
result.setShouldDestroyProcessRecursively(true);
return result;
}
OSProcessHandler result = super.startProcess();
if (goals != null) {
result.addProcessListener(new ProcessAdapter() {
@Override
public void processTerminated(ProcessEvent event) {
super.processTerminated(event);
config.getRunnerParameters().setGoals(goals);
}
});
}
return result;
}
}