blob: 0ec07d4b76eb31400cffec17dbed9fe9f227d26e [file] [log] [blame]
/*
* 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.cloud;
import com.intellij.appengine.actions.AppEngineUploader;
import com.intellij.appengine.util.AppEngineUtil;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.options.SettingsEditor;
import com.intellij.openapi.options.UnnamedConfigurable;
import com.intellij.openapi.project.Project;
import com.intellij.packaging.artifacts.Artifact;
import com.intellij.remoteServer.ServerType;
import com.intellij.remoteServer.configuration.RemoteServer;
import com.intellij.remoteServer.configuration.deployment.*;
import com.intellij.remoteServer.runtime.ServerConnector;
import com.intellij.remoteServer.runtime.ServerTaskExecutor;
import com.intellij.remoteServer.runtime.deployment.DeploymentLogManager;
import com.intellij.remoteServer.runtime.deployment.DeploymentTask;
import com.intellij.remoteServer.runtime.deployment.ServerRuntimeInstance;
import com.intellij.util.ui.FormBuilder;
import icons.GoogleAppEngineIcons;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.awt.*;
import java.util.List;
/**
* @author nik
*/
public class AppEngineCloudType extends ServerType<AppEngineServerConfiguration> {
public AppEngineCloudType() {
super("google-app-engine");
}
@NotNull
@Override
public String getPresentableName() {
return "Google App Engine";
}
@NotNull
@Override
public Icon getIcon() {
return GoogleAppEngineIcons.AppEngine;
}
@NotNull
@Override
public AppEngineServerConfiguration createDefaultConfiguration() {
return new AppEngineServerConfiguration();
}
@NotNull
@Override
public UnnamedConfigurable createConfigurable(@NotNull AppEngineServerConfiguration configuration) {
return new AppEngineCloudConfigurable(configuration);
}
@NotNull
@Override
public ServerConnector<?> createConnector(@NotNull AppEngineServerConfiguration configuration,
@NotNull ServerTaskExecutor asyncTasksExecutor) {
return new AppEngineServerConnector(configuration);
}
@NotNull
@Override
public DeploymentConfigurator createDeploymentConfigurator(Project project) {
return new AppEngineDeploymentConfigurator(project);
}
private static class AppEngineCloudConfigurable implements UnnamedConfigurable {
private final JTextField myEmailField;
private final AppEngineServerConfiguration myConfiguration;
public AppEngineCloudConfigurable(AppEngineServerConfiguration configuration) {
myConfiguration = configuration;
myEmailField = new JTextField();
myEmailField.setPreferredSize(new Dimension(250, myEmailField.getPreferredSize().height));
}
@Nullable
@Override
public JComponent createComponent() {
return FormBuilder.createFormBuilder().addLabeledComponent("E-mail:", myEmailField).getPanel();
}
@Override
public boolean isModified() {
return !myEmailField.getText().equals(myConfiguration.getEmail());
}
@Override
public void apply() throws ConfigurationException {
myConfiguration.setEmail(myEmailField.getText());
}
@Override
public void reset() {
myEmailField.setText(myConfiguration.getEmail());
}
@Override
public void disposeUIResources() {
}
}
private static class AppEngineDeploymentConfigurator extends DeploymentConfigurator<DummyDeploymentConfiguration, AppEngineServerConfiguration> {
private final Project myProject;
public AppEngineDeploymentConfigurator(Project project) {
myProject = project;
}
@NotNull
@Override
public List<DeploymentSource> getAvailableDeploymentSources() {
List<Artifact> artifacts = AppEngineUtil.collectWebArtifacts(myProject, true);
return JavaDeploymentSourceUtil.getInstance().createArtifactDeploymentSources(myProject, artifacts);
}
@NotNull
@Override
public DummyDeploymentConfiguration createDefaultConfiguration(@NotNull DeploymentSource source) {
return new DummyDeploymentConfiguration();
}
@Override
public SettingsEditor<DummyDeploymentConfiguration> createEditor(@NotNull DeploymentSource source, @NotNull RemoteServer<AppEngineServerConfiguration> server) {
return null;
}
}
private static class AppEngineServerConnector extends ServerConnector<DummyDeploymentConfiguration> {
private final AppEngineServerConfiguration myConfiguration;
public AppEngineServerConnector(AppEngineServerConfiguration configuration) {
myConfiguration = configuration;
}
@Override
public void connect(@NotNull final ConnectionCallback<DummyDeploymentConfiguration> callback) {
callback.connected(new AppEngineRuntimeInstance(myConfiguration));
}
}
private static class AppEngineRuntimeInstance extends ServerRuntimeInstance<DummyDeploymentConfiguration> {
private final AppEngineServerConfiguration myConfiguration;
public AppEngineRuntimeInstance(AppEngineServerConfiguration configuration) {
myConfiguration = configuration;
}
@Override
public void deploy(@NotNull DeploymentTask<DummyDeploymentConfiguration> task, @NotNull DeploymentLogManager logManager,
@NotNull DeploymentOperationCallback callback) {
Artifact artifact = ((ArtifactDeploymentSource)task.getSource()).getArtifact();
if (artifact == null) return;
AppEngineUploader uploader = AppEngineUploader.createUploader(task.getProject(), artifact, myConfiguration, callback,
logManager.getMainLoggingHandler());
if (uploader != null) {
uploader.startUploading();
}
}
@Override
public void computeDeployments(@NotNull ComputeDeploymentsCallback callback) {
callback.succeeded();
}
@Override
public void disconnect() {
}
}
}