### Eclipse Workspace Patch 1.0
#P org.eclipse.rse.subsystems.terminals.core
Index: plugin.properties
===================================================================
RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.subsystems.terminals.core/plugin.properties,v
retrieving revision 1.1
diff -u -r1.1 plugin.properties
--- plugin.properties 16 Apr 2008 20:56:40 -0000 1.1
+++ plugin.properties 25 Sep 2008 20:54:19 -0000
@@ -14,3 +14,6 @@
pluginName = RSE Terminals Core (Incubation)
providerName = Eclipse.org
+
+TerminalSubsystemName = Terminals
+TerminalSubsystemDescription = Work with terminals and commands on remote systems.
Index: src/org/eclipse/rse/subsystems/terminals/core/TerminalServiceSubSystem.java
===================================================================
RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.subsystems.terminals.core/src/org/eclipse/rse/subsystems/terminals/core/TerminalServiceSubSystem.java,v
retrieving revision 1.5
diff -u -r1.5 TerminalServiceSubSystem.java
--- src/org/eclipse/rse/subsystems/terminals/core/TerminalServiceSubSystem.java 5 May 2008 18:40:36 -0000 1.5
+++ src/org/eclipse/rse/subsystems/terminals/core/TerminalServiceSubSystem.java 25 Sep 2008 20:54:19 -0000
@@ -26,6 +26,7 @@
import org.eclipse.rse.core.subsystems.CommunicationsEvent;
import org.eclipse.rse.core.subsystems.ICommunicationsListener;
import org.eclipse.rse.core.subsystems.IConnectorService;
+import org.eclipse.rse.core.subsystems.ISubSystemConfiguration;
import org.eclipse.rse.core.subsystems.SubSystem;
import org.eclipse.rse.internal.services.terminals.ITerminalService;
import org.eclipse.rse.subsystems.terminals.core.elements.TerminalElement;
@@ -185,4 +186,8 @@
getConnectorService().removeCommunicationsListener(this);
super.uninitializeSubSystem(monitor);
}
+
+ public boolean canSwitchTo(ISubSystemConfiguration configuration) {
+ return (configuration instanceof ITerminalServiceSubSystemConfiguration);
+ }
}
\ No newline at end of file
Index: src/org/eclipse/rse/subsystems/terminals/core/TerminalServiceSubSystemConfiguration.java
===================================================================
RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.subsystems.terminals.core/src/org/eclipse/rse/subsystems/terminals/core/TerminalServiceSubSystemConfiguration.java,v
retrieving revision 1.1
diff -u -r1.1 TerminalServiceSubSystemConfiguration.java
--- src/org/eclipse/rse/subsystems/terminals/core/TerminalServiceSubSystemConfiguration.java 16 Apr 2008 20:56:41 -0000 1.1
+++ src/org/eclipse/rse/subsystems/terminals/core/TerminalServiceSubSystemConfiguration.java 25 Sep 2008 20:54:19 -0000
@@ -51,4 +51,9 @@
return ITerminalService.class;
}
+ public boolean isFactoryFor(Class subSystemType) {
+ boolean isFor = TerminalServiceSubSystem.class.equals(subSystemType);
+ return isFor;
+ }
+
}
Index: src/org/eclipse/rse/internal/subsystems/terminals/core/TerminalSubSystemConfigurationImpl.java
===================================================================
RCS file: src/org/eclipse/rse/internal/subsystems/terminals/core/TerminalSubSystemConfigurationImpl.java
diff -N src/org/eclipse/rse/internal/subsystems/terminals/core/TerminalSubSystemConfigurationImpl.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/rse/internal/subsystems/terminals/core/TerminalSubSystemConfigurationImpl.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2008 MontaVista Software, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Yu-Fen Kuo (MontaVista)- initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.rse.internal.subsystems.terminals.core;
+
+import org.eclipse.rse.core.model.IHost;
+import org.eclipse.rse.core.subsystems.IConnectorService;
+import org.eclipse.rse.core.subsystems.ISubSystem;
+import org.eclipse.rse.internal.services.terminals.ITerminalService;
+import org.eclipse.rse.subsystems.terminals.core.TerminalServiceSubSystem;
+import org.eclipse.rse.subsystems.terminals.core.TerminalServiceSubSystemConfiguration;
+
+public class TerminalSubSystemConfigurationImpl extends
+ TerminalServiceSubSystemConfiguration {
+
+ /**
+ * Instantiate and return an instance of OUR subsystem. Do not populate it
+ * yet though!
+ *
+ * @see org.eclipse.rse.core.subsystems.SubSystemConfiguration#createSubSystemInternal(IHost)
+ */
+ public ISubSystem createSubSystemInternal(IHost host) {
+ IConnectorService connectorService = getConnectorService(host);
+ ISubSystem subsys = new TerminalServiceSubSystem(host,
+ connectorService, getTerminalService(host));
+ return subsys;
+ }
+
+ public ITerminalService createTerminalService(IHost host) {
+
+ ISubSystem ss = TerminalSubSystemHelper.getSuitableSubSystem(host);
+ if (ss != null) {
+ return (ITerminalService) (ss.getSubSystemConfiguration()
+ .getService(host)).getAdapter(ITerminalService.class);
+ } else {
+ return new DelegatingTerminalService(host);
+ }
+
+
+ }
+
+ public void setConnectorService(IHost host,
+ IConnectorService connectorService) {
+// SshConnectorServiceManager.getInstance().setConnectorService(host,
+// ISshService.class, connectorService);
+// Nothing to do here since we just re-use the existing suitable subsystem
+ }
+
+ public IConnectorService getConnectorService(IHost host) {
+ ISubSystem ss = TerminalSubSystemHelper.getSuitableSubSystem(host);
+ if (ss != null) {
+ return ss.getConnectorService();
+ } else {
+ return new DelegatingTerminalConnectorService(host);
+ }
+ }
+}
Index: plugin.xml
===================================================================
RCS file: plugin.xml
diff -N plugin.xml
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ plugin.xml 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
Index: src/org/eclipse/rse/internal/subsystems/terminals/core/DelegatingTerminalService.java
===================================================================
RCS file: src/org/eclipse/rse/internal/subsystems/terminals/core/DelegatingTerminalService.java
diff -N src/org/eclipse/rse/internal/subsystems/terminals/core/DelegatingTerminalService.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/rse/internal/subsystems/terminals/core/DelegatingTerminalService.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,82 @@
+/********************************************************************************
+ * Copyright (c) 2008 IBM Corporation. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Initial Contributors:
+ * The following IBM employees contributed to the Remote System Explorer
+ * component that contains this file: David McKnight.
+ *
+ * Contributors:
+ * {Name} (company) - description of contribution.
+ ********************************************************************************/
+package org.eclipse.rse.internal.subsystems.terminals.core;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.rse.core.model.IHost;
+import org.eclipse.rse.core.subsystems.ISubSystem;
+import org.eclipse.rse.internal.services.terminals.ITerminalService;
+import org.eclipse.rse.internal.services.terminals.ITerminalShell;
+import org.eclipse.rse.services.IService;
+import org.eclipse.rse.services.clientserver.messages.SystemMessageException;
+
+public class DelegatingTerminalService implements ITerminalService {
+
+ private IHost _host;
+ private ITerminalService _realService;
+
+ public DelegatingTerminalService(IHost host){
+ _host = host;
+ }
+
+
+ private ITerminalService getRealService() {
+ if (_host != null && _realService == null){
+ ISubSystem[] subSystems = _host.getSubSystems();
+ if (subSystems != null){
+ for (int i = 0; i < subSystems.length && _realService == null; i++){
+ ISubSystem subsys = subSystems[i];
+
+ IService svc = subsys.getSubSystemConfiguration().getService(_host);
+ if (svc!=null) {
+ ITerminalService tsvc = (ITerminalService)svc.getAdapter(ITerminalService.class);
+ if (tsvc!=null && tsvc != this) {
+ _realService = tsvc;
+ }
+ }
+ }
+ }
+ }
+
+ return _realService;
+ }
+
+ public ITerminalShell launchTerminal(String ptyType, String encoding,
+ String[] environment, String initialWorkingDirectory,
+ String commandToRun, IProgressMonitor monitor)
+ throws SystemMessageException {
+ return getRealService().launchTerminal(ptyType, encoding, environment, initialWorkingDirectory, commandToRun, monitor);
+ }
+
+ public String getDescription() {
+ return "Generic Terminal Service";
+ }
+
+ public String getName() {
+ return "Terminal Service";
+ }
+
+ public void initService(IProgressMonitor monitor) {
+ getRealService().initService(monitor);
+ }
+
+ public void uninitService(IProgressMonitor monitor) {
+ getRealService().uninitService(monitor);
+ }
+
+ public Object getAdapter(Class adapter) {
+ return getRealService().getAdapter(adapter);
+ }
+
+}
Index: src/org/eclipse/rse/internal/subsystems/terminals/core/TerminalSubSystemHelper.java
===================================================================
RCS file: src/org/eclipse/rse/internal/subsystems/terminals/core/TerminalSubSystemHelper.java
diff -N src/org/eclipse/rse/internal/subsystems/terminals/core/TerminalSubSystemHelper.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/rse/internal/subsystems/terminals/core/TerminalSubSystemHelper.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,50 @@
+package org.eclipse.rse.internal.subsystems.terminals.core;
+
+import org.eclipse.rse.core.model.IHost;
+import org.eclipse.rse.core.subsystems.ISubSystem;
+import org.eclipse.rse.internal.services.terminals.ITerminalService;
+import org.eclipse.rse.services.IService;
+import org.eclipse.rse.subsystems.terminals.core.ITerminalServiceSubSystem;
+
+public class TerminalSubSystemHelper {
+ /**
+ * Find the first ITerminalServiceSubSystem service associated with the
+ * host.
+ *
+ * @param host
+ * the connection
+ * @return shell service subsystem, or null
if not found.
+ */
+ public static ISubSystem getSuitableSubSystem(IHost host) {
+ if (host == null)
+ return null;
+ ISubSystem[] subSystems = host.getSubSystems();
+ ITerminalService ssvc = null;
+ for (int i = 0; subSystems != null && i < subSystems.length; i++) {
+ IService svc = subSystems[i].getSubSystemConfiguration()
+ .getService(host);
+ if (svc != null) {
+ ssvc = (ITerminalService) svc
+ .getAdapter(ITerminalService.class);
+ if (ssvc != null) {
+ return subSystems[i];
+ }
+ }
+ }
+ return null;
+ }
+
+ public static ITerminalServiceSubSystem getTerminalServiceSubSystem(
+ IHost host) {
+ if (host == null)
+ return null;
+ ISubSystem[] subSystems = host.getSubSystems();
+ for (int i = 0; subSystems != null && i < subSystems.length; i++) {
+ if (subSystems[i] instanceof ITerminalServiceSubSystem) {
+ return (ITerminalServiceSubSystem) subSystems[i];
+ }
+ }
+ return null;
+ }
+
+}
Index: src/org/eclipse/rse/internal/subsystems/terminals/core/DelegatingTerminalConnectorService.java
===================================================================
RCS file: src/org/eclipse/rse/internal/subsystems/terminals/core/DelegatingTerminalConnectorService.java
diff -N src/org/eclipse/rse/internal/subsystems/terminals/core/DelegatingTerminalConnectorService.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/rse/internal/subsystems/terminals/core/DelegatingTerminalConnectorService.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,66 @@
+/********************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Initial Contributors:
+ * The following IBM employees contributed to the Remote System Explorer
+ * component that contains this file: David McKnight.
+ *
+ * Contributors:
+ * Anna Dushistova (MontaVista) - [239159] The shell process subsystem not working without the shells subsystem present for the systemType
+ ********************************************************************************/
+package org.eclipse.rse.internal.subsystems.terminals.core;
+
+import org.eclipse.rse.core.model.IHost;
+import org.eclipse.rse.core.subsystems.AbstractDelegatingConnectorService;
+import org.eclipse.rse.core.subsystems.IConnectorService;
+import org.eclipse.rse.core.subsystems.ISubSystem;
+import org.eclipse.rse.subsystems.terminals.core.ITerminalServiceSubSystem;
+
+/**
+ * This class delegates the connector service requests for the terminal
+ * subsystem to the connector service of any subsystem that has service which can be adopted to ITerminalService.
+ */
+public class DelegatingTerminalConnectorService extends AbstractDelegatingConnectorService
+{
+ private IConnectorService _realService;
+
+ /**
+ * @param host the linux host that is the target for this connector service.
+ */
+ public DelegatingTerminalConnectorService(IHost host)
+ {
+ super(host);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.rse.core.subsystems.AbstractDelegatingConnectorService#getRealConnectorService()
+ */
+ public IConnectorService getRealConnectorService()
+ {
+ if (_realService != null)
+ {
+ return _realService;
+ }
+ else
+ {
+ ISubSystem ss = TerminalSubSystemHelper.getSuitableSubSystem(getHost());
+ if (ss != null)
+ {
+ _realService = ss.getConnectorService();
+
+ // register the process subsystem
+ ITerminalServiceSubSystem ts = TerminalSubSystemHelper.getTerminalServiceSubSystem(getHost());
+ _realService.registerSubSystem(ts);
+ return _realService;
+ }
+ else
+ {
+ return null;
+ }
+ }
+ }
+
+}
#P org.eclipse.rse.terminals.ui
Index: src/org/eclipse/rse/internal/terminals/ui/TerminalServiceHelper.java
===================================================================
RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.terminals.ui/src/org/eclipse/rse/internal/terminals/ui/TerminalServiceHelper.java,v
retrieving revision 1.3
diff -u -r1.3 TerminalServiceHelper.java
--- src/org/eclipse/rse/internal/terminals/ui/TerminalServiceHelper.java 20 May 2008 21:32:25 -0000 1.3
+++ src/org/eclipse/rse/internal/terminals/ui/TerminalServiceHelper.java 25 Sep 2008 20:54:19 -0000
@@ -42,8 +42,7 @@
ISystemRegistry systemRegistry = RSECorePlugin.getTheSystemRegistry();
ISubSystem[] subsystems = systemRegistry.getSubSystems(connection);
for (int i = 0; i < subsystems.length; i++) {
- if ("ssh.terminals".equals(subsystems[i]
- .getSubSystemConfiguration().getId())) {
+ if (subsystems[i] instanceof ITerminalServiceSubSystem) {
ITerminalServiceSubSystem subSystem = (ITerminalServiceSubSystem) subsystems[i];
return subSystem;
}