package jetbrains.mps.execution.configurations.implementation.plugin.plugin;
/*Generated by MPS */
import jetbrains.mps.execution.api.configurations.BaseMpsBeforeTaskProvider;
import org.apache.log4j.Logger;
import org.apache.log4j.LogManager;
import com.intellij.openapi.util.Key;
import java.util.List;
import org.jetbrains.mps.openapi.model.SNodeReference;
import java.io.File;
import com.intellij.openapi.project.Project;
import com.intellij.execution.runners.ExecutionEnvironment;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import jetbrains.mps.baseLanguage.closures.runtime.Wrappers;
import jetbrains.mps.ide.project.ProjectHelper;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
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.ant.execution.Ant_Command;
import com.intellij.execution.ExecutionException;
import org.apache.log4j.Level;
import com.intellij.execution.Executor;
import com.intellij.execution.executors.DefaultRunExecutor;
import com.intellij.openapi.actionSystem.DefaultActionGroup;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import com.intellij.openapi.actionSystem.ActionToolbar;
import com.intellij.openapi.actionSystem.ActionManager;
import com.intellij.openapi.actionSystem.ActionPlaces;
import com.intellij.execution.ui.RunContentDescriptor;
import com.intellij.openapi.actionSystem.IdeActions;
import com.intellij.execution.ui.actions.CloseAction;
import com.intellij.execution.ExecutionManager;
import jetbrains.mps.execution.api.commands.ProcessHandlerBuilder;
import jetbrains.mps.util.FileUtil;
public class DeployPlugins_BeforeTask extends BaseMpsBeforeTaskProvider<DeployPlugins_BeforeTask.DeployPlugins_BeforeTask_RunTask> {
private static final Logger LOG = LogManager.getLogger(DeployPlugins_BeforeTask.class);
private static final Key<DeployPlugins_BeforeTask.DeployPlugins_BeforeTask_RunTask> KEY = Key.create("jetbrains.mps.execution.configurations.implementation.plugin.plugin.DeployPlugins_BeforeTask");
public DeployPlugins_BeforeTask() {
super("DeployPlugins", "Deploy plugins");
}
protected DeployPlugins_BeforeTask.DeployPlugins_BeforeTask_RunTask createTaskImpl() {
return new DeployPlugins_BeforeTask.DeployPlugins_BeforeTask_RunTask();
}
public Key<DeployPlugins_BeforeTask.DeployPlugins_BeforeTask_RunTask> getId() {
return KEY;
}
public static class DeployPlugins_BeforeTask_RunTask extends BaseMpsBeforeTaskProvider.BaseMpsBeforeRunTask<DeployPlugins_BeforeTask.DeployPlugins_BeforeTask_RunTask> {
private List<SNodeReference> myPlugins;
private File myDeployLocation;
public DeployPlugins_BeforeTask_RunTask() {
super(KEY);
}
public boolean configure(List<SNodeReference> plugins, File deployLocation) {
myPlugins = plugins;
myDeployLocation = deployLocation;
return true;
}
public boolean execute(Project project, ExecutionEnvironment environment) {
if (ListSequence.fromList(myPlugins).isEmpty()) {
return true;
}
final Wrappers._T<DeployScript> script = new Wrappers._T<DeployScript>();
final jetbrains.mps.project.Project mpsProject = ProjectHelper.toMPSProject(project);
final Project projectFinal = project;
ApplicationManager.getApplication().invokeAndWait(new Runnable() {
public void run() {
mpsProject.getModelAccess().executeCommand(new Runnable() {
public void run() {
script.value = new DeployScript(mpsProject, myPlugins);
}
});
}
}, ModalityState.NON_MODAL);
String deployScriptLocation = script.value.make();
if ((deployScriptLocation == null || deployScriptLocation.length() == 0)) {
script.value.dispose();
return false;
}
final ConsoleView console = ConsoleCreator.createConsoleView(project, false);
console.addMessageFilter(new StandaloneMPSStackTraceFilter(project));
final Wrappers._T<ProcessHandler> process = new Wrappers._T<ProcessHandler>();
try {
process.value = new Ant_Command().setTargetName_String("buildDependents assemble").createProcess(deployScriptLocation);
console.attachToProcess(process.value);
} catch (ExecutionException e) {
if (LOG.isEnabledFor(Level.ERROR)) {
LOG.error("Can not deploy plugins", e);
}
script.value.dispose();
return false;
}
ApplicationManager.getApplication().invokeAndWait(new Runnable() {
public void run() {
Executor executor = DefaultRunExecutor.getRunExecutorInstance();
DefaultActionGroup group = new DefaultActionGroup();
JPanel consolePanel = new JPanel(new BorderLayout());
ActionToolbar actionToolbar = ActionManager.getInstance().createActionToolbar(ActionPlaces.TOOLBAR, group, false);
actionToolbar.setTargetComponent(console.getComponent());
consolePanel.add(actionToolbar.getComponent(), BorderLayout.WEST);
consolePanel.add(console.getComponent(), BorderLayout.CENTER);
RunContentDescriptor descriptor = new RunContentDescriptor(console, process.value, consolePanel, "Deploy plugins", IconContainer.ICON_e0a0j0a0a0a0r0e4);
group.add(ActionManager.getInstance().getAction("Stop"));
group.addSeparator();
group.add(ActionManager.getInstance().getAction(IdeActions.ACTION_PIN_ACTIVE_TAB));
group.add(new CloseAction(executor, descriptor, projectFinal));
ExecutionManager.getInstance(projectFinal).getContentManager().showRunContent(executor, descriptor);
}
}, ModalityState.NON_MODAL);
int exitCode = ProcessHandlerBuilder.startAndWait(process.value);
if (exitCode != 0) {
script.value.dispose();
return false;
}
FileUtil.copyDir(new File(script.value.getArtifactsPath()), myDeployLocation);
script.value.dispose();
return true;
}
}
}