diff --git a/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/IRemoteSettings.java b/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/IRemoteSettings.java index 9436f26f65b..e4094515b64 100644 --- a/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/IRemoteSettings.java +++ b/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/IRemoteSettings.java @@ -9,19 +9,19 @@ package org.eclipse.tm.terminal.connector.remote; public interface IRemoteSettings { public static final String CONNECTION_NAME = "ConnectionName"; //$NON-NLS-1$ - public static final String REMOTE_SERVICES = "RemoteServices"; //$NON-NLS-1$ + public static final String CONNECTION_TYPE_ID = "ConnectionTypeId"; //$NON-NLS-1$ /** - * Get the host name or IP address of remote system to connect. + * Get the connection type ID for the connection (e.g. local, ssh, etc.) * - * @return host name or IP address of the remote system. + * @return connection type ID. */ - String getRemoteServices(); + String getConnectionTypeId(); /** - * Get the login name for connecting to the remote system. + * Get the connection name for the target system. * - * @return remote login name + * @return connection name */ String getConnectionName(); } diff --git a/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/IRemoteTerminalConstants.java b/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/IRemoteTerminalConstants.java index 512248c6162..ed8317c427d 100644 --- a/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/IRemoteTerminalConstants.java +++ b/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/IRemoteTerminalConstants.java @@ -9,4 +9,5 @@ package org.eclipse.tm.terminal.connector.remote; public interface IRemoteTerminalConstants { public static final String PREF_TERMINAL_SHELL_COMMAND = "TERMINAL_SHELL_COMMAND"; //$NON-NLS-1$ + public static final String PREF_TERMINAL_TYPE = "TERMINAL_TYPE"; //$NON-NLS-1$ } diff --git a/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/controls/RemoteWizardConfigurationPanel.java b/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/controls/RemoteWizardConfigurationPanel.java index 0ee8e44f5a0..508191946a7 100644 --- a/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/controls/RemoteWizardConfigurationPanel.java +++ b/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/controls/RemoteWizardConfigurationPanel.java @@ -33,19 +33,22 @@ import org.eclipse.tm.terminal.view.ui.panels.AbstractExtendedConfigurationPanel @SuppressWarnings("restriction") public class RemoteWizardConfigurationPanel extends AbstractExtendedConfigurationPanel { - public RemoteSettings remoteSettings; + private RemoteSettings remoteSettings; private ISettingsPage remoteSettingsPage; /** * Constructor. * - * @param container The configuration panel container or null. + * @param container + * The configuration panel container or null. */ public RemoteWizardConfigurationPanel(IConfigurationPanelContainer container) { - super(container); - } + super(container); + } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#setupPanel(org.eclipse.swt.widgets.Composite) */ @Override @@ -60,7 +63,7 @@ public class RemoteWizardConfigurationPanel extends AbstractExtendedConfiguratio remoteSettingsPage = new RemoteSettingsPage(remoteSettings); if (remoteSettingsPage instanceof AbstractSettingsPage) { - ((AbstractSettingsPage)remoteSettingsPage).setHasControlDecoration(true); + ((AbstractSettingsPage) remoteSettingsPage).setHasControlDecoration(true); } remoteSettingsPage.createControl(panel); @@ -69,7 +72,9 @@ public class RemoteWizardConfigurationPanel extends AbstractExtendedConfiguratio @Override public void onSettingsPageChanged(Control control) { - if (getContainer() != null) getContainer().validate(); + if (getContainer() != null) { + getContainer().validate(); + } } }); @@ -79,79 +84,107 @@ public class RemoteWizardConfigurationPanel extends AbstractExtendedConfiguratio setControl(panel); } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#setupData(java.util.Map) */ @Override public void setupData(Map data) { - if (data == null || remoteSettings == null || remoteSettingsPage == null) return; + if (data == null || remoteSettings == null || remoteSettingsPage == null) { + return; + } - String value = (String)data.get(IRemoteSettings.REMOTE_SERVICES); - if (value != null) remoteSettings.setRemoteServices(value); + String value = (String) data.get(IRemoteSettings.CONNECTION_TYPE_ID); + if (value != null) { + remoteSettings.setConnectionTypeId(value); + } - value = (String)data.get(IRemoteSettings.CONNECTION_NAME); - if (value != null) remoteSettings.setConnectionName(value); + value = (String) data.get(IRemoteSettings.CONNECTION_NAME); + if (value != null) { + remoteSettings.setConnectionName(value); + } - value = (String)data.get(ITerminalsConnectorConstants.PROP_ENCODING); - if (value != null) setEncoding(value); + value = (String) data.get(ITerminalsConnectorConstants.PROP_ENCODING); + if (value != null) { + setEncoding(value); + } remoteSettingsPage.loadSettings(); - } + } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#extractData(java.util.Map) */ @Override public void extractData(Map data) { - if (data == null) return; + if (data == null) { + return; + } - // set the terminal connector id for remote - data.put(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID, "org.eclipse.tm.terminal.connector.remote.RemoteConnector"); //$NON-NLS-1$ + // set the terminal connector id for remote + data.put(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID, + "org.eclipse.tm.terminal.connector.remote.RemoteConnector"); //$NON-NLS-1$ - remoteSettingsPage.saveSettings(); - - data.put(IRemoteSettings.REMOTE_SERVICES, remoteSettings.getRemoteServices()); - data.put(IRemoteSettings.CONNECTION_NAME, remoteSettings.getConnectionName()); - data.put(ITerminalsConnectorConstants.PROP_ENCODING, getEncoding()); - } + remoteSettingsPage.saveSettings(); - /* (non-Javadoc) + data.put(IRemoteSettings.CONNECTION_TYPE_ID, remoteSettings.getConnectionTypeId()); + data.put(IRemoteSettings.CONNECTION_NAME, remoteSettings.getConnectionName()); + if (getEncoding() != null) { + data.put(ITerminalsConnectorConstants.PROP_ENCODING, getEncoding()); + } + } + + /* + * (non-Javadoc) + * * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#fillSettingsForHost(java.lang.String) */ @Override - protected void fillSettingsForHost(String host){ + protected void fillSettingsForHost(String host) { } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#saveSettingsForHost(boolean) */ @Override - protected void saveSettingsForHost(boolean add){ + protected void saveSettingsForHost(boolean add) { } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#isValid() */ @Override - public boolean isValid(){ + public boolean isValid() { return isEncodingValid() && remoteSettingsPage.validateSettings(); } - /* (non-Javadoc) - * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#doSaveWidgetValues(org.eclipse.jface.dialogs.IDialogSettings, java.lang.String) + /* + * (non-Javadoc) + * + * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#doSaveWidgetValues(org.eclipse.jface.dialogs. + * IDialogSettings, java.lang.String) */ @Override - public void doSaveWidgetValues(IDialogSettings settings, String idPrefix) { - saveSettingsForHost(true); - super.doSaveWidgetValues(settings, idPrefix); - } + public void doSaveWidgetValues(IDialogSettings settings, String idPrefix) { + saveSettingsForHost(true); + super.doSaveWidgetValues(settings, idPrefix); + } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#getHostFromSettings() */ @Override - protected String getHostFromSettings() { + protected String getHostFromSettings() { remoteSettingsPage.saveSettings(); - return null; - } + return null; + } } diff --git a/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/RemoteConnectionManager.java b/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/RemoteConnectionManager.java index 7615ac3ba1b..95c9a9f947e 100644 --- a/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/RemoteConnectionManager.java +++ b/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/RemoteConnectionManager.java @@ -28,6 +28,7 @@ import org.eclipse.remote.core.IRemoteConnectionType; import org.eclipse.remote.core.IRemoteProcess; import org.eclipse.remote.core.IRemoteProcessBuilder; import org.eclipse.remote.core.IRemoteProcessService; +import org.eclipse.remote.core.IRemoteProcessTerminalService; import org.eclipse.remote.core.IRemoteServicesManager; import org.eclipse.remote.core.exception.RemoteConnectionException; import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl; @@ -40,12 +41,14 @@ import org.eclipse.tm.terminal.connector.remote.nls.Messages; public class RemoteConnectionManager extends Job { private final static String PARSERS_EXTENSION_POINT = "parsers"; //$NON-NLS-1$ private final static String PARSER_ELEMENT = "parser"; //$NON-NLS-1$ + private static int fgNo; private final ITerminalControl control; private final RemoteConnector connector; private IRemoteTerminalParser parser; + private IRemoteProcess remoteProcess; protected RemoteConnectionManager(RemoteConnector conn, ITerminalControl control) { super("Remote Terminal-" + fgNo++); //$NON-NLS-1$ @@ -62,31 +65,32 @@ public class RemoteConnectionManager extends Job { */ @Override protected IStatus run(IProgressMonitor monitor) { - IRemoteProcess remoteProcess = null; IRemoteConnection remoteConnection = null; try { IRemoteServicesManager svcMgr = Activator.getService(IRemoteServicesManager.class); - String connTypeId = connector.getRemoteSettings().getRemoteServices(); + String connTypeId = connector.getRemoteSettings().getConnectionTypeId(); IRemoteConnectionType connType = svcMgr.getConnectionType(connTypeId); if (connType != null) { remoteConnection = connType.getConnection(connector.getRemoteSettings().getConnectionName()); } if (remoteConnection == null) { - throw new RemoteConnectionException(NLS.bind(Messages.RemoteConnectionManager_0, connector.getRemoteSettings() - .getConnectionName())); + throw new RemoteConnectionException( + NLS.bind(Messages.RemoteConnectionManager_0, connector.getRemoteSettings().getConnectionName())); } if (!remoteConnection.isOpen()) { remoteConnection.open(monitor); if (!remoteConnection.isOpen()) { - throw new RemoteConnectionException(NLS.bind(Messages.RemoteConnectionManager_1, connector.getRemoteSettings() - .getConnectionName())); + throw new RemoteConnectionException( + NLS.bind(Messages.RemoteConnectionManager_1, connector.getRemoteSettings().getConnectionName())); } } if (parser != null) { - remoteProcess = parser.initialize(remoteConnection); + synchronized (this) { + remoteProcess = parser.initialize(remoteConnection); + } } else { /* * Check the terminal shell command preference. If the preference is empty and we support a command shell, @@ -97,18 +101,23 @@ public class RemoteConnectionManager extends Job { if (!("".equals(terminalShellCommand)) //$NON-NLS-1$ && remoteConnection.hasService(IRemoteCommandShellService.class)) { IRemoteCommandShellService cmdShellSvc = remoteConnection.getService(IRemoteCommandShellService.class); - remoteProcess = cmdShellSvc.getCommandShell(IRemoteProcessBuilder.ALLOCATE_PTY); + synchronized (this) { + remoteProcess = cmdShellSvc.getCommandShell(IRemoteProcessBuilder.ALLOCATE_PTY); + } } else { if ("".equals(terminalShellCommand)) { //$NON-NLS-1$ terminalShellCommand = "/bin/bash -l"; //$NON-NLS-1$ } IRemoteProcessService procSvc = remoteConnection.getService(IRemoteProcessService.class); - IRemoteProcessBuilder processBuilder = procSvc.getProcessBuilder(new ArgumentParser(terminalShellCommand) - .getTokenList()); - remoteProcess = processBuilder.start(IRemoteProcessBuilder.ALLOCATE_PTY); + IRemoteProcessBuilder processBuilder = procSvc + .getProcessBuilder(new ArgumentParser(terminalShellCommand).getTokenList()); + synchronized (this) { + remoteProcess = processBuilder.start(IRemoteProcessBuilder.ALLOCATE_PTY); + } } } + control.setVT100LineWrapping(true); connector.setInputStream(remoteProcess.getInputStream()); control.setState(TerminalState.CONNECTED); control.setTerminalTitle(remoteConnection.getName()); @@ -123,20 +132,27 @@ public class RemoteConnectionManager extends Job { } finally { // make sure the terminal is disconnected when the thread ends connector.disconnect(); - synchronized (this) { - if (remoteProcess != null && !remoteProcess.isCompleted()) { - remoteProcess.destroy(); - } - } } return Status.OK_STATUS; } + @Override + protected void canceling() { + super.canceling(); + synchronized (this) { + if (remoteProcess != null && !remoteProcess.isCompleted()) { + remoteProcess.destroy(); + } + } + } + public void setTerminalSize(int cols, int rows, int width, int height) { - // Enable for org.eclipse.remote v1.2 - // if (remoteProcess instanceof IRemoteTerminal) { - // ((IRemoteTerminal) remoteProcess).setTerminalSize(cols, rows, width, height); - // } + if (remoteProcess != null) { + IRemoteProcessTerminalService termSvc = remoteProcess.getService(IRemoteProcessTerminalService.class); + if (termSvc != null) { + termSvc.setTerminalSize(cols, rows, width, height); + } + } } /** @@ -147,11 +163,8 @@ public class RemoteConnectionManager extends Job { */ private void readData(InputStream in) throws IOException { byte[] buf = new byte[32 * 1024]; - while (getState() == Job.RUNNING) { - int n = in.read(buf, 0, buf.length); - if (n <= 0) { - break; - } + int n; + while ((n = in.read(buf, 0, buf.length)) > 0) { if (parser == null || parser.parse(buf)) { control.getRemoteToTerminalOutputStream().write(buf, 0, n); } diff --git a/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/RemoteConnector.java b/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/RemoteConnector.java index 592422d17cc..a1f4d97a926 100644 --- a/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/RemoteConnector.java +++ b/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/RemoteConnector.java @@ -56,22 +56,6 @@ public class RemoteConnector extends TerminalConnectorImpl { */ @Override public synchronized void doDisconnect() { - if (getInputStream() != null) { - try { - getInputStream().close(); - } catch (Exception exception) { - Activator.log(exception); - } - } - - if (getTerminalToRemoteStream() != null) { - try { - getTerminalToRemoteStream().close(); - } catch (Exception exception) { - Activator.log(exception); - } - } - fConnection.cancel(); } @@ -117,7 +101,7 @@ public class RemoteConnector extends TerminalConnectorImpl { public void setDefaultSettings() { fSettings.load(new NullSettingsStore()); } - + @Override public void save(ISettingsStore store) { fSettings.save(store); diff --git a/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/RemoteSettings.java b/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/RemoteSettings.java index 74b6c8f80f2..e3fd933588f 100644 --- a/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/RemoteSettings.java +++ b/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/RemoteSettings.java @@ -12,22 +12,24 @@ import org.eclipse.tm.terminal.connector.remote.IRemoteSettings; @SuppressWarnings("restriction") public class RemoteSettings implements IRemoteSettings { - protected String fRemoteServices; - protected String fConnectionName; + protected String connectionTypeId; + protected String connectionName; public RemoteSettings() { } + @Override public String getConnectionName() { - return fConnectionName; + return connectionName; } - public String getRemoteServices() { - return fRemoteServices; + @Override + public String getConnectionTypeId() { + return connectionTypeId; } public String getSummary() { - return "Remote:" + getRemoteServices() + '_' + getConnectionName(); //$NON-NLS-1$ + return "Remote:" + getConnectionTypeId() + '_' + getConnectionName(); //$NON-NLS-1$ } @Override @@ -39,23 +41,23 @@ public class RemoteSettings implements IRemoteSettings { * Load information into the RemoteSettings object. */ public void load(ISettingsStore store) { - fRemoteServices = store.get(REMOTE_SERVICES, ""); //$NON-NLS-1$ - fConnectionName = store.get(CONNECTION_NAME, ""); //$NON-NLS-1$ + connectionTypeId = store.get(CONNECTION_TYPE_ID, ""); //$NON-NLS-1$ + connectionName = store.get(CONNECTION_NAME, ""); //$NON-NLS-1$ } /** * Extract information from the RemoteSettings object. */ public void save(ISettingsStore store) { - store.put(REMOTE_SERVICES, fRemoteServices); - store.put(CONNECTION_NAME, fConnectionName); + store.put(CONNECTION_TYPE_ID, connectionTypeId); + store.put(CONNECTION_NAME, connectionName); } public void setConnectionName(String name) { - fConnectionName = name; + connectionName = name; } - public void setRemoteServices(String remoteServices) { - fRemoteServices = remoteServices; + public void setConnectionTypeId(String id) { + connectionTypeId = id; } } diff --git a/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/RemoteSettingsPage.java b/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/RemoteSettingsPage.java index d5ee56a17de..2ea7ecdb0f2 100644 --- a/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/RemoteSettingsPage.java +++ b/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/RemoteSettingsPage.java @@ -30,7 +30,7 @@ public class RemoteSettingsPage extends AbstractSettingsPage { if (fTerminalSettings != null && fRemoteConnectionWidget != null && !fRemoteConnectionWidget.isDisposed()) { if (fRemoteConnectionWidget.getConnection() != null) { if (fRemoteConnectionWidget.getConnection().getConnectionType() != null) { - fTerminalSettings.setRemoteServices(fRemoteConnectionWidget.getConnection().getConnectionType().getId()); + fTerminalSettings.setConnectionTypeId(fRemoteConnectionWidget.getConnection().getConnectionType().getId()); } fTerminalSettings.setConnectionName(fRemoteConnectionWidget.getConnection().getName()); } @@ -40,7 +40,7 @@ public class RemoteSettingsPage extends AbstractSettingsPage { @Override public void loadSettings() { if (fTerminalSettings != null && fRemoteConnectionWidget != null && !fRemoteConnectionWidget.isDisposed()) { - fRemoteConnectionWidget.setConnection(fTerminalSettings.getRemoteServices(), fTerminalSettings.getConnectionName()); + fRemoteConnectionWidget.setConnection(fTerminalSettings.getConnectionTypeId(), fTerminalSettings.getConnectionName()); } } @@ -53,7 +53,8 @@ public class RemoteSettingsPage extends AbstractSettingsPage { @Override public boolean validateSettings() { - if (fRemoteConnectionWidget == null || fRemoteConnectionWidget.isDisposed() || fRemoteConnectionWidget.getConnection() == null) { + if (fRemoteConnectionWidget == null || fRemoteConnectionWidget.isDisposed() + || fRemoteConnectionWidget.getConnection() == null) { return false; } return true; diff --git a/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/preferences/RemoteTerminalPreferencePage.java b/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/preferences/RemoteTerminalPreferencePage.java index 595b4d4e6cc..87175435d82 100644 --- a/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/preferences/RemoteTerminalPreferencePage.java +++ b/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/preferences/RemoteTerminalPreferencePage.java @@ -20,8 +20,10 @@ import org.eclipse.ui.IWorkbenchPreferencePage; import org.eclipse.ui.preferences.ScopedPreferenceStore; public class RemoteTerminalPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage { + @Override protected void createFieldEditors() { Composite parent = getFieldEditorParent(); + addField(new StringFieldEditor(IRemoteTerminalConstants.PREF_TERMINAL_TYPE, "Terminal Type", parent)); addField(new StringFieldEditor(IRemoteTerminalConstants.PREF_TERMINAL_SHELL_COMMAND, Messages.RemoteTerminalPreferencePage_0, parent)); } @@ -31,6 +33,7 @@ public class RemoteTerminalPreferencePage extends FieldEditorPreferencePage impl return new ScopedPreferenceStore(InstanceScope.INSTANCE, Activator.getUniqueIdentifier()); } + @Override public void init(IWorkbench workbench) { // Nothing } diff --git a/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/launcher/RemoteLauncherDelegate.java b/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/launcher/RemoteLauncherDelegate.java index 8d36ea5c197..72c4f424f08 100644 --- a/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/launcher/RemoteLauncherDelegate.java +++ b/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/launcher/RemoteLauncherDelegate.java @@ -15,11 +15,15 @@ import java.util.Map; import org.eclipse.core.runtime.Assert; import org.eclipse.osgi.util.NLS; +import org.eclipse.remote.core.IRemoteConnection; +import org.eclipse.remote.core.IRemoteConnectionType; +import org.eclipse.remote.core.IRemoteServicesManager; import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore; import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector; import org.eclipse.tm.internal.terminal.provisional.api.TerminalConnectorExtension; import org.eclipse.tm.terminal.connector.remote.IRemoteSettings; import org.eclipse.tm.terminal.connector.remote.controls.RemoteWizardConfigurationPanel; +import org.eclipse.tm.terminal.connector.remote.internal.Activator; import org.eclipse.tm.terminal.connector.remote.internal.RemoteSettings; import org.eclipse.tm.terminal.connector.remote.nls.Messages; import org.eclipse.tm.terminal.view.core.TerminalServiceFactory; @@ -39,7 +43,9 @@ public class RemoteLauncherDelegate extends AbstractLauncherDelegate { // The Remote terminal connection memento handler private final IMementoHandler mementoHandler = new RemoteMementoHandler(); - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#needsUserConfiguration() */ @Override @@ -47,33 +53,27 @@ public class RemoteLauncherDelegate extends AbstractLauncherDelegate { return true; } - /* (non-Javadoc) - * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#getPanel(org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer) + /* + * (non-Javadoc) + * + * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#getPanel(org.eclipse.tm.terminal.view.ui.interfaces. + * IConfigurationPanelContainer) */ @Override public IConfigurationPanel getPanel(IConfigurationPanelContainer container) { return new RemoteWizardConfigurationPanel(container); } - /* (non-Javadoc) - * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#execute(java.util.Map, org.eclipse.tm.terminal.view.core.interfaces.ITerminalService.Done) + /* + * (non-Javadoc) + * + * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#execute(java.util.Map, + * org.eclipse.tm.terminal.view.core.interfaces.ITerminalService.Done) */ @Override public void execute(Map properties, ITerminalService.Done done) { Assert.isNotNull(properties); - // Set the terminal tab title - String terminalTitle = getTerminalTitle(properties); - if (terminalTitle != null) { - properties.put(ITerminalsConnectorConstants.PROP_TITLE, terminalTitle); - } - - // For Telnet terminals, force a new terminal tab each time it is launched, - // if not set otherwise from outside - if (!properties.containsKey(ITerminalsConnectorConstants.PROP_FORCE_NEW)) { - properties.put(ITerminalsConnectorConstants.PROP_FORCE_NEW, Boolean.TRUE); - } - // Get the terminal service ITerminalService terminal = TerminalServiceFactory.getService(); // If not available, we cannot fulfill this request @@ -90,50 +90,56 @@ public class RemoteLauncherDelegate extends AbstractLauncherDelegate { * @return The terminal title string or null. */ private String getTerminalTitle(Map properties) { - String connection = (String)properties.get(IRemoteSettings.CONNECTION_NAME); + String connection = (String) properties.get(IRemoteSettings.CONNECTION_NAME); if (connection != null) { DateFormat format = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT); String date = format.format(new Date(System.currentTimeMillis())); - return NLS.bind(Messages.RemoteLauncherDelegate_terminalTitle, new String[]{connection, date}); + return NLS.bind(Messages.RemoteLauncherDelegate_terminalTitle, new String[] { connection, date }); } return Messages.RemoteLauncherDelegate_terminalTitle_default; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.core.runtime.PlatformObject#getAdapter(java.lang.Class) */ - @SuppressWarnings("rawtypes") + @SuppressWarnings({ "rawtypes", "unchecked" }) @Override public Object getAdapter(Class adapter) { if (IMementoHandler.class.equals(adapter)) { return mementoHandler; } - return super.getAdapter(adapter); + return super.getAdapter(adapter); } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#createTerminalConnector(java.util.Map) */ - @Override + @Override public ITerminalConnector createTerminalConnector(Map properties) { - Assert.isNotNull(properties); + Assert.isNotNull(properties); - // Check for the terminal connector id - String connectorId = (String)properties.get(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID); - if (connectorId == null) connectorId = "org.eclipse.tm.terminal.connector.remote.RemoteConnector"; //$NON-NLS-1$ + // Check for the terminal connector id + String connectorId = (String) properties.get(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID); + if (connectorId == null) { + connectorId = "org.eclipse.tm.terminal.connector.remote.RemoteConnector"; //$NON-NLS-1$ + } // Extract the remote properties - String services = (String)properties.get(IRemoteSettings.REMOTE_SERVICES); - String connection = (String)properties.get(IRemoteSettings.CONNECTION_NAME); + String connTypeId = (String) properties.get(IRemoteSettings.CONNECTION_TYPE_ID); + String connName = (String) properties.get(IRemoteSettings.CONNECTION_NAME); // Construct the terminal settings store ISettingsStore store = new SettingsStore(); // Construct the remote settings RemoteSettings remoteSettings = new RemoteSettings(); - remoteSettings.setRemoteServices(services); - remoteSettings.setConnectionName(connection); + remoteSettings.setConnectionTypeId(connTypeId); + remoteSettings.setConnectionName(connName); // And save the settings to the store remoteSettings.save(store); @@ -146,6 +152,33 @@ public class RemoteLauncherDelegate extends AbstractLauncherDelegate { connector.load(store); } + // Set the terminal tab title + String terminalTitle = getTerminalTitle(properties); + if (terminalTitle != null) { + properties.put(ITerminalsConnectorConstants.PROP_TITLE, terminalTitle); + } + + // For Telnet terminals, force a new terminal tab each time it is launched, + // if not set otherwise from outside + if (!properties.containsKey(ITerminalsConnectorConstants.PROP_FORCE_NEW)) { + properties.put(ITerminalsConnectorConstants.PROP_FORCE_NEW, Boolean.TRUE); + } + + if (!properties.containsKey(ITerminalsConnectorConstants.PROP_ENCODING)) { + IRemoteServicesManager svcMgr = Activator.getService(IRemoteServicesManager.class); + + IRemoteConnectionType connType = svcMgr.getConnectionType(connTypeId); + if (connType != null) { + IRemoteConnection remoteConnection = connType.getConnection(connName); + if (remoteConnection != null && remoteConnection.isOpen()) { + properties.put(ITerminalsConnectorConstants.PROP_ENCODING, + remoteConnection.getProperty(IRemoteConnection.LOCALE_CHARMAP_PROPERTY)); + } + } + } + + properties.put(ITerminalsConnectorConstants.PROP_PROCESS_WORKING_DIR, "/tmp"); //$NON-NLS-1$ + return connector; } } diff --git a/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/launcher/RemoteMementoHandler.java b/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/launcher/RemoteMementoHandler.java index 92db0a543d1..a114c033b9f 100644 --- a/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/launcher/RemoteMementoHandler.java +++ b/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/launcher/RemoteMementoHandler.java @@ -22,7 +22,9 @@ import org.eclipse.ui.IMemento; */ public class RemoteMementoHandler implements IMementoHandler { - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.tm.terminal.view.ui.interfaces.IMementoHandler#saveState(org.eclipse.ui.IMemento, java.util.Map) */ @Override @@ -32,12 +34,15 @@ public class RemoteMementoHandler implements IMementoHandler { // Do not write the terminal title to the memento -> needs to // be recreated at the time of restoration. - memento.putString(IRemoteSettings.CONNECTION_NAME, (String)properties.get(IRemoteSettings.CONNECTION_NAME)); - memento.putString(IRemoteSettings.REMOTE_SERVICES, (String)properties.get(IRemoteSettings.REMOTE_SERVICES)); - memento.putString(ITerminalsConnectorConstants.PROP_ENCODING, (String)properties.get(ITerminalsConnectorConstants.PROP_ENCODING)); + memento.putString(IRemoteSettings.CONNECTION_NAME, (String) properties.get(IRemoteSettings.CONNECTION_NAME)); + memento.putString(IRemoteSettings.CONNECTION_TYPE_ID, (String) properties.get(IRemoteSettings.CONNECTION_TYPE_ID)); + memento.putString(ITerminalsConnectorConstants.PROP_ENCODING, + (String) properties.get(ITerminalsConnectorConstants.PROP_ENCODING)); } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.tm.terminal.view.ui.interfaces.IMementoHandler#restoreState(org.eclipse.ui.IMemento, java.util.Map) */ @Override @@ -47,7 +52,7 @@ public class RemoteMementoHandler implements IMementoHandler { // Restore the terminal properties from the memento properties.put(IRemoteSettings.CONNECTION_NAME, memento.getString(IRemoteSettings.CONNECTION_NAME)); - properties.put(IRemoteSettings.REMOTE_SERVICES, memento.getString(IRemoteSettings.REMOTE_SERVICES)); + properties.put(IRemoteSettings.CONNECTION_TYPE_ID, memento.getString(IRemoteSettings.CONNECTION_TYPE_ID)); properties.put(ITerminalsConnectorConstants.PROP_ENCODING, memento.getString(ITerminalsConnectorConstants.PROP_ENCODING)); } }