package jetbrains.mps.execution.configurations.implementation.plugin.plugin;
/*Generated by MPS */
import com.intellij.execution.configurations.RunProfileState;
import org.jetbrains.annotations.NotNull;
import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.execution.Executor;
import com.intellij.execution.configurations.ConfigurationPerRunnerSettings;
import com.intellij.execution.configurations.RunnerSettings;
import org.jetbrains.annotations.Nullable;
import com.intellij.execution.ExecutionResult;
import com.intellij.execution.runners.ProgramRunner;
import com.intellij.execution.ExecutionException;
import com.intellij.openapi.project.Project;
import com.intellij.execution.ui.ConsoleView;
import jetbrains.mps.execution.api.configurations.ConsoleCreator;
import jetbrains.mps.ide.actions.StandaloneMPSStackTraceFilter;
import com.intellij.execution.process.ProcessHandler;
import jetbrains.mps.execution.api.commands.OutputRedirector;
import jetbrains.mps.ant.execution.Ant_Command;
import com.intellij.execution.process.ProcessAdapter;
import com.intellij.execution.process.ProcessEvent;
import java.io.File;
import org.jdom.Document;
import jetbrains.mps.util.JDOMUtil;
import org.jdom.JDOMException;
import java.io.IOException;
import jetbrains.mps.util.FileUtil;
import com.intellij.openapi.application.ex.ApplicationEx;
import com.intellij.openapi.application.ApplicationManager;
import jetbrains.mps.execution.api.configurations.DefaultExecutionResult;
import jetbrains.mps.execution.api.configurations.DefaultExecutionConsole;
import jetbrains.mps.baseLanguage.closures.runtime._FunctionTypes;
import com.intellij.execution.executors.DefaultRunExecutor;
public class DeployPlugins_Configuration_RunProfileState implements RunProfileState {
@NotNull
private final DeployPlugins_Configuration myRunConfiguration;
@NotNull
private final ExecutionEnvironment myEnvironment;
public DeployPlugins_Configuration_RunProfileState(@NotNull DeployPlugins_Configuration configuration, @NotNull Executor executor, @NotNull ExecutionEnvironment environment) {
myRunConfiguration = configuration;
myEnvironment = environment;
}
public ConfigurationPerRunnerSettings getConfigurationSettings() {
return null;
}
public RunnerSettings getRunnerSettings() {
return null;
}
@Nullable
public ExecutionResult execute(Executor executor, @NotNull ProgramRunner runner) throws ExecutionException {
Project project = myEnvironment.getProject();
final DeployScript script = ScriptsHolder.get(myEnvironment);
if (script == null) {
throw new ExecutionException("Could not deploy plugins");
}
final Project projectFinal = project;
String deployScriptLocation = script.getDeployScriptLocation();
if ((deployScriptLocation == null || deployScriptLocation.length() == 0)) {
script.dispose();
ScriptsHolder.remove(myEnvironment);
throw new ExecutionException("Can not generate deploy script");
}
ConsoleView console = ConsoleCreator.createConsoleView(project, false);
console.addMessageFilter(new StandaloneMPSStackTraceFilter(project));
ProcessHandler process;
try {
process = OutputRedirector.redirect(new Ant_Command().setTargetName_String("buildDependents assemble").createProcess(deployScriptLocation), new ProcessAdapter() {
@Override
public void processTerminated(ProcessEvent event) {
if (event.getExitCode() == 0) {
File artifacts = new File(script.getArtifactsPath());
if (myRunConfiguration.getSkipModulesLoading()) {
// using the same "advanced" technique we use for copying current project in mps command
// configuration supports only plugin construction
// which implies that plugin.xml can be only in PLUGIN_HOME/META-INF
for (File pluginDir : artifacts.listFiles()) {
File pluginXml = new File(new File(pluginDir, "META-INF"), "plugin.xml");
if (!(pluginXml.exists())) {
continue;
}
try {
Document document = JDOMUtil.loadDocument(pluginXml);
myRunConfiguration.removeLanguageLibraries(document.getRootElement(), projectFinal);
JDOMUtil.writeDocument(document, pluginXml);
} catch (JDOMException e) {
// ignore and hope for the best
} catch (IOException e) {
// same as previous
}
}
}
FileUtil.copyDir(artifacts, myRunConfiguration.getPluginsPath());
script.dispose();
ScriptsHolder.remove(myEnvironment);
if (myRunConfiguration.getRestartCurrentInstance()) {
ApplicationEx application = (ApplicationEx) ApplicationManager.getApplication();
application.restart(true);
}
}
}
});
} catch (ExecutionException e) {
script.dispose();
ScriptsHolder.remove(myEnvironment);
throw new ExecutionException("Can not deploy plugins", e);
}
{
ProcessHandler _processHandler = process;
final ConsoleView _consoleView = console;
_consoleView.attachToProcess(_processHandler);
return new DefaultExecutionResult(_processHandler, new DefaultExecutionConsole(_consoleView.getComponent(), new _FunctionTypes._void_P0_E0() {
public void invoke() {
_consoleView.dispose();
}
}));
}
}
public static boolean canExecute(String executorId) {
if (DefaultRunExecutor.EXECUTOR_ID.equals(executorId)) {
return true;
}
return false;
}
}