diff --git a/platform/lang-impl/src/com/intellij/execution/impl/SingleConfigurationConfigurable.java b/platform/lang-impl/src/com/intellij/execution/impl/SingleConfigurationConfigurable.java index 4e7c25168d35..930fc2868359 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/SingleConfigurationConfigurable.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/SingleConfigurationConfigurable.java @@ -145,8 +145,9 @@ public final class SingleConfigurationConfigurable getSerializer(); + + public abstract void checkConfiguration(RemoteServer server, DeploymentSource deploymentSource) + throws RuntimeConfigurationException; } diff --git a/platform/remote-servers/api/src/com/intellij/remoteServer/configuration/deployment/DeploymentConfigurationBase.java b/platform/remote-servers/api/src/com/intellij/remoteServer/configuration/deployment/DeploymentConfigurationBase.java index 4384bcf5a290..57ed48b10827 100644 --- a/platform/remote-servers/api/src/com/intellij/remoteServer/configuration/deployment/DeploymentConfigurationBase.java +++ b/platform/remote-servers/api/src/com/intellij/remoteServer/configuration/deployment/DeploymentConfigurationBase.java @@ -1,13 +1,16 @@ package com.intellij.remoteServer.configuration.deployment; +import com.intellij.execution.configurations.RuntimeConfigurationException; import com.intellij.openapi.components.PersistentStateComponent; +import com.intellij.remoteServer.configuration.RemoteServer; import com.intellij.util.xmlb.XmlSerializerUtil; import org.jetbrains.annotations.Nullable; /** * @author nik */ -public class DeploymentConfigurationBase extends DeploymentConfiguration implements PersistentStateComponent { +public class DeploymentConfigurationBase extends DeploymentConfiguration + implements PersistentStateComponent { @Override public PersistentStateComponent getSerializer() { return this; @@ -23,4 +26,9 @@ public class DeploymentConfigurationBase server, DeploymentSource deploymentSource) throws RuntimeConfigurationException { + + } } diff --git a/platform/remote-servers/api/src/com/intellij/remoteServer/configuration/deployment/DummyDeploymentConfiguration.java b/platform/remote-servers/api/src/com/intellij/remoteServer/configuration/deployment/DummyDeploymentConfiguration.java index a4f3f8e866a4..a49921bfa786 100644 --- a/platform/remote-servers/api/src/com/intellij/remoteServer/configuration/deployment/DummyDeploymentConfiguration.java +++ b/platform/remote-servers/api/src/com/intellij/remoteServer/configuration/deployment/DummyDeploymentConfiguration.java @@ -1,6 +1,8 @@ package com.intellij.remoteServer.configuration.deployment; +import com.intellij.execution.configurations.RuntimeConfigurationException; import com.intellij.openapi.components.PersistentStateComponent; +import com.intellij.remoteServer.configuration.RemoteServer; import org.jetbrains.annotations.Nullable; /** @@ -21,4 +23,9 @@ public class DummyDeploymentConfiguration extends DeploymentConfiguration implem @Override public void loadState(DummyDeploymentConfiguration state) { } + + @Override + public void checkConfiguration(RemoteServer server, DeploymentSource deploymentSource) throws RuntimeConfigurationException { + + } } diff --git a/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/configuration/deployment/DeployToServerRunConfiguration.java b/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/configuration/deployment/DeployToServerRunConfiguration.java index d95e078e0572..e27e18d7beec 100644 --- a/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/configuration/deployment/DeployToServerRunConfiguration.java +++ b/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/configuration/deployment/DeployToServerRunConfiguration.java @@ -32,7 +32,10 @@ import com.intellij.remoteServer.ServerType; import com.intellij.remoteServer.configuration.RemoteServer; import com.intellij.remoteServer.configuration.RemoteServersManager; import com.intellij.remoteServer.configuration.ServerConfiguration; -import com.intellij.remoteServer.configuration.deployment.*; +import com.intellij.remoteServer.configuration.deployment.DeploymentConfiguration; +import com.intellij.remoteServer.configuration.deployment.DeploymentConfigurator; +import com.intellij.remoteServer.configuration.deployment.DeploymentSource; +import com.intellij.remoteServer.configuration.deployment.DeploymentSourceType; import com.intellij.remoteServer.impl.runtime.DeployToServerState; import com.intellij.util.xmlb.SkipDefaultValuesSerializationFilters; import com.intellij.util.xmlb.XmlSerializer; @@ -91,7 +94,7 @@ public class DeployToServerRunConfiguration server = RemoteServersManager.getInstance().findByName(serverName, myServerType); + RemoteServer server = findServer(); if (server == null) { throw new ExecutionException("Server '" + serverName + " not found"); } @@ -105,6 +108,25 @@ public class DeployToServerRunConfiguration server = findServer(); + if (server == null) { + return; + } + + if (myDeploymentSource == null) { + return; + } + + myDeploymentConfiguration.checkConfiguration(server, myDeploymentSource); + } + + private RemoteServer findServer() { + String serverName = getServerName(); + if (serverName == null) { + return null; + } + + return RemoteServersManager.getInstance().findByName(serverName, myServerType); } public void setServerName(String serverName) { diff --git a/plugins/git4idea/remote-servers-git/src/com/intellij/remoteServer/util/CloudGitDeploymentChecker.java b/plugins/git4idea/remote-servers-git/src/com/intellij/remoteServer/util/CloudGitDeploymentChecker.java index df40458aa36b..ed0bf6809113 100644 --- a/plugins/git4idea/remote-servers-git/src/com/intellij/remoteServer/util/CloudGitDeploymentChecker.java +++ b/plugins/git4idea/remote-servers-git/src/com/intellij/remoteServer/util/CloudGitDeploymentChecker.java @@ -15,9 +15,9 @@ */ package com.intellij.remoteServer.util; +import com.intellij.execution.configurations.RuntimeConfigurationException; import com.intellij.execution.configurations.RuntimeConfigurationWarning; import com.intellij.openapi.module.Module; -import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.vfs.LocalFileSystem; @@ -29,7 +29,6 @@ import com.intellij.remoteServer.configuration.deployment.DeploymentSource; import com.intellij.remoteServer.configuration.deployment.ModuleDeploymentSource; import git4idea.GitUtil; import git4idea.repo.GitRepository; -import git4idea.repo.GitRepositoryManager; import java.io.File; import java.util.List; @@ -42,57 +41,44 @@ public class CloudGitDeploymentChecker< SC extends ServerConfigurationBase, SR extends CloudMultiSourceServerRuntimeInstance> { - private GitRepositoryManager myGitRepositoryManager; - - private final DeploymentSource myDeploymentSource; - private final RemoteServer myServer; - private final CloudDeploymentNameEditor mySettingsEditor; private final CloudGitDeploymentDetector myDetector; - public CloudGitDeploymentChecker(DeploymentSource deploymentSource, - RemoteServer server, - CloudDeploymentNameEditor settingsEditor, - CloudGitDeploymentDetector detector) { - myDeploymentSource = deploymentSource; - myServer = server; - mySettingsEditor = settingsEditor; + public CloudGitDeploymentChecker(CloudGitDeploymentDetector detector) { myDetector = detector; } - public void checkGitUrl(final T settings) throws ConfigurationException { - if (!(myDeploymentSource instanceof ModuleDeploymentSource)) { + public void checkGitUrl(final RemoteServer server, + final DeploymentSource deploymentSource, + final T settings) throws RuntimeConfigurationException { + if (!(deploymentSource instanceof ModuleDeploymentSource)) { return; } - ModuleDeploymentSource moduleSource = (ModuleDeploymentSource)myDeploymentSource; + ModuleDeploymentSource moduleSource = (ModuleDeploymentSource)deploymentSource; Module module = moduleSource.getModule(); if (module == null) { return; } - File contentRootFile = myDeploymentSource.getFile(); + File contentRootFile = deploymentSource.getFile(); if (contentRootFile == null) { return; } final Project project = module.getProject(); - if (myGitRepositoryManager == null) { - myGitRepositoryManager = GitUtil.getRepositoryManager(project); - } - VirtualFile contentRoot = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(contentRootFile); if (contentRoot == null) { return; } - GitRepository repository = myGitRepositoryManager.getRepositoryForRoot(contentRoot); + GitRepository repository = GitUtil.getRepositoryManager(project).getRepositoryForRoot(contentRoot); if (repository == null) { return; } - String expectedName = settings.getDeploymentSourceName(myDeploymentSource); + String expectedName = settings.getDeploymentSourceName(deploymentSource); List appNames = myDetector.collectApplicationNames(repository); if (appNames.isEmpty() || appNames.contains(expectedName)) { @@ -107,24 +93,22 @@ public class CloudGitDeploymentChecker< @Override public void run() { CloudGitApplication application - = new CloudConnectionTask(project, "Searching for application", myServer) { + = new CloudConnectionTask(project, "Searching for application", server) { @Override protected CloudGitApplication run(SR serverRuntime) throws ServerRuntimeException { CloudGitDeploymentRuntime deploymentRuntime - = (CloudGitDeploymentRuntime)serverRuntime.createDeploymentRuntime(myDeploymentSource, settings, project); + = (CloudGitDeploymentRuntime)serverRuntime.createDeploymentRuntime(deploymentSource, settings, project); return deploymentRuntime.findApplication4Repository(); } }.performSync(); if (application == null) { - Messages.showErrorDialog(mySettingsEditor.getComponent(), "No application matching repository URL(s) found in account"); + Messages.showErrorDialog(project, "No application matching repository URL(s) found in account", server.getName()); } else { - T fixedSettings = mySettingsEditor.getFactory().create(); - fixedSettings.setDefaultDeploymentName(false); - fixedSettings.setDeploymentName(application.getName()); - mySettingsEditor.resetFrom(fixedSettings); + settings.setDefaultDeploymentName(false); + settings.setDeploymentName(application.getName()); } } });