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; } } }