2 * Copyright 2000-2009 JetBrains s.r.o.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
20 package com.intellij.execution.remote;
22 import com.intellij.debugger.engine.RemoteStateState;
23 import com.intellij.debugger.impl.GenericDebuggerRunnerSettings;
24 import com.intellij.debugger.settings.DebuggerSettings;
25 import com.intellij.diagnostic.logging.LogConfigurationPanel;
26 import com.intellij.execution.ExecutionBundle;
27 import com.intellij.execution.ExecutionException;
28 import com.intellij.execution.Executor;
29 import com.intellij.execution.configurations.*;
30 import com.intellij.execution.runners.ExecutionEnvironment;
31 import com.intellij.openapi.module.Module;
32 import com.intellij.openapi.options.SettingsEditor;
33 import com.intellij.openapi.options.SettingsEditorGroup;
34 import com.intellij.openapi.project.Project;
35 import com.intellij.openapi.util.DefaultJDOMExternalizer;
36 import com.intellij.openapi.util.InvalidDataException;
37 import com.intellij.openapi.util.WriteExternalException;
38 import org.jdom.Element;
39 import org.jetbrains.annotations.NotNull;
41 import java.util.Collection;
43 public class RemoteConfiguration extends ModuleBasedConfiguration<JavaRunConfigurationModule> {
45 public void writeExternal(final Element element) throws WriteExternalException {
46 super.writeExternal(element);
47 final Module module = getConfigurationModule().getModule();
48 if (module != null) { // default value
51 DefaultJDOMExternalizer.writeExternal(this, element);
54 public void readExternal(final Element element) throws InvalidDataException {
55 super.readExternal(element);
57 DefaultJDOMExternalizer.readExternal(this, element);
60 public boolean USE_SOCKET_TRANSPORT;
61 public boolean SERVER_MODE;
62 public String SHMEM_ADDRESS;
66 public RemoteConfiguration(final String name, final Project project, ConfigurationFactory configurationFactory) {
67 super(name, new JavaRunConfigurationModule(project, true), configurationFactory);
70 public RemoteConnection createRemoteConnection() {
71 return new RemoteConnection(USE_SOCKET_TRANSPORT, HOST, USE_SOCKET_TRANSPORT ? PORT : SHMEM_ADDRESS, SERVER_MODE);
74 public RunProfileState getState(@NotNull final Executor executor, @NotNull final ExecutionEnvironment env) throws ExecutionException {
75 GenericDebuggerRunnerSettings debuggerSettings = ((GenericDebuggerRunnerSettings)env.getRunnerSettings().getData());
76 debuggerSettings.LOCAL = false;
77 debuggerSettings.setDebugPort(USE_SOCKET_TRANSPORT ? PORT : SHMEM_ADDRESS);
78 debuggerSettings.setTransport(USE_SOCKET_TRANSPORT ? DebuggerSettings.SOCKET_TRANSPORT : DebuggerSettings.SHMEM_TRANSPORT);
79 return new RemoteStateState(getProject(), createRemoteConnection(), env.getRunnerSettings(), env.getConfigurationSettings());
82 public SettingsEditor<? extends RunConfiguration> getConfigurationEditor() {
83 SettingsEditorGroup<RemoteConfiguration> group = new SettingsEditorGroup<RemoteConfiguration>();
84 group.addEditor(ExecutionBundle.message("run.configuration.configuration.tab.title"), new RemoteConfigurable(getProject()));
85 group.addEditor(ExecutionBundle.message("logs.tab.title"), new LogConfigurationPanel<RemoteConfiguration>());
89 protected ModuleBasedConfiguration createInstance() {
90 return new RemoteConfiguration(getName(), getProject(), RemoteConfigurationType.getInstance().getConfigurationFactories()[0]);
93 public Collection<Module> getValidModules() {
94 return getAllModules();