From c1a00f133c25b3b774e2baa054a1d0a64bdf80cb Mon Sep 17 00:00:00 2001 From: Greg Watson Date: Mon, 16 Feb 2015 22:12:26 -0500 Subject: [PATCH] Bug 460067 - Update remote terminal to new API Change-Id: I73d856d8fb65309ce667723b8729fa31f892cd34 Signed-off-by: Greg Watson --- admin/pom-config.xml | 2 +- .../internal/terminal/remote/Activator.java | 14 +++++++++ .../remote/RemoteConnectionManager.java | 29 ++++++++++--------- .../terminal/remote/RemoteSettingsPage.java | 6 +++- 4 files changed, 35 insertions(+), 16 deletions(-) diff --git a/admin/pom-config.xml b/admin/pom-config.xml index 40e45c5ed6a..2fc3d98dcef 100644 --- a/admin/pom-config.xml +++ b/admin/pom-config.xml @@ -62,7 +62,7 @@ http://download.eclipse.org/eclipse/updates/${sdk-version}milestones http://download.eclipse.org/tools/orbit/downloads/drops/R20150124073747/repository/ http://download.eclipse.org/tools/cdt/releases/8.5 - http://download.eclipse.org/tools/ptp/updates/remote/1.1.0 + http://download.eclipse.org/tools/ptp/builds/remote/mars/milestones http://download.eclipse.org/technology/swtbot/releases/latest/ http://archive.eclipse.org/tm/updates/rxtx diff --git a/terminal/plugins/org.eclipse.tm.terminal.remote/src/org/eclipse/tm/internal/terminal/remote/Activator.java b/terminal/plugins/org.eclipse.tm.terminal.remote/src/org/eclipse/tm/internal/terminal/remote/Activator.java index 577abd3410d..2e5ecad2515 100644 --- a/terminal/plugins/org.eclipse.tm.terminal.remote/src/org/eclipse/tm/internal/terminal/remote/Activator.java +++ b/terminal/plugins/org.eclipse.tm.terminal.remote/src/org/eclipse/tm/internal/terminal/remote/Activator.java @@ -14,6 +14,7 @@ import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.tm.internal.terminal.remote.messages.Messages; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceReference; /** * The activator class controls the plug-in life cycle @@ -108,4 +109,17 @@ public class Activator extends Plugin { } return getDefault().getBundle().getSymbolicName(); } + + /** + * Return the OSGi service with the given service interface. + * + * @param service + * service interface + * @return the specified service or null if it's not registered + */ + public static T getService(Class service) { + final BundleContext context = plugin.getBundle().getBundleContext(); + final ServiceReference ref = context.getServiceReference(service); + return ref != null ? context.getService(ref) : null; + } } diff --git a/terminal/plugins/org.eclipse.tm.terminal.remote/src/org/eclipse/tm/internal/terminal/remote/RemoteConnectionManager.java b/terminal/plugins/org.eclipse.tm.terminal.remote/src/org/eclipse/tm/internal/terminal/remote/RemoteConnectionManager.java index 74ac4835e66..5b3a7e30480 100644 --- a/terminal/plugins/org.eclipse.tm.terminal.remote/src/org/eclipse/tm/internal/terminal/remote/RemoteConnectionManager.java +++ b/terminal/plugins/org.eclipse.tm.terminal.remote/src/org/eclipse/tm/internal/terminal/remote/RemoteConnectionManager.java @@ -22,12 +22,13 @@ import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.core.runtime.preferences.InstanceScope; import org.eclipse.osgi.util.NLS; +import org.eclipse.remote.core.IRemoteCommandShellService; import org.eclipse.remote.core.IRemoteConnection; -import org.eclipse.remote.core.IRemoteConnectionManager; +import org.eclipse.remote.core.IRemoteConnectionType; import org.eclipse.remote.core.IRemoteProcess; import org.eclipse.remote.core.IRemoteProcessBuilder; -import org.eclipse.remote.core.IRemoteServices; -import org.eclipse.remote.core.RemoteServices; +import org.eclipse.remote.core.IRemoteProcessService; +import org.eclipse.remote.core.IRemoteServicesManager; import org.eclipse.remote.core.exception.RemoteConnectionException; import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl; import org.eclipse.tm.internal.terminal.provisional.api.TerminalState; @@ -65,13 +66,11 @@ public class RemoteConnectionManager extends Job { IRemoteConnection remoteConnection = null; try { - String remoteServices = connector.getSshSettings().getRemoteServices(); - IRemoteServices services = RemoteServices.getRemoteServices(remoteServices); - if (services != null) { - IRemoteConnectionManager connMgr = services.getConnectionManager(); - if (connMgr != null) { - remoteConnection = connMgr.getConnection(connector.getSshSettings().getConnectionName()); - } + IRemoteServicesManager svcMgr = Activator.getService(IRemoteServicesManager.class); + String connTypeId = connector.getSshSettings().getRemoteServices(); + IRemoteConnectionType connType = svcMgr.getConnectionType(connTypeId); + if (connType != null) { + remoteConnection = connType.getConnection(connector.getSshSettings().getConnectionName()); } if (remoteConnection == null) { throw new RemoteConnectionException(NLS.bind(Messages.RemoteConnectionManager_0, connector.getSshSettings() @@ -96,14 +95,16 @@ public class RemoteConnectionManager extends Job { IEclipsePreferences prefs = InstanceScope.INSTANCE.getNode(Activator.getUniqueIdentifier()); String terminalShellCommand = prefs.get(IRemoteTerminalConstants.PREF_TERMINAL_SHELL_COMMAND, ""); //$NON-NLS-1$ if (!("".equals(terminalShellCommand)) //$NON-NLS-1$ - && (remoteConnection.getRemoteServices().getCapabilities() & IRemoteServices.CAPABILITY_SUPPORTS_COMMAND_SHELL) != 0) { - remoteProcess = remoteConnection.getCommandShell(IRemoteProcessBuilder.ALLOCATE_PTY); + && remoteConnection.hasService(IRemoteCommandShellService.class)) { + IRemoteCommandShellService cmdShellSvc = remoteConnection.getService(IRemoteCommandShellService.class); + remoteProcess = cmdShellSvc.getCommandShell(IRemoteProcessBuilder.ALLOCATE_PTY); } else { if ("".equals(terminalShellCommand)) { //$NON-NLS-1$ terminalShellCommand = "/bin/bash -l"; //$NON-NLS-1$ } - IRemoteProcessBuilder processBuilder = remoteConnection.getProcessBuilder(new ArgumentParser( - terminalShellCommand).getTokenList()); + IRemoteProcessService procSvc = remoteConnection.getService(IRemoteProcessService.class); + IRemoteProcessBuilder processBuilder = procSvc.getProcessBuilder(new ArgumentParser(terminalShellCommand) + .getTokenList()); remoteProcess = processBuilder.start(IRemoteProcessBuilder.ALLOCATE_PTY); } } diff --git a/terminal/plugins/org.eclipse.tm.terminal.remote/src/org/eclipse/tm/internal/terminal/remote/RemoteSettingsPage.java b/terminal/plugins/org.eclipse.tm.terminal.remote/src/org/eclipse/tm/internal/terminal/remote/RemoteSettingsPage.java index e49d8097e47..646274136e0 100644 --- a/terminal/plugins/org.eclipse.tm.terminal.remote/src/org/eclipse/tm/internal/terminal/remote/RemoteSettingsPage.java +++ b/terminal/plugins/org.eclipse.tm.terminal.remote/src/org/eclipse/tm/internal/terminal/remote/RemoteSettingsPage.java @@ -23,11 +23,13 @@ public class RemoteSettingsPage extends AbstractSettingsPage { fTerminalSettings = settings; } + @Override public void saveSettings() { - fTerminalSettings.setRemoteServices(fRemoteConnectionWidget.getConnection().getRemoteServices().getId()); + fTerminalSettings.setRemoteServices(fRemoteConnectionWidget.getConnection().getConnectionType().getId()); fTerminalSettings.setConnectionName(fRemoteConnectionWidget.getConnection().getName()); } + @Override public void loadSettings() { if (fTerminalSettings != null) { fRemoteConnectionWidget.setConnection(fTerminalSettings.getRemoteServices(), fTerminalSettings.getConnectionName()); @@ -41,6 +43,7 @@ public class RemoteSettingsPage extends AbstractSettingsPage { return value; } + @Override public boolean validateSettings() { if (fRemoteConnectionWidget.getConnection() == null) { return false; @@ -48,6 +51,7 @@ public class RemoteSettingsPage extends AbstractSettingsPage { return true; } + @Override public void createControl(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); GridLayout gridLayout = new GridLayout(2, false);