Google App Engine: 'Upload' action now creates deployment run configuration to simplify migration (IDEA-111971), obsolete deployment code removed

This commit is contained in:
nik
2014-09-23 17:29:21 +04:00
parent c994c9de72
commit b07b62b32b
11 changed files with 207 additions and 194 deletions
@@ -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<RunnerAndConfigurationSettings> getDeploymentConfigurations(@NotNull ServerType<?> serverType);
public abstract void createAndRunConfiguration(@NotNull ServerType<?> serverType, @Nullable RemoteServer<?> remoteServer);
}
@@ -21,6 +21,8 @@
<programRunner implementation="com.intellij.remoteServer.impl.runtime.DeployToServerRunner"/>
<projectService serviceInterface="com.intellij.remoteServer.runtime.ui.RemoteServersView"
serviceImplementation="com.intellij.remoteServer.impl.runtime.ui.RemoteServersViewImpl"/>
<projectService serviceInterface="com.intellij.remoteServer.configuration.deployment.DeploymentConfigurationManager"
serviceImplementation="com.intellij.remoteServer.impl.configuration.deployment.DeploymentConfigurationManagerImpl"/>
<remoteServer.deploymentSource.type implementation="com.intellij.remoteServer.impl.configuration.deployment.ModuleDeploymentSourceType"/>
</extensions>
<application-components>
@@ -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<RunnerAndConfigurationSettings> 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());
}
}
}
@@ -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<? extends ServerConfiguration> serverType = getValue().getType();
final DeployToServerConfigurationType configurationType = DeployToServerConfigurationTypesRegistrar.getDeployConfigurationType(serverType);
List<RunnerAndConfigurationSettings> list = new ArrayList<RunnerAndConfigurationSettings>(RunManager.getInstance(doGetProject()).getConfigurationSettingsList(configurationType));
final DeploymentConfigurationManager configurationManager = DeploymentConfigurationManager.getInstance(doGetProject());
List<RunnerAndConfigurationSettings> list = new ArrayList<RunnerAndConfigurationSettings>(configurationManager.getDeploymentConfigurations(serverType));
list.add(null);
ListPopup popup = JBPopupFactory.getInstance().createListPopup(new BaseListPopupStep<RunnerAndConfigurationSettings>("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();
@@ -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();
}
@@ -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<Artifact> 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<RunnerAndConfigurationSettings> 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<RemoteServer<AppEngineServerConfiguration>> servers = RemoteServersManager.getInstance().getServers(serverType);
DeploymentConfigurationManager.getInstance(project).createAndRunConfiguration(serverType, ContainerUtil.getFirstItem(servers));
}
}
}
@@ -1,33 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.intellij.appengine.actions.UploadApplicationDialog">
<grid id="27dc6" binding="myMainPanel" layout-manager="GridLayoutManager" row-count="2" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
<margin top="0" left="0" bottom="0" right="0"/>
<constraints>
<xy x="20" y="20" width="500" height="400"/>
</constraints>
<properties/>
<border type="none"/>
<children>
<component id="4f782" class="javax.swing.JLabel">
<constraints>
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
</constraints>
<properties>
<labelFor value="89e0d"/>
<text value="&amp;Web or EAR Artifact to upload:"/>
</properties>
</component>
<vspacer id="b1ee3">
<constraints>
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
</constraints>
</vspacer>
<component id="89e0d" class="javax.swing.JComboBox" binding="myArtifactComboBox">
<constraints>
<grid row="0" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="2" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
</constraints>
<properties/>
</component>
</children>
</grid>
</form>
@@ -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;
}
}
@@ -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();
@@ -39,6 +39,9 @@ import java.util.List;
* @author nik
*/
public class AppEngineCloudType extends ServerType<AppEngineServerConfiguration> {
public static AppEngineCloudType getInstance() {
return EP_NAME.findExtension(AppEngineCloudType.class);
}
public AppEngineCloudType() {
super("google-app-engine");
@@ -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);