diff --git a/platform/remote-servers/api/src/com/intellij/remoteServer/configuration/deployment/DeploymentConfigurationManager.java b/platform/remote-servers/api/src/com/intellij/remoteServer/configuration/deployment/DeploymentConfigurationManager.java new file mode 100644 index 000000000000..bdc5918cb632 --- /dev/null +++ b/platform/remote-servers/api/src/com/intellij/remoteServer/configuration/deployment/DeploymentConfigurationManager.java @@ -0,0 +1,41 @@ +/* + * Copyright 2000-2014 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.configuration.deployment; + +import com.intellij.execution.RunnerAndConfigurationSettings; +import com.intellij.openapi.components.ServiceManager; +import com.intellij.openapi.project.Project; +import com.intellij.remoteServer.ServerType; +import com.intellij.remoteServer.configuration.RemoteServer; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +/** + * @author nik + */ +public abstract class DeploymentConfigurationManager { + @NotNull + public static DeploymentConfigurationManager getInstance(@NotNull Project project) { + return ServiceManager.getService(project, DeploymentConfigurationManager.class); + } + + @NotNull + public abstract List getDeploymentConfigurations(@NotNull ServerType serverType); + + public abstract void createAndRunConfiguration(@NotNull ServerType serverType, @Nullable RemoteServer remoteServer); +} diff --git a/platform/remote-servers/impl/src/META-INF/RemoteServers.xml b/platform/remote-servers/impl/src/META-INF/RemoteServers.xml index 2888727432c9..0ce5eae571a9 100644 --- a/platform/remote-servers/impl/src/META-INF/RemoteServers.xml +++ b/platform/remote-servers/impl/src/META-INF/RemoteServers.xml @@ -21,6 +21,8 @@ + diff --git a/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/configuration/deployment/DeploymentConfigurationManagerImpl.java b/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/configuration/deployment/DeploymentConfigurationManagerImpl.java new file mode 100644 index 000000000000..aaae16088ff1 --- /dev/null +++ b/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/configuration/deployment/DeploymentConfigurationManagerImpl.java @@ -0,0 +1,70 @@ +/* + * Copyright 2000-2014 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.impl.configuration.deployment; + +import com.intellij.execution.ProgramRunnerUtil; +import com.intellij.execution.RunManager; +import com.intellij.execution.RunManagerEx; +import com.intellij.execution.RunnerAndConfigurationSettings; +import com.intellij.execution.configuration.ConfigurationFactoryEx; +import com.intellij.execution.executors.DefaultRunExecutor; +import com.intellij.execution.impl.RunDialog; +import com.intellij.openapi.project.Project; +import com.intellij.remoteServer.ServerType; +import com.intellij.remoteServer.configuration.RemoteServer; +import com.intellij.remoteServer.configuration.deployment.DeploymentConfigurationManager; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +/** + * @author nik + */ +public class DeploymentConfigurationManagerImpl extends DeploymentConfigurationManager { + private final Project myProject; + + public DeploymentConfigurationManagerImpl(Project project) { + myProject = project; + } + + @NotNull + @Override + public List getDeploymentConfigurations(@NotNull ServerType serverType) { + final DeployToServerConfigurationType configurationType = DeployToServerConfigurationTypesRegistrar.getDeployConfigurationType(serverType); + return RunManager.getInstance(myProject).getConfigurationSettingsList(configurationType); + } + + + @Override + public void createAndRunConfiguration(@NotNull ServerType serverType, @Nullable RemoteServer remoteServer) { + DeployToServerConfigurationType configurationType = DeployToServerConfigurationTypesRegistrar.getDeployConfigurationType(serverType); + RunManagerEx runManager = RunManagerEx.getInstanceEx(myProject); + ConfigurationFactoryEx factory = configurationType.getFactory(); + RunnerAndConfigurationSettings settings = runManager.createRunConfiguration(configurationType.getDisplayName(), factory); + DeployToServerRunConfiguration runConfiguration = (DeployToServerRunConfiguration)settings.getConfiguration(); + if (remoteServer != null) { + runConfiguration.setServerName(remoteServer.getName()); + } + if (RunDialog.editConfiguration(myProject, settings, "Create Deployment Configuration", + DefaultRunExecutor.getRunExecutorInstance())) { + runManager.addConfiguration(settings, runManager.isConfigurationShared(settings), runManager.getBeforeRunTasks(runConfiguration), + false); + runManager.setSelectedConfiguration(settings); + ProgramRunnerUtil.executeConfiguration(myProject, settings, DefaultRunExecutor.getRunExecutorInstance()); + } + } +} diff --git a/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/runtime/ui/tree/ServersTreeStructure.java b/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/runtime/ui/tree/ServersTreeStructure.java index 5895be279f85..8beaa3de1abf 100644 --- a/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/runtime/ui/tree/ServersTreeStructure.java +++ b/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/runtime/ui/tree/ServersTreeStructure.java @@ -1,7 +1,8 @@ package com.intellij.remoteServer.impl.runtime.ui.tree; -import com.intellij.execution.*; -import com.intellij.execution.configuration.ConfigurationFactoryEx; +import com.intellij.execution.Executor; +import com.intellij.execution.ProgramRunnerUtil; +import com.intellij.execution.RunnerAndConfigurationSettings; import com.intellij.execution.executors.DefaultRunExecutor; import com.intellij.execution.impl.RunDialog; import com.intellij.execution.runners.ExecutionEnvironment; @@ -17,16 +18,13 @@ import com.intellij.openapi.ui.popup.JBPopupFactory; import com.intellij.openapi.ui.popup.ListPopup; import com.intellij.openapi.ui.popup.PopupStep; import com.intellij.openapi.ui.popup.util.BaseListPopupStep; -import com.intellij.openapi.util.EmptyRunnable; import com.intellij.openapi.util.Pair; 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.DeploymentConfigurationManager; import com.intellij.remoteServer.impl.configuration.RemoteServerConfigurable; -import com.intellij.remoteServer.impl.configuration.deployment.DeployToServerConfigurationType; -import com.intellij.remoteServer.impl.configuration.deployment.DeployToServerConfigurationTypesRegistrar; -import com.intellij.remoteServer.impl.configuration.deployment.DeployToServerRunConfiguration; import com.intellij.remoteServer.impl.runtime.deployment.DeploymentTaskImpl; import com.intellij.remoteServer.impl.runtime.log.DeploymentLogManagerImpl; import com.intellij.remoteServer.impl.runtime.log.LoggingHandlerImpl; @@ -176,8 +174,8 @@ public class ServersTreeStructure extends AbstractTreeStructureBase { @Override public void deploy(AnActionEvent e) { final ServerType serverType = getValue().getType(); - final DeployToServerConfigurationType configurationType = DeployToServerConfigurationTypesRegistrar.getDeployConfigurationType(serverType); - List list = new ArrayList(RunManager.getInstance(doGetProject()).getConfigurationSettingsList(configurationType)); + final DeploymentConfigurationManager configurationManager = DeploymentConfigurationManager.getInstance(doGetProject()); + List list = new ArrayList(configurationManager.getDeploymentConfigurations(serverType)); list.add(null); ListPopup popup = JBPopupFactory.getInstance().createListPopup(new BaseListPopupStep("Deploy Configuration", list) { @Override @@ -200,7 +198,7 @@ public class ServersTreeStructure extends AbstractTreeStructureBase { ProgramRunnerUtil.executeConfiguration(doGetProject(), selectedValue, DefaultRunExecutor.getRunExecutorInstance()); } else { - createNewConfiguration(configurationType); + configurationManager.createAndRunConfiguration(serverType, RemoteServerNode.this.getValue()); } } }); @@ -214,20 +212,6 @@ public class ServersTreeStructure extends AbstractTreeStructureBase { } } - private void createNewConfiguration(DeployToServerConfigurationType configurationType) { - RunManagerEx runManager = RunManagerEx.getInstanceEx(doGetProject()); - ConfigurationFactoryEx factory = configurationType.getFactory(); - RunnerAndConfigurationSettings settings = runManager.createRunConfiguration(configurationType.getDisplayName(), factory); - DeployToServerRunConfiguration runConfiguration = (DeployToServerRunConfiguration)settings.getConfiguration(); - runConfiguration.setServerName(getValue().getName()); - if (RunDialog.editConfiguration(doGetProject(), settings, "Create Deployment Configuration", - DefaultRunExecutor.getRunExecutorInstance())) { - runManager.addConfiguration(settings, runManager.isConfigurationShared(settings), runManager.getBeforeRunTasks(runConfiguration), false); - runManager.setSelectedConfiguration(settings); - ProgramRunnerUtil.executeConfiguration(doGetProject(), settings, DefaultRunExecutor.getRunExecutorInstance()); - } - } - @Override public boolean isStopActionEnabled() { return isConnected(); diff --git a/plugins/google-app-engine/source/com/intellij/appengine/actions/AppEngineUploader.java b/plugins/google-app-engine/source/com/intellij/appengine/actions/AppEngineUploader.java index 5c2a9893120b..4d5dcaea8fb0 100644 --- a/plugins/google-app-engine/source/com/intellij/appengine/actions/AppEngineUploader.java +++ b/plugins/google-app-engine/source/com/intellij/appengine/actions/AppEngineUploader.java @@ -24,24 +24,13 @@ import com.intellij.appengine.facet.AppEngineFacet; import com.intellij.appengine.sdk.AppEngineSdk; import com.intellij.appengine.util.AppEngineUtil; import com.intellij.execution.ExecutionException; -import com.intellij.execution.ExecutionManager; -import com.intellij.execution.Executor; import com.intellij.execution.configurations.CommandLineBuilder; import com.intellij.execution.configurations.GeneralCommandLine; import com.intellij.execution.configurations.JavaParameters; import com.intellij.execution.configurations.ParametersList; -import com.intellij.execution.executors.DefaultRunExecutor; -import com.intellij.execution.filters.TextConsoleBuilderFactory; import com.intellij.execution.process.*; import com.intellij.execution.ui.ConsoleView; import com.intellij.execution.ui.ConsoleViewContentType; -import com.intellij.execution.ui.RunContentDescriptor; -import com.intellij.execution.ui.RunnerLayoutUi; -import com.intellij.execution.ui.actions.CloseAction; -import com.intellij.openapi.actionSystem.ActionManager; -import com.intellij.openapi.actionSystem.ActionPlaces; -import com.intellij.openapi.actionSystem.DefaultActionGroup; -import com.intellij.openapi.actionSystem.IdeActions; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.Result; import com.intellij.openapi.command.WriteCommandAction; @@ -96,7 +85,7 @@ public class AppEngineUploader { private final LoggingHandler myLoggingHandler; private AppEngineUploader(Project project, Artifact artifact, AppEngineFacet appEngineFacet, AppEngineSdk sdk, AppEngineAuthData authData, - ServerRuntimeInstance.DeploymentOperationCallback callback, @Nullable LoggingHandler loggingHandler) { + ServerRuntimeInstance.DeploymentOperationCallback callback, @NotNull LoggingHandler loggingHandler) { myProject = project; myArtifact = artifact; myAppEngineFacet = appEngineFacet; @@ -109,8 +98,8 @@ public class AppEngineUploader { @Nullable public static AppEngineUploader createUploader(@NotNull Project project, @NotNull Artifact artifact, - @Nullable AppEngineServerConfiguration configuration, - @NotNull ServerRuntimeInstance.DeploymentOperationCallback callback, @Nullable LoggingHandler loggingHandler) { + @NotNull AppEngineServerConfiguration configuration, + @NotNull ServerRuntimeInstance.DeploymentOperationCallback callback, @NotNull LoggingHandler loggingHandler) { final String explodedPath = artifact.getOutputPath(); if (explodedPath == null) { callback.errorOccurred("Output path isn't specified for '" + artifact.getName() + "' artifact"); @@ -233,26 +222,8 @@ public class AppEngineUploader { } final ProcessHandler processHandler = new OSProcessHandler(process, commandLine.getCommandLineString()); - if (myLoggingHandler == null) { - final Executor executor = DefaultRunExecutor.getRunExecutorInstance(); - final ConsoleView console = TextConsoleBuilderFactory.getInstance().createBuilder(myProject).getConsole(); - final RunnerLayoutUi ui = RunnerLayoutUi.Factory.getInstance(myProject).create("Upload", "Upload Application", "Upload Application", myProject); - final DefaultActionGroup group = new DefaultActionGroup(); - ui.getOptions().setLeftToolbar(group, ActionPlaces.UNKNOWN); - ui.addContent(ui.createContent("upload", console.getComponent(), "Upload Application", null, console.getPreferredFocusableComponent())); - - processHandler.addProcessListener(new MyProcessListener(processHandler, console, null)); - console.attachToProcess(processHandler); - final RunContentDescriptor contentDescriptor = new RunContentDescriptor(console, processHandler, ui.getComponent(), "Upload Application"); - group.add(ActionManager.getInstance().getAction(IdeActions.ACTION_STOP_PROGRAM)); - group.add(new CloseAction(executor, contentDescriptor, myProject)); - - ExecutionManager.getInstance(myProject).getContentManager().showRunContent(executor, contentDescriptor); - } - else { - processHandler.addProcessListener(new MyProcessListener(processHandler, null, myLoggingHandler)); - myLoggingHandler.attachToProcess(processHandler); - } + processHandler.addProcessListener(new MyProcessListener(processHandler, null, myLoggingHandler)); + myLoggingHandler.attachToProcess(processHandler); processHandler.startNotify(); } diff --git a/plugins/google-app-engine/source/com/intellij/appengine/actions/UploadApplicationAction.java b/plugins/google-app-engine/source/com/intellij/appengine/actions/UploadApplicationAction.java index 43d191ac5e2a..2ee134dda4b7 100644 --- a/plugins/google-app-engine/source/com/intellij/appengine/actions/UploadApplicationAction.java +++ b/plugins/google-app-engine/source/com/intellij/appengine/actions/UploadApplicationAction.java @@ -15,19 +15,24 @@ */ package com.intellij.appengine.actions; -import com.intellij.CommonBundle; +import com.intellij.appengine.cloud.AppEngineCloudType; +import com.intellij.appengine.cloud.AppEngineServerConfiguration; import com.intellij.appengine.facet.AppEngineFacet; -import com.intellij.appengine.util.AppEngineUtil; +import com.intellij.execution.ProgramRunnerUtil; +import com.intellij.execution.RunnerAndConfigurationSettings; +import com.intellij.execution.executors.DefaultRunExecutor; import com.intellij.facet.ProjectFacetManager; +import com.intellij.ide.util.PropertiesComponent; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; -import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.project.Project; -import com.intellij.openapi.ui.Messages; -import com.intellij.packaging.artifacts.Artifact; -import com.intellij.remoteServer.runtime.deployment.DeploymentRuntime; -import com.intellij.remoteServer.runtime.deployment.ServerRuntimeInstance; +import com.intellij.remoteServer.configuration.RemoteServer; +import com.intellij.remoteServer.configuration.RemoteServersManager; +import com.intellij.remoteServer.configuration.deployment.DeploymentConfigurationManager; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.List; @@ -35,52 +40,52 @@ import java.util.List; * @author nik */ public class UploadApplicationAction extends AnAction { + public static final String LAST_RUN_CONFIGURATION_PROPERTY = "JAVA_APP_ENGINE_LAST_RUN_CONFIGURATION"; + @Override public void update(AnActionEvent e) { final Project project = e.getProject(); - e.getPresentation().setVisible(project != null && !ProjectFacetManager.getInstance(project).getFacets(AppEngineFacet.ID).isEmpty()); - } + e.getPresentation().setEnabledAndVisible( + project != null && !ProjectFacetManager.getInstance(project).getFacets(AppEngineFacet.ID).isEmpty()); - public void actionPerformed(AnActionEvent e) { - final Project project = e.getProject(); if (project != null) { - final List artifacts = AppEngineUtil.collectAppEngineArtifacts(project, true); - if (artifacts.isEmpty()) { - Messages.showErrorDialog(project, "No Web or EAR artifacts with AppEngine found in the project", CommonBundle.getErrorTitle()); - return; - } - Artifact artifact; - if (artifacts.size() == 1) { - artifact = artifacts.get(0); + String text; + RunnerAndConfigurationSettings configurationToRun = getConfigurationToRun(project); + if (configurationToRun == null) { + text = getTemplatePresentation().getText(); } else { - final UploadApplicationDialog dialog = new UploadApplicationDialog(project); - dialog.show(); - artifact = dialog.getSelectedArtifact(); - if (!dialog.isOK() || artifact == null) { - return; - } - } - final AppEngineUploader uploader = AppEngineUploader.createUploader(project, artifact, null, new ServerRuntimeInstance.DeploymentOperationCallback() { - @Override - public void succeeded(@NotNull DeploymentRuntime deploymentRuntime) { - - } - - @Override - public void errorOccurred(@NotNull final String errorMessage) { - ApplicationManager.getApplication().invokeLater(new Runnable() { - public void run() { - Messages.showErrorDialog(project, errorMessage, CommonBundle.getErrorTitle()); - } - }); - } - }, null); - if (uploader != null) { - uploader.startUploading(); + text = "Upload App Engine Application '" + configurationToRun.getName() + "'"; } + e.getPresentation().setText(text); } } + @Nullable + private static RunnerAndConfigurationSettings getConfigurationToRun(@NotNull Project project) { + List configurations = DeploymentConfigurationManager.getInstance(project).getDeploymentConfigurations(AppEngineCloudType.getInstance()); + String lastName = PropertiesComponent.getInstance(project).getValue(LAST_RUN_CONFIGURATION_PROPERTY); + if (lastName != null) { + for (RunnerAndConfigurationSettings configuration : configurations) { + if (configuration.getName().equals(lastName)) { + return configuration; + } + } + } + return ContainerUtil.getFirstItem(configurations); + } + + public void actionPerformed(AnActionEvent e) { + final Project project = e.getRequiredData(CommonDataKeys.PROJECT); + RunnerAndConfigurationSettings configurationToRun = getConfigurationToRun(project); + if (configurationToRun != null) { + ProgramRunnerUtil.executeConfiguration(project, configurationToRun, DefaultRunExecutor.getRunExecutorInstance()); + } + else { + AppEngineCloudType serverType = AppEngineCloudType.getInstance(); + List> servers = RemoteServersManager.getInstance().getServers(serverType); + DeploymentConfigurationManager.getInstance(project).createAndRunConfiguration(serverType, ContainerUtil.getFirstItem(servers)); + } + } } diff --git a/plugins/google-app-engine/source/com/intellij/appengine/actions/UploadApplicationDialog.form b/plugins/google-app-engine/source/com/intellij/appengine/actions/UploadApplicationDialog.form deleted file mode 100644 index 9e3d098b6b61..000000000000 --- a/plugins/google-app-engine/source/com/intellij/appengine/actions/UploadApplicationDialog.form +++ /dev/null @@ -1,33 +0,0 @@ - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/plugins/google-app-engine/source/com/intellij/appengine/actions/UploadApplicationDialog.java b/plugins/google-app-engine/source/com/intellij/appengine/actions/UploadApplicationDialog.java deleted file mode 100644 index 2f57ded98f13..000000000000 --- a/plugins/google-app-engine/source/com/intellij/appengine/actions/UploadApplicationDialog.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * 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.appengine.actions; - -import com.intellij.appengine.util.AppEngineUtil; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.ui.DialogWrapper; -import com.intellij.packaging.artifacts.Artifact; - -import javax.swing.*; - -/** - * @author nik - */ -public class UploadApplicationDialog extends DialogWrapper { - private JPanel myMainPanel; - private JComboBox myArtifactComboBox; - - public UploadApplicationDialog(Project project) { - super(project, true); - setTitle("Upload Application"); - setModal(true); - AppEngineUtil.setupAppEngineArtifactCombobox(project, myArtifactComboBox, true); - setOKButtonText("Upload"); - init(); - } - - public Artifact getSelectedArtifact() { - return (Artifact)myArtifactComboBox.getSelectedItem(); - } - - protected JComponent createCenterPanel() { - return myMainPanel; - } -} diff --git a/plugins/google-app-engine/source/com/intellij/appengine/cloud/AppEngineCloudConfigurable.java b/plugins/google-app-engine/source/com/intellij/appengine/cloud/AppEngineCloudConfigurable.java index 6d497e0c001b..cd09fd9291f9 100644 --- a/plugins/google-app-engine/source/com/intellij/appengine/cloud/AppEngineCloudConfigurable.java +++ b/plugins/google-app-engine/source/com/intellij/appengine/cloud/AppEngineCloudConfigurable.java @@ -16,8 +16,10 @@ package com.intellij.appengine.cloud; import com.intellij.appengine.facet.AppEngineAccountDialog; +import com.intellij.ide.util.PropertiesComponent; import com.intellij.openapi.options.Configurable; import com.intellij.openapi.project.Project; +import com.intellij.openapi.project.ProjectManager; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.text.StringUtil; import com.intellij.ui.DocumentAdapter; @@ -35,6 +37,7 @@ import java.awt.event.ActionListener; * @author nik */ public class AppEngineCloudConfigurable implements Configurable { + public static final String EMAIL_KEY = "GOOGLE_APP_ENGINE_ACCOUNT_EMAIL"; private final AppEngineServerConfiguration myConfiguration; @Nullable private final Project myProject; private JTextField myEmailField; @@ -95,6 +98,9 @@ public class AppEngineCloudConfigurable implements Configurable { public void reset() { String email = myConfiguration.getEmail(); + if (email == null) { + email = getOldEmail(); + } myEmailField.setText(StringUtil.notNullize(email)); if (myConfiguration.isOAuth2()) { myOAuthLoginButton.setSelected(true); @@ -105,8 +111,31 @@ public class AppEngineCloudConfigurable implements Configurable { updateControls(); } + @Nullable + private static String getOldEmail() { + for (Project project : ProjectManager.getInstance().getOpenProjects()) { + String value = PropertiesComponent.getInstance(project).getValue(EMAIL_KEY); + if (value != null) { + return value; + } + } + return null; + } + + private static void removeOldEmail(@NotNull String email) { + for (Project project : ProjectManager.getInstance().getOpenProjects()) { + String value = PropertiesComponent.getInstance(project).getValue(EMAIL_KEY); + if (email.equals(value)) { + PropertiesComponent.getInstance(project).unsetValue(EMAIL_KEY); + } + } + } + public void apply() { String email = getEmail(); + if (email != null) { + removeOldEmail(email); + } myConfiguration.setEmail(email); myConfiguration.setOAuth2(isOAuth2()); String password = getPassword(); diff --git a/plugins/google-app-engine/source/com/intellij/appengine/cloud/AppEngineCloudType.java b/plugins/google-app-engine/source/com/intellij/appengine/cloud/AppEngineCloudType.java index 58c1b1559bc6..ae037a3cd4b1 100644 --- a/plugins/google-app-engine/source/com/intellij/appengine/cloud/AppEngineCloudType.java +++ b/plugins/google-app-engine/source/com/intellij/appengine/cloud/AppEngineCloudType.java @@ -39,6 +39,9 @@ import java.util.List; * @author nik */ public class AppEngineCloudType extends ServerType { + public static AppEngineCloudType getInstance() { + return EP_NAME.findExtension(AppEngineCloudType.class); + } public AppEngineCloudType() { super("google-app-engine"); diff --git a/plugins/google-app-engine/source/com/intellij/appengine/facet/AppEngineAccountDialog.java b/plugins/google-app-engine/source/com/intellij/appengine/facet/AppEngineAccountDialog.java index 7b344b09b170..203f0c51a519 100644 --- a/plugins/google-app-engine/source/com/intellij/appengine/facet/AppEngineAccountDialog.java +++ b/plugins/google-app-engine/source/com/intellij/appengine/facet/AppEngineAccountDialog.java @@ -20,7 +20,6 @@ import com.intellij.appengine.cloud.AppEngineCloudConfigurable; import com.intellij.appengine.cloud.AppEngineServerConfiguration; import com.intellij.ide.passwordSafe.PasswordSafe; import com.intellij.ide.passwordSafe.PasswordSafeException; -import com.intellij.ide.util.PropertiesComponent; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.options.ShowSettingsUtil; import com.intellij.openapi.project.Project; @@ -34,16 +33,14 @@ import org.jetbrains.annotations.Nullable; public class AppEngineAccountDialog { private static final Logger LOG = Logger.getInstance(AppEngineAccountDialog.class); private static final String PASSWORD_KEY = "GOOGLE_APP_ENGINE_PASSWORD"; - private static final String EMAIL_KEY = "GOOGLE_APP_ENGINE_ACCOUNT_EMAIL"; @Nullable - public static AppEngineAuthData createAuthData(@NotNull Project project, @Nullable AppEngineServerConfiguration stored) { - AppEngineServerConfiguration configuration = stored != null ? stored : new AppEngineServerConfiguration(); + public static AppEngineAuthData createAuthData(@NotNull Project project, @NotNull AppEngineServerConfiguration configuration) { if (configuration.isOAuth2()) { return AppEngineAuthData.oauth2(); } - String email = getStoredEmail(stored, project); + String email = configuration.getEmail(); if (!StringUtil.isEmpty(email)) { String password = getStoredPassword(project, email); if (!StringUtil.isEmpty(password)) { @@ -62,14 +59,6 @@ public class AppEngineAccountDialog { return AppEngineAuthData.login(configurable.getEmail(), configurable.getPassword()); } - @Nullable - private static String getStoredEmail(@Nullable AppEngineServerConfiguration configuration, @NotNull Project project) { - if (configuration != null) { - return configuration.getEmail(); - } - return PropertiesComponent.getInstance(project).getValue(EMAIL_KEY);//todo[nik] remove this - } - public static void storePassword(@NotNull String email, @NotNull String password, @Nullable Project project) { try { PasswordSafe.getInstance().storePassword(project, AppEngineAccountDialog.class, getPasswordKey(email), password);