diff --git a/platform/lang-impl/src/com/intellij/execution/ProgramRunnerUtil.java b/platform/lang-impl/src/com/intellij/execution/ProgramRunnerUtil.java index 3f45de3c7edc..72e9d56265cb 100644 --- a/platform/lang-impl/src/com/intellij/execution/ProgramRunnerUtil.java +++ b/platform/lang-impl/src/com/intellij/execution/ProgramRunnerUtil.java @@ -19,6 +19,7 @@ package com.intellij.execution; import com.intellij.execution.configurations.ConfigurationFactory; import com.intellij.execution.configurations.ConfigurationType; import com.intellij.execution.configurations.RunConfiguration; +import com.intellij.execution.configurations.RunProfile; import com.intellij.execution.impl.RunDialog; import com.intellij.execution.impl.RunManagerImpl; import com.intellij.execution.runners.ExecutionEnvironmentBuilder; @@ -63,50 +64,85 @@ public class ProgramRunnerUtil { final boolean showSettings) { ProgramRunner runner = getRunner(executor.getId(), configuration); if (runner == null) { - LOG.error("Runner MUST not be null! Cannot find runner for " + executor.getId() + " and " + configuration.getConfiguration().getFactory().getName()); + LOG.error("Runner MUST not be null! Cannot find runner for " + + executor.getId() + + " and " + + configuration.getConfiguration().getFactory().getName()); return; } - if (ExecutorRegistry.getInstance().isStarting(project, executor.getId(), runner.getRunnerId())){ + executeConfiguration(project, context, configuration, executor, target, contentToReuse, showSettings, runner, null, true); + } + + public static void executeConfiguration(Project project, + DataContext context, + @Nullable RunnerAndConfigurationSettings configuration, + Executor executor, + ExecutionTarget target, + RunContentDescriptor contentToReuse, + boolean showSettings, + @NotNull ProgramRunner runner, + @Nullable RunProfile runProfile, + boolean assignNewId) { + if (ExecutorRegistry.getInstance().isStarting(project, executor.getId(), runner.getRunnerId())) { return; } - if (!ExecutionTargetManager.canRun(configuration, target)) { + if (configuration != null && !ExecutionTargetManager.canRun(configuration, target)) { ExecutionUtil.handleExecutionError( project, executor.getToolWindowId(), configuration.getConfiguration(), new ExecutionException(StringUtil.escapeXml("Cannot run '" + configuration.getName() + "' on '" + target.getDisplayName() + "'"))); return; } - if (!RunManagerImpl.canRunConfiguration(configuration, executor) || (showSettings && configuration.isEditBeforeRun())) { + if (configuration != null && + (!RunManagerImpl.canRunConfiguration(configuration, executor) || (showSettings && configuration.isEditBeforeRun()))) { if (!RunDialog.editConfiguration(project, configuration, "Edit configuration", executor)) { return; } while (!RunManagerImpl.canRunConfiguration(configuration, executor)) { - if (0 == Messages.showYesNoDialog(project, "Configuration is still incorrect. Do you want to edit it again?", "Change Configuration Settings", - "Edit", "Continue Anyway", Messages.getErrorIcon())) { + if (0 == Messages + .showYesNoDialog(project, "Configuration is still incorrect. Do you want to edit it again?", "Change Configuration Settings", + "Edit", "Continue Anyway", Messages.getErrorIcon())) { if (!RunDialog.editConfiguration(project, configuration, "Edit configuration", executor)) { return; } - } else { + } + else { break; } } } - final ConfigurationType configurationType = configuration.getType(); + final ConfigurationType configurationType = configuration != null ? configuration.getType() : null; if (configurationType != null) { UsageTrigger.trigger("execute." + ConvertUsagesUtil.ensureProperKey(configurationType.getId()) + "." + executor.getId()); } try { ExecutionEnvironmentBuilder builder = - new ExecutionEnvironmentBuilder(project, executor).setRunnerAndSettings(runner, configuration).setTarget(target) - .setContentToReuse(contentToReuse).assignNewId().setDataContext(context); + new ExecutionEnvironmentBuilder(project, executor); + if (configuration != null) { + builder.setRunnerAndSettings(runner, configuration); + } + else { + builder.setRunnerId(runner.getRunnerId()); + } + builder.setTarget(target).setContentToReuse(contentToReuse).setDataContext(context); + if (assignNewId) { + builder.assignNewId(); + } + if (runProfile != null) { + builder.setRunProfile(runProfile); + } runner.execute(builder.build()); } catch (ExecutionException e) { - ExecutionUtil.handleExecutionError(project, executor.getToolWindowId(), configuration.getConfiguration(), e); + String name = configuration != null ? configuration.getName() : null; + if (name == null && runProfile != null) name = runProfile.getName(); + if (name == null && contentToReuse != null) name = contentToReuse.getDisplayName(); + if (name == null) name = ""; + ExecutionUtil.handleExecutionError(project, executor.getToolWindowId(), name, e); } } diff --git a/platform/lang-impl/src/com/intellij/execution/impl/ExecutionManagerImpl.java b/platform/lang-impl/src/com/intellij/execution/impl/ExecutionManagerImpl.java index 2f2a0bb819bb..0eae2ad0d5dd 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/ExecutionManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/ExecutionManagerImpl.java @@ -364,23 +364,8 @@ public class ExecutionManagerImpl extends ExecutionManager implements ProjectCom @Nullable RunContentDescriptor descriptor) { Runnable restarter = descriptor != null ? descriptor.getRestarter() : null; if (runner != null && runProfile != null) { - try { - ExecutionEnvironmentBuilder builder = new ExecutionEnvironmentBuilder(project, executor); - builder.setRunProfile(runProfile).setRunnerSettings(runnerSettings).setContentToReuse(descriptor) - .setTarget(target).setConfigurationSettings(configurationPerRunnerSettings).setDataContext(context); - if (configuration != null) { - builder.setRunnerAndSettings(runner, configuration); - } else { - builder.setRunnerId(runner.getRunnerId()); - } - - runner.execute(builder.build()); - } - catch (RunCanceledByUserException ignore) { - } - catch (ExecutionException e1) { - Messages.showErrorDialog(project, e1.getMessage(), ExecutionBundle.message("restart.error.message.title")); - } + ProgramRunnerUtil.executeConfiguration(project, context, configuration, executor, target, descriptor, + configuration != null && configuration.isEditBeforeRun(), runner, runProfile, false); } else if (configuration != null) { ProgramRunnerUtil.executeConfiguration(project, context, configuration, executor, target, descriptor, true); diff --git a/platform/remote-servers/util/src/com/intellij/remoteServer/util/CloudDeploymentContextConfiguration.java b/platform/remote-servers/util/src/com/intellij/remoteServer/util/CloudDeploymentContextConfiguration.java deleted file mode 100644 index 0d1aa6d54e9d..000000000000 --- a/platform/remote-servers/util/src/com/intellij/remoteServer/util/CloudDeploymentContextConfiguration.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.intellij.remoteServer.util; - -import com.intellij.remoteServer.configuration.deployment.DeploymentConfigurationBase; - -/** - * Created by IntelliJ IDEA. - * User: michael.golubev - */ - -public class CloudDeploymentContextConfiguration> - extends DeploymentConfigurationBase { - - private String myContextRoot = "/"; - private boolean myDefaultContextRoot = true; - - public boolean isDefaultContextRoot() { - return myDefaultContextRoot; - } - - public void setDefaultContextRoot(boolean defaultContextRoot) { - myDefaultContextRoot = defaultContextRoot; - } - - public String getContextRoot() { - return myContextRoot; - } - - public void setContextRoot(String contextRoot) { - myContextRoot = contextRoot; - } -} diff --git a/platform/remote-servers/util/src/com/intellij/remoteServer/util/CloudDeploymentNameConfiguration.java b/platform/remote-servers/util/src/com/intellij/remoteServer/util/CloudDeploymentNameConfiguration.java new file mode 100644 index 000000000000..e60244ff97f7 --- /dev/null +++ b/platform/remote-servers/util/src/com/intellij/remoteServer/util/CloudDeploymentNameConfiguration.java @@ -0,0 +1,31 @@ +package com.intellij.remoteServer.util; + +import com.intellij.remoteServer.configuration.deployment.DeploymentConfigurationBase; + +/** + * Created by IntelliJ IDEA. + * User: michael.golubev + */ + +public class CloudDeploymentNameConfiguration> + extends DeploymentConfigurationBase implements DeploymentNameConfiguration { + + private String myDeploymentName = ""; + private boolean myDefaultDeploymentName = true; + + public boolean isDefaultDeploymentName() { + return myDefaultDeploymentName; + } + + public void setDefaultDeploymentName(boolean defaultDeploymentName) { + myDefaultDeploymentName = defaultDeploymentName; + } + + public String getDeploymentName() { + return myDeploymentName; + } + + public void setDeploymentName(String deploymentName) { + myDeploymentName = deploymentName; + } +} diff --git a/platform/remote-servers/util/src/com/intellij/remoteServer/util/CloudDeploymentNameEditor.form b/platform/remote-servers/util/src/com/intellij/remoteServer/util/CloudDeploymentNameEditor.form new file mode 100644 index 000000000000..648e58678a00 --- /dev/null +++ b/platform/remote-servers/util/src/com/intellij/remoteServer/util/CloudDeploymentNameEditor.form @@ -0,0 +1,36 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/platform/remote-servers/util/src/com/intellij/remoteServer/util/CloudDeploymentNameEditor.java b/platform/remote-servers/util/src/com/intellij/remoteServer/util/CloudDeploymentNameEditor.java new file mode 100644 index 000000000000..c6acd496eaa0 --- /dev/null +++ b/platform/remote-servers/util/src/com/intellij/remoteServer/util/CloudDeploymentNameEditor.java @@ -0,0 +1,69 @@ +/* + * Copyright 2000-2013 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.remoteServer.util; + +import com.intellij.openapi.options.ConfigurationException; +import com.intellij.openapi.options.SettingsEditor; +import com.intellij.openapi.util.Factory; +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +/** + * Created by IntelliJ IDEA. + * User: michael.golubev + */ +public class CloudDeploymentNameEditor extends SettingsEditor { + + private JTextField myNameTextField; + private JCheckBox myCustomNameCheckBox; + private JPanel myMainPanel; + + public CloudDeploymentNameEditor(Factory deploymentModelFactory, String labelCaption) { + super(deploymentModelFactory); + myCustomNameCheckBox.setText(labelCaption); + myCustomNameCheckBox.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + updateNameEnabled(); + } + }); + myCustomNameCheckBox.setSelected(false); + updateNameEnabled(); + } + + private void updateNameEnabled() { + myNameTextField.setEnabled(myCustomNameCheckBox.isSelected()); + } + + public void resetEditorFrom(T settings) { + myCustomNameCheckBox.setSelected(!settings.isDefaultDeploymentName()); + updateNameEnabled(); + myNameTextField.setText(settings.getDeploymentName()); + } + + public void applyEditorTo(T settings) throws ConfigurationException { + settings.setDefaultDeploymentName(!myCustomNameCheckBox.isSelected()); + settings.setDeploymentName(myNameTextField.getText()); + } + + @NotNull + protected JComponent createEditor() { + return myMainPanel; + } +} diff --git a/platform/remote-servers/util/src/com/intellij/remoteServer/util/CloudGitDeploymentRuntime.java b/platform/remote-servers/util/src/com/intellij/remoteServer/util/CloudGitDeploymentRuntime.java index 2dd8cd4a2ed1..07bac6e6f5e9 100644 --- a/platform/remote-servers/util/src/com/intellij/remoteServer/util/CloudGitDeploymentRuntime.java +++ b/platform/remote-servers/util/src/com/intellij/remoteServer/util/CloudGitDeploymentRuntime.java @@ -41,7 +41,7 @@ import java.io.IOException; * Created by IntelliJ IDEA. * User: michael.golubev */ -public abstract class CloudGitDeploymentRuntime> extends DeploymentRuntime { @@ -113,9 +113,9 @@ public abstract class CloudGitDeploymentRuntime, SC extends AC, diff --git a/platform/remote-servers/util/src/com/intellij/remoteServer/util/CloudSupportConfigurableBase.java b/platform/remote-servers/util/src/com/intellij/remoteServer/util/CloudSupportConfigurableBase.java index 107bcc2fb9b4..706942fff18b 100644 --- a/platform/remote-servers/util/src/com/intellij/remoteServer/util/CloudSupportConfigurableBase.java +++ b/platform/remote-servers/util/src/com/intellij/remoteServer/util/CloudSupportConfigurableBase.java @@ -46,7 +46,7 @@ import java.util.concurrent.atomic.AtomicReference; */ public abstract class CloudSupportConfigurableBase< SC extends CloudConfigurationBase, - DC extends CloudDeploymentContextConfiguration, + DC extends CloudDeploymentNameConfiguration, ST extends ServerType, SR extends CloudGitServerRuntimeInstanceBase> extends FrameworkSupportConfigurable { diff --git a/platform/remote-servers/util/src/com/intellij/remoteServer/util/DeploymentNameConfiguration.java b/platform/remote-servers/util/src/com/intellij/remoteServer/util/DeploymentNameConfiguration.java new file mode 100644 index 000000000000..f76d7c1aae65 --- /dev/null +++ b/platform/remote-servers/util/src/com/intellij/remoteServer/util/DeploymentNameConfiguration.java @@ -0,0 +1,15 @@ +package com.intellij.remoteServer.util; + +/** + * @author michael.golubev + */ +public interface DeploymentNameConfiguration { + + boolean isDefaultDeploymentName(); + + String getDeploymentName(); + + void setDefaultDeploymentName(boolean defaultContextRoot); + + void setDeploymentName(String contextRoot); +}