IDEADEV-39575 IAE: DefaultActionGroup.add
[fedora-idea.git] / lang-impl / src / com / intellij / execution / ExecutionUtil.java
blob9b775e2069ecc716c9bc9113e08d6eb1ff6d959f
1 package com.intellij.execution;
3 import com.intellij.execution.configurations.RunConfiguration;
4 import com.intellij.execution.configurations.RuntimeConfigurationException;
5 import com.intellij.execution.impl.RunnerAndConfigurationSettingsImpl;
6 import com.intellij.execution.impl.RunManagerImpl;
7 import com.intellij.execution.impl.RunDialog;
8 import com.intellij.execution.runners.ExecutionEnvironment;
9 import com.intellij.execution.runners.ProgramRunner;
10 import com.intellij.openapi.actionSystem.DataContext;
11 import com.intellij.openapi.actionSystem.PlatformDataKeys;
12 import com.intellij.openapi.actionSystem.impl.SimpleDataContext;
13 import com.intellij.openapi.diagnostic.Logger;
14 import com.intellij.openapi.project.Project;
15 import com.intellij.openapi.ui.Messages;
16 import com.intellij.openapi.util.IconLoader;
17 import com.intellij.ui.LayeredIcon;
18 import com.intellij.ide.DataManager;
19 import org.jetbrains.annotations.NotNull;
20 import org.jetbrains.annotations.Nullable;
22 import javax.swing.*;
23 import java.awt.*;
25 /**
26 * @author spleaner
28 public class ExecutionUtil {
29 private static final Logger LOG = Logger.getInstance("#com.intellij.execution.ExecutionUtil");
31 private static final Icon INVALID_CONFIGURATION = IconLoader.getIcon("/runConfigurations/invalidConfigurationLayer.png");
33 private ExecutionUtil() {
36 @Nullable
37 public static ProgramRunner getRunner(final String executorId, final RunnerAndConfigurationSettingsImpl configuration) {
38 return RunnerRegistry.getInstance().getRunner(executorId, configuration.getConfiguration());
41 public static void executeConfiguration(@NotNull final Project project, @NotNull final RunnerAndConfigurationSettingsImpl configuration, @NotNull final Executor executor, @NotNull final DataContext dataContext) {
42 ProgramRunner runner = getRunner(executor.getId(), configuration);
43 LOG.assertTrue(runner != null, "Runner MUST not be null!");
45 final Component component = PlatformDataKeys.CONTEXT_COMPONENT.getData(dataContext);
46 LOG.assertTrue(component != null, "component MUST not be null!");
47 if (!RunManagerImpl.canRunConfiguration(configuration, executor)) {
48 final boolean result = RunDialog.editConfiguration(project, configuration, "Edit configuration", executor.getActionName(), executor.getIcon());
49 if (!result) {
50 return;
53 while (!RunManagerImpl.canRunConfiguration(configuration, executor)) {
54 if (0 == Messages.showOkCancelDialog(project, "Configuration is still wrong. Do you want to edit it again?", "Change configuration settings", Messages.getErrorIcon())) {
55 final boolean result2 = RunDialog.editConfiguration(project, configuration, "Edit configuration", executor.getActionName(), executor.getIcon());
56 if (!result2) {
57 return;
59 } else {
60 break;
65 try {
66 runner.execute(executor, new ExecutionEnvironment(runner, configuration, dataContext));
68 catch (RunCanceledByUserException e) {
69 // nothing
71 catch (ExecutionException e1) {
72 Messages.showErrorDialog(project, ExecutionBundle.message("error.running.configuration.with.error.error.message",
73 configuration.getName(), e1.getMessage()),
74 ExecutionBundle.message("run.error.message.title"));
78 private static DataContext recreateDataContext(final Project project, final Component component) {
79 if (component != null && component.isDisplayable()) return DataManager.getInstance().getDataContext(component);
80 return SimpleDataContext.getProjectContext(project);
83 public static Icon getConfigurationIcon(final Project project, final RunnerAndConfigurationSettings settings, final boolean invalid) {
84 final RunManager runManager = RunManager.getInstance(project);
85 RunConfiguration configuration = settings.getConfiguration();
86 final Icon icon = settings.getFactory().getIcon(configuration);
87 LOG.assertTrue(icon != null, "Icon should not be null!");
89 final Icon configurationIcon = runManager.isTemporary(configuration) ? IconLoader.getTransparentIcon(icon, 0.3f) : icon;
90 if (invalid) {
91 return LayeredIcon.create(configurationIcon, INVALID_CONFIGURATION);
94 return configurationIcon;
97 public static Icon getConfigurationIcon(final Project project, final RunnerAndConfigurationSettings settings) {
98 try {
99 settings.checkSettings();
100 return getConfigurationIcon(project, settings, false);
102 catch (RuntimeConfigurationException ex) {
103 return getConfigurationIcon(project, settings, true);
107 public static String shortenName(final String name, final int toBeAdded) {
108 if (name == null) return "";
109 final int symbols = Math.max(10, 20 - toBeAdded);
110 if (name.length() < symbols) return name;
111 else return name.substring(0, symbols) + "...";