View | Details | Raw Unified | Return to bug 200541 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/tm/internal/terminal/ssh/SshConnector.java (-2 / +2 lines)
Lines 16-30 Link Here
16
16
17
import org.eclipse.tm.internal.terminal.provisional.api.ISettingsPage;
17
import org.eclipse.tm.internal.terminal.provisional.api.ISettingsPage;
18
import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
18
import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
19
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
20
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
19
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
21
import org.eclipse.tm.internal.terminal.provisional.api.Logger;
20
import org.eclipse.tm.internal.terminal.provisional.api.Logger;
21
import org.eclipse.tm.internal.terminal.provisional.api.TerminalConnectorImpl;
22
import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
22
import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
23
23
24
import com.jcraft.jsch.ChannelShell;
24
import com.jcraft.jsch.ChannelShell;
25
import com.jcraft.jsch.JSch;
25
import com.jcraft.jsch.JSch;
26
26
27
public class SshConnector implements ITerminalConnector {
27
public class SshConnector extends TerminalConnectorImpl {
28
	private OutputStream fOutputStream;
28
	private OutputStream fOutputStream;
29
	private InputStream fInputStream;
29
	private InputStream fInputStream;
30
	private ITerminalControl fControl;
30
	private ITerminalControl fControl;
(-)src/org/eclipse/tm/internal/terminal/control/impl/TerminalMessages.java (+1 lines)
Lines 22-25 Link Here
22
    public static String SocketError;
22
    public static String SocketError;
23
    public static String IOError;
23
    public static String IOError;
24
    public static String CannotConnectTo;
24
    public static String CannotConnectTo;
25
    public static String NotInitialized;
25
}
26
}
(-)src/org/eclipse/tm/internal/terminal/control/impl/TerminalMessages.properties (-1 / +2 lines)
Lines 17-20 Link Here
17
TerminalError = Terminal Error
17
TerminalError = Terminal Error
18
SocketError = Socket Error
18
SocketError = Socket Error
19
IOError = IO Error
19
IOError = IO Error
20
CannotConnectTo = Cannot initialize {0}:\n{1}
20
CannotConnectTo = Cannot initialize {0}:\n{1}
21
NotInitialized = Not Initialized
(-)src/org/eclipse/tm/internal/terminal/control/impl/ITerminalControlForText.java (-2 / +2 lines)
Lines 13-19 Link Here
13
13
14
import java.io.OutputStream;
14
import java.io.OutputStream;
15
15
16
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnectorInfo;
16
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
17
import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
17
import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
18
18
19
/**
19
/**
Lines 27-33 Link Here
27
	void setState(TerminalState state);
27
	void setState(TerminalState state);
28
	void setTerminalTitle(String title);
28
	void setTerminalTitle(String title);
29
	
29
	
30
	ITerminalConnectorInfo getTerminalConnectorInfo();
30
	ITerminalConnector getTerminalConnector();
31
31
32
	void disconnectTerminal();
32
	void disconnectTerminal();
33
33
(-)src/org/eclipse/tm/internal/terminal/provisional/api/ITerminalConnectorInfo.java (-64 lines)
Removed Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2006, 2007 Wind River Systems, Inc. and others.
3
 * All rights reserved. This program and the accompanying materials 
4
 * are made available under the terms of the Eclipse Public License v1.0 
5
 * which accompanies this distribution, and is available at 
6
 * http://www.eclipse.org/legal/epl-v10.html 
7
 * 
8
 * Contributors: 
9
 * Michael Scharf (Wind River) - initial API and implementation
10
 *******************************************************************************/
11
package org.eclipse.tm.internal.terminal.provisional.api;
12
13
/**
14
 * This class is a handle to a {@link ITerminalConnector connector} that comes from an
15
 * extension. It maintains a proxy to the connector to allow lazy initialization of the
16
 * real {@link ITerminalConnector connector} that comes from an extension.
17
 *
18
 * <p>
19
 * <strong>EXPERIMENTAL</strong>. This class or interface has been added as
20
 * part of a work in progress. There is no guarantee that this API will
21
 * work or that it will remain the same. Please do not use this API without
22
 * consulting with the <a href="http://www.eclipse.org/dsdp/tm/">Target Management</a> team.
23
 * </p>
24
 */
25
public interface ITerminalConnectorInfo {
26
	/**
27
	 * @return an ID of this connector. The id from the plugin.xml.
28
	 * <p>Note: return <code>null</code> because the framework takes 
29
	 * care to get the value from the plugin.xml
30
	 */
31
	String getId();
32
33
	/**
34
	 * @return <code>null</code> the name (as specified in the plugin.xml)
35
	 * <p>Note: return <code>null</code> because the framework takes 
36
	 * care to get the value from the plugin.xml
37
	 */
38
	String getName();
39
40
	/**
41
	 * @return true if the ITerminalConnector has been initialized.
42
	 * If there was an initialization error, {@link #getInitializationErrorMessage()}
43
	 * returns the error message.
44
	 */
45
	boolean isInitialized();
46
	
47
	/**
48
	 * This method initializes the connector if it is not initialized!
49
	 * If the connector was initialized successfully, <code>null</code> is
50
	 * returned. Otherwise an error message describing the problem is returned.
51
	 * @return <code>null</code> or a localized error message.
52
	 */
53
	String getInitializationErrorMessage();
54
	
55
	/**
56
	 * Returns a proxy to the connector that is lazily initialized.
57
	 * The following methods can be called without initializing
58
	 * the contributed class: 
59
	 * {@link ITerminalConnector#getSettingsSummary()}, {@link ITerminalConnector#load(ISettingsStore)},
60
	 * {@link ITerminalConnector#save(ISettingsStore)}, {@link ITerminalConnector#setTerminalSize(int, int)}
61
	 * @return a proxy of the real connector. Some calls initialize the the connection.
62
	 */
63
	ITerminalConnector getConnector();
64
}
(-)src/org/eclipse/tm/internal/terminal/provisional/api/ITerminalControl.java (-1 / +2 lines)
Lines 56-62 Link Here
56
	/**
56
	/**
57
	 * @return a stream used to write to the terminal. Any bytes written to this
57
	 * @return a stream used to write to the terminal. Any bytes written to this
58
	 * stream appear in the terminal or are interpreted by the emulator as
58
	 * stream appear in the terminal or are interpreted by the emulator as
59
	 * control sequences.
59
	 * control sequences. The stream in the opposite direction, terminal
60
	 * to remote is in {@link ITerminalConnector#getTerminalToRemoteStream()}.
60
	 */
61
	 */
61
	OutputStream getRemoteToTerminalOutputStream();
62
	OutputStream getRemoteToTerminalOutputStream();
62
63
(-)src/org/eclipse/tm/internal/terminal/provisional/api/TerminalConnectorExtension.java (-145 / +30 lines)
Lines 11-22 Link Here
11
 *******************************************************************************/
11
 *******************************************************************************/
12
package org.eclipse.tm.internal.terminal.provisional.api;
12
package org.eclipse.tm.internal.terminal.provisional.api;
13
13
14
import java.io.OutputStream;
15
import java.util.ArrayList;
14
import java.util.ArrayList;
16
import java.util.List;
15
import java.util.List;
17
16
18
import org.eclipse.core.runtime.IConfigurationElement;
17
import org.eclipse.core.runtime.IConfigurationElement;
19
import org.eclipse.core.runtime.RegistryFactory;
18
import org.eclipse.core.runtime.RegistryFactory;
19
import org.eclipse.tm.internal.terminal.connector.TerminalConnector;
20
20
21
/**
21
/**
22
 * A factory to get {@link ITerminalConnector} instances.
22
 * A factory to get {@link ITerminalConnector} instances.
Lines 31-192 Link Here
31
 * </p>
31
 * </p>
32
 */
32
 */
33
public class TerminalConnectorExtension {
33
public class TerminalConnectorExtension {
34
	static private class TerminalConnectorInfo implements ITerminalConnectorInfo {
34
	static private ITerminalConnector makeConnector(final IConfigurationElement config) {
35
		TerminalConnectorProxy fProxy;
35
		String id = config.getAttribute("id"); //$NON-NLS-1$
36
		TerminalConnectorInfo(TerminalConnectorProxy proxy) {
36
		if(id==null || id.length()==0)
37
			fProxy=proxy;
37
			id=config.getAttribute("class"); //$NON-NLS-1$
38
		}
38
		String name= config.getAttribute("name"); //$NON-NLS-1$
39
		public ITerminalConnector getConnector() {
39
		if(name==null || name.length()==0) {
40
			return fProxy;
40
			name=id;
41
		}
41
		}
42
		public String getId() {
42
		TerminalConnector.Factory factory=new TerminalConnector.Factory(){
43
			return fProxy.getId();
43
			public TerminalConnectorImpl makeConnector() throws Exception {
44
		}
44
				return (TerminalConnectorImpl)config.createExecutableExtension("class"); //$NON-NLS-1$
45
		public String getName() {
45
			}};
46
			return fProxy.getName();
46
		return new TerminalConnector(factory,id,name);
47
		}
48
		public String getInitializationErrorMessage() {
49
			return fProxy.getLocalizedErrorMessage();
50
		}
51
		public boolean isInitialized() {
52
			return fProxy.isInitialized();
53
		}
54
55
	}
47
	}
48
56
	/**
49
	/**
57
	 * A placeholder for the ITerminalConnector. It gets initialized when
50
	 * @param id the id of the terminal connector in the
58
	 * the real connector is needed. 
51
	 * <code>org.eclipse.tm.terminal.terminalConnector</code> extension point
59
	 * The following methods can be called without initializing
52
	 * @return a new ITerminalConnector with id or <code>null</code> if there is no
60
	 * the contributed class: {@link #getId()}, {@link #getName()},
53
	 * extension with that id.
61
	 * {@link #getSettingsSummary()},{@link #load(ISettingsStore)},
62
	 * {@link #setTerminalSize(int, int)}, {@link #save(ISettingsStore)}
63
	 *
64
	 */
54
	 */
65
	static private class TerminalConnectorProxy implements ITerminalConnector {
55
	public static ITerminalConnector makeTerminalConnector(String id) {
66
		/**
56
		IConfigurationElement[] config=RegistryFactory.getRegistry().getConfigurationElementsFor("org.eclipse.tm.terminal.terminalConnector"); //$NON-NLS-1$
67
		 * The connector
57
		for (int i = 0; i < config.length; i++) {
68
		 */
58
			if(id.equals(config[i].getAttribute("id"))) { //$NON-NLS-1$
69
		private ITerminalConnector fConnector;
59
				return makeConnector(config[i]);
70
		/**
71
		 * The plugin contribution, needed for lazy initialization
72
		 * of {@link #fConnector}
73
		 */
74
		private final IConfigurationElement fConfig;
75
		/**
76
		 * If the initialization of the class specified in the extension fails,
77
		 * this variable contains the error
78
		 */
79
		private Exception fException;
80
		/**
81
		 * The store might be set before the real connector is initialized.
82
		 * This keeps the value until the connector is created.
83
		 */
84
		private ISettingsStore fStore;
85
86
		TerminalConnectorProxy(IConfigurationElement config) {
87
			fConfig=config;
88
		}
89
		public String getLocalizedErrorMessage() {
90
			getConnector();
91
			if(fException!=null)
92
				return fException.getLocalizedMessage();
93
			return null;
94
		}
95
		public String getId() {
96
			String id = fConfig.getAttribute("id"); //$NON-NLS-1$
97
			if(id==null || id.length()==0)
98
				id=fConfig.getAttribute("class"); //$NON-NLS-1$
99
			return id;
100
		}
101
		public String getName() {
102
			String name= fConfig.getAttribute("name"); //$NON-NLS-1$
103
			if(name==null || name.length()==0) {
104
				name=getId();
105
			}
106
			return name;
107
		}
108
		private ITerminalConnector getConnector() {
109
			if(!isInitialized()) {
110
				try {
111
					fConnector=createConnector(fConfig);
112
					fConnector.initialize();
113
				} catch (Exception e) {
114
					fConnector=null;
115
					fException=e;
116
					// that's the place where we log the exception
117
					Logger.logException(e);
118
				}
119
				if(fConnector!=null && fStore!=null)
120
					fConnector.load(fStore);
121
			}
122
			return fConnector;
123
		}
124
		private boolean isInitialized() {
125
			return fConnector!=null || fException!=null;
126
		}
127
		public void connect(ITerminalControl control) {
128
			getConnector().connect(control);
129
		}
130
		public void disconnect() {
131
			getConnector().disconnect();
132
		}
133
		public OutputStream getOutputStream() {
134
			return getConnector().getOutputStream();
135
		}
136
		public String getSettingsSummary() {
137
			if(fConnector!=null)
138
				return getConnector().getSettingsSummary();
139
			else
140
				// TODO: see TerminalView.getSettingsSummary
141
				return "?"; //$NON-NLS-1$
142
		}
143
		public boolean isLocalEcho() {
144
			return getConnector().isLocalEcho();
145
		}
146
		public void load(ISettingsStore store) {
147
			if(fConnector==null) {
148
				fStore=store;
149
			} else {
150
				getConnector().load(store);
151
			}
152
		}
153
		public ISettingsPage makeSettingsPage() {
154
			return getConnector().makeSettingsPage();
155
		}
156
		public void save(ISettingsStore store) {
157
			// no need to save the settings: it cannot have changed
158
			// because we are not initialized....
159
			if(fConnector!=null)
160
				getConnector().save(store);
161
		}
162
		public void setTerminalSize(int newWidth, int newHeight) {
163
			// we assume that setTerminalSize is called also after
164
			// the terminal has been initialized. Else we would have to cache
165
			// the values....
166
			if(fConnector!=null) {
167
				fConnector.setTerminalSize(newWidth, newHeight);
168
			}
60
			}
169
		}
61
		}
170
		public void initialize() throws Exception {	
62
		return null;	
171
			throw new IllegalStateException("Connector already initialized!"); //$NON-NLS-1$
172
		}
173
	}
174
	/**
175
	 * @return null or a new connector created from the extension
176
	 */
177
	static private ITerminalConnector createConnector(IConfigurationElement config) throws Exception {
178
		return (ITerminalConnector)config.createExecutableExtension("class"); //$NON-NLS-1$
179
	}
63
	}
180
	/**
64
	/**
181
	 * @return a new list of ITerminalConnectorInfo. 
65
	 * @return a new list of {@link ITerminalConnector} instances defined in 
66
	 * the <code>org.eclipse.tm.terminal.terminalConnector</code> extension point
182
	 */
67
	 */
183
	public static ITerminalConnectorInfo[] getTerminalConnectors() {
68
	public static ITerminalConnector[] makeTerminalConnectors() {
184
		IConfigurationElement[] config=RegistryFactory.getRegistry().getConfigurationElementsFor("org.eclipse.tm.terminal.terminalConnector"); //$NON-NLS-1$
69
		IConfigurationElement[] config=RegistryFactory.getRegistry().getConfigurationElementsFor("org.eclipse.tm.terminal.terminalConnector"); //$NON-NLS-1$
185
		List result=new ArrayList();
70
		List result=new ArrayList();
186
		for (int i = 0; i < config.length; i++) {
71
		for (int i = 0; i < config.length; i++) {
187
			result.add(new TerminalConnectorInfo(new TerminalConnectorProxy(config[i])));
72
			result.add(makeConnector(config[i]));
188
		}
73
		}
189
		return (ITerminalConnectorInfo[]) result.toArray(new ITerminalConnectorInfo[result.size()]);
74
		return (ITerminalConnector[]) result.toArray(new ITerminalConnector[result.size()]);
190
	}
75
	}
191
76
192
}
77
}
(-)src/org/eclipse/tm/internal/terminal/provisional/api/ITerminalConnector.java (-9 / +33 lines)
Lines 13-23 Link Here
13
13
14
import java.io.OutputStream;
14
import java.io.OutputStream;
15
15
16
import org.eclipse.core.runtime.IAdaptable;
17
16
18
17
/**
19
/**
18
 * Manage a single connection. Implementations of this class are contributed 
20
 * Manage a single connection. Implementations of this class are contributed 
19
 * via <code>org.eclipse.tm.terminal.terminalConnector</code> extension point.
21
 * via <code>org.eclipse.tm.terminal.terminalConnector</code> extension point.
20
 * 
22
 * This class is a handle to a {@link ITerminalConnector connector} that comes from an
23
 * extension. It maintains {@link TerminalConnectorImpl} to the connector to allow lazy initialization of the
24
 * real {@link ITerminalConnector connector} that comes from an extension.
25
21
 * @author Michael Scharf
26
 * @author Michael Scharf
22
 * <p>
27
 * <p>
23
 * <strong>EXPERIMENTAL</strong>. This class or interface has been added as
28
 * <strong>EXPERIMENTAL</strong>. This class or interface has been added as
Lines 26-39 Link Here
26
 * consulting with the <a href="http://www.eclipse.org/dsdp/tm/">Target Management</a> team.
31
 * consulting with the <a href="http://www.eclipse.org/dsdp/tm/">Target Management</a> team.
27
 * </p>
32
 * </p>
28
 */
33
 */
29
public interface ITerminalConnector {
34
public interface ITerminalConnector extends IAdaptable {
35
	/**
36
	 * @return an ID of this connector. The id from the plugin.xml.
37
	 */
38
	String getId();
39
40
	/**
41
	 * @return <code>null</code> the name (as specified in the plugin.xml)
42
	 */
43
	String getName();
44
45
	/**
46
	 * @return true if the {@link TerminalConnectorImpl} has been initialized.
47
	 * If there was an initialization error, {@link #getInitializationErrorMessage()}
48
	 * returns the error message.
49
	 */
50
	boolean isInitialized();
51
	
30
	/**
52
	/**
31
	 * Initializes the Connector. Some connector depend on external libraries that
53
	 * This method initializes the connector if it is not initialized!
32
	 * might not be installed. 
54
	 * If the connector was initialized successfully, <code>null</code> is
33
	 * @throws Exception The exception should have a useful 
55
	 * returned. Otherwise an error message describing the problem is returned.
34
	 * {@link Exception#getLocalizedMessage()} that explains the problem to the user.
56
	 * @return <code>null</code> or a localized error message.
35
	 */
57
	 */
36
	void initialize() throws Exception;
58
	String getInitializationErrorMessage();
37
59
38
	/**
60
	/**
39
	 * Connect using the current state of the settings.
61
	 * Connect using the current state of the settings.
Lines 60-68 Link Here
60
    void setTerminalSize(int newWidth, int newHeight);
82
    void setTerminalSize(int newWidth, int newHeight);
61
83
62
    /**
84
    /**
63
     * @return a stream with data coming from the remote site.
85
     * @return the terminal to remote stream (bytes written to this stream will
86
     * be sent to the remote site). For the stream in the other direction (remote to
87
     * terminal see {@link ITerminalControl#getRemoteToTerminalOutputStream()}
64
     */
88
     */
65
    OutputStream getOutputStream();
89
    OutputStream getTerminalToRemoteStream();
66
90
67
	/**
91
	/**
68
	 * Load the state of this connection. Is typically called before 
92
	 * Load the state of this connection. Is typically called before 
(-)src/org/eclipse/tm/internal/terminal/control/ITerminalViewControl.java (-4 / +4 lines)
Lines 14-20 Link Here
14
import org.eclipse.swt.dnd.Clipboard;
14
import org.eclipse.swt.dnd.Clipboard;
15
import org.eclipse.swt.graphics.Font;
15
import org.eclipse.swt.graphics.Font;
16
import org.eclipse.swt.widgets.Control;
16
import org.eclipse.swt.widgets.Control;
17
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnectorInfo;
17
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
18
import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
18
import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
19
19
20
/**
20
/**
Lines 38-47 Link Here
38
    void disconnectTerminal();
38
    void disconnectTerminal();
39
    void disposeTerminal();
39
    void disposeTerminal();
40
    String getSettingsSummary();
40
    String getSettingsSummary();
41
    ITerminalConnectorInfo[] getConnectors();
41
    ITerminalConnector[] getConnectors();
42
    void setFocus();
42
    void setFocus();
43
    ITerminalConnectorInfo getTerminalConnectorInfo();
43
    ITerminalConnector getTerminalConnector();
44
    void setConnector(ITerminalConnectorInfo connector);
44
    void setConnector(ITerminalConnector connector);
45
    void connectTerminal();
45
    void connectTerminal();
46
    /**
46
    /**
47
     * @param write a single character to terminal
47
     * @param write a single character to terminal
(-)src/org/eclipse/tm/internal/terminal/control/TerminalViewControlFactory.java (-2 / +2 lines)
Lines 13-22 Link Here
13
13
14
import org.eclipse.swt.widgets.Composite;
14
import org.eclipse.swt.widgets.Composite;
15
import org.eclipse.tm.internal.terminal.emulator.VT100TerminalControl;
15
import org.eclipse.tm.internal.terminal.emulator.VT100TerminalControl;
16
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnectorInfo;
16
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
17
17
18
public class TerminalViewControlFactory {
18
public class TerminalViewControlFactory {
19
	public static ITerminalViewControl makeControl(ITerminalListener target, Composite wndParent, ITerminalConnectorInfo[] connectors) {
19
	public static ITerminalViewControl makeControl(ITerminalListener target, Composite wndParent, ITerminalConnector[] connectors) {
20
		return new VT100TerminalControl(target, wndParent, connectors);
20
		return new VT100TerminalControl(target, wndParent, connectors);
21
	}
21
	}
22
}
22
}
(-)META-INF/MANIFEST.MF (-2 / +8 lines)
Lines 12-21 Link Here
12
Eclipse-LazyStart: true
12
Eclipse-LazyStart: true
13
Bundle-RequiredExecutionEnvironment: J2SE-1.4
13
Bundle-RequiredExecutionEnvironment: J2SE-1.4
14
Bundle-ClassPath: .
14
Bundle-ClassPath: .
15
Export-Package: org.eclipse.tm.internal.terminal.control;x-friends:="org.eclipse.tm.terminal.view",
15
Export-Package: org.eclipse.tm.internal.terminal.connector;x-friends:="org.eclipse.tm.terminal.test",
16
 org.eclipse.tm.internal.terminal.control;x-friends:="org.eclipse.tm.terminal.view",
16
 org.eclipse.tm.internal.terminal.control.impl;x-friends:="org.eclipse.tm.terminal.test",
17
 org.eclipse.tm.internal.terminal.control.impl;x-friends:="org.eclipse.tm.terminal.test",
17
 org.eclipse.tm.internal.terminal.emulator;x-friends:="org.eclipse.tm.terminal.test",
18
 org.eclipse.tm.internal.terminal.emulator;x-friends:="org.eclipse.tm.terminal.test",
18
 org.eclipse.tm.internal.terminal.model;x-friends:="org.eclipse.tm.terminal.test",
19
 org.eclipse.tm.internal.terminal.model;x-friends:="org.eclipse.tm.terminal.test",
19
 org.eclipse.tm.internal.terminal.provisional.api;x-friends:="org.eclipse.tm.terminal.serial,org.eclipse.tm.terminal.ssh,org.eclipse.tm.terminal.telnet,org.eclipse.tm.terminal.view,org.eclipse.tm.terminal.test",
20
 org.eclipse.tm.internal.terminal.provisional.api;
21
  x-friends:="org.eclipse.tm.terminal.serial,
22
   org.eclipse.tm.terminal.ssh,
23
   org.eclipse.tm.terminal.telnet,
24
   org.eclipse.tm.terminal.view,
25
   org.eclipse.tm.terminal.test",
20
 org.eclipse.tm.internal.terminal.textcanvas;x-friends:="org.eclipse.tm.terminal.test",
26
 org.eclipse.tm.internal.terminal.textcanvas;x-friends:="org.eclipse.tm.terminal.test",
21
 org.eclipse.tm.terminal.model
27
 org.eclipse.tm.terminal.model
(-)src/org/eclipse/tm/internal/terminal/emulator/VT100Emulator.java (-2 / +2 lines)
Lines 1046-1053 Link Here
1046
	}
1046
	}
1047
1047
1048
	private ITerminalConnector getConnector() {
1048
	private ITerminalConnector getConnector() {
1049
		if(terminal.getTerminalConnectorInfo()!=null)
1049
		if(terminal.getTerminalConnector()!=null)
1050
			return terminal.getTerminalConnectorInfo().getConnector();
1050
			return terminal.getTerminalConnector();
1051
		return null;
1051
		return null;
1052
	}
1052
	}
1053
1053
(-)src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java (-26 / +16 lines)
Lines 58-64 Link Here
58
import org.eclipse.tm.internal.terminal.control.impl.TerminalMessages;
58
import org.eclipse.tm.internal.terminal.control.impl.TerminalMessages;
59
import org.eclipse.tm.internal.terminal.control.impl.TerminalPlugin;
59
import org.eclipse.tm.internal.terminal.control.impl.TerminalPlugin;
60
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
60
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
61
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnectorInfo;
62
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
61
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
63
import org.eclipse.tm.internal.terminal.provisional.api.Logger;
62
import org.eclipse.tm.internal.terminal.provisional.api.Logger;
64
import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
63
import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
Lines 103-110 Link Here
103
    private final ITerminalListener         fTerminalListener;
102
    private final ITerminalListener         fTerminalListener;
104
    private String                    fMsg = ""; //$NON-NLS-1$
103
    private String                    fMsg = ""; //$NON-NLS-1$
105
    private FocusListener             fFocusListener;
104
    private FocusListener             fFocusListener;
106
    private ITerminalConnectorInfo		  fConnectorInfo;
105
    private ITerminalConnector		  fConnector;
107
    private final ITerminalConnectorInfo[]      fConnectors;
106
    private final ITerminalConnector[]      fConnectors;
108
    PipedInputStream fInputStream;
107
    PipedInputStream fInputStream;
109
108
110
	private ICommandInputField fCommandInputField;
109
	private ICommandInputField fCommandInputField;
Lines 118-124 Link Here
118
	 */
117
	 */
119
	volatile private Job fJob;
118
	volatile private Job fJob;
120
119
121
	public VT100TerminalControl(ITerminalListener target, Composite wndParent, ITerminalConnectorInfo[] connectors) {
120
	public VT100TerminalControl(ITerminalListener target, Composite wndParent, ITerminalConnector[] connectors) {
122
		fConnectors=connectors;
121
		fConnectors=connectors;
123
		fTerminalListener=target;
122
		fTerminalListener=target;
124
		fTerminalModel=TerminalTextDataFactory.makeTerminalTextData();
123
		fTerminalModel=TerminalTextDataFactory.makeTerminalTextData();
Lines 129-135 Link Here
129
		setupTerminal(wndParent);
128
		setupTerminal(wndParent);
130
	}
129
	}
131
130
132
	public ITerminalConnectorInfo[] getConnectors() {
131
	public ITerminalConnector[] getConnectors() {
133
		return fConnectors;
132
		return fConnectors;
134
	}
133
	}
135
134
Lines 266-276 Link Here
266
		if(getTerminalConnector()==null)
265
		if(getTerminalConnector()==null)
267
			return;
266
			return;
268
		fTerminalText.resetState();
267
		fTerminalText.resetState();
269
		if(fConnectorInfo.getInitializationErrorMessage()!=null) {
268
		if(fConnector.getInitializationErrorMessage()!=null) {
270
			showErrorMessage(NLS.bind(
269
			showErrorMessage(NLS.bind(
271
					TerminalMessages.CannotConnectTo,
270
					TerminalMessages.CannotConnectTo,
272
					fConnectorInfo.getName(),
271
					fConnector.getName(),
273
					fConnectorInfo.getInitializationErrorMessage()));
272
					fConnector.getInitializationErrorMessage()));
274
			// we cannot connect because the connector was not initialized
273
			// we cannot connect because the connector was not initialized
275
			return;
274
			return;
276
		}
275
		}
Lines 280-289 Link Here
280
		waitForConnect();
279
		waitForConnect();
281
	}
280
	}
282
281
283
	private ITerminalConnector getTerminalConnector() {
282
	public ITerminalConnector getTerminalConnector() {
284
		if(fConnectorInfo==null)
283
		return fConnector;
285
			return null;
286
		return fConnectorInfo.getConnector();
287
	}
284
	}
288
	/* (non-Javadoc)
285
	/* (non-Javadoc)
289
	 * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#disconnectTerminal()
286
	 * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#disconnectTerminal()
Lines 605-611 Link Here
605
602
606
	public OutputStream getOutputStream() {
603
	public OutputStream getOutputStream() {
607
		if(getTerminalConnector()!=null)
604
		if(getTerminalConnector()!=null)
608
			return getTerminalConnector().getOutputStream();
605
			return getTerminalConnector().getTerminalToRemoteStream();
609
		return null;
606
		return null;
610
	}
607
	}
611
608
Lines 633-645 Link Here
633
	public VT100Emulator getTerminalText() {
630
	public VT100Emulator getTerminalText() {
634
		return fTerminalText;
631
		return fTerminalText;
635
	}
632
	}
636
637
	/**
638
	 */
639
	public ITerminalConnectorInfo getTerminalConnectorInfo() {
640
		return fConnectorInfo;
641
	}
642
643
	protected class TerminalFocusListener implements FocusListener {
633
	protected class TerminalFocusListener implements FocusListener {
644
		private IContextActivation contextActivation = null;
634
		private IContextActivation contextActivation = null;
645
635
Lines 844-852 Link Here
844
			// locally, send a LF after sending a CR.
834
			// locally, send a LF after sending a CR.
845
			// ISSUE: Is this absolutely required?
835
			// ISSUE: Is this absolutely required?
846
836
847
			if (character == '\r' && getTerminalConnectorInfo() != null
837
			if (character == '\r' && getTerminalConnector() != null
848
					&& isConnected()
838
					&& isConnected()
849
					&& getTerminalConnectorInfo().getConnector().isLocalEcho()) {
839
					&& getTerminalConnector().isLocalEcho()) {
850
				sendChar('\n', false);
840
				sendChar('\n', false);
851
			}
841
			}
852
842
Lines 865-872 Link Here
865
			//
855
			//
866
			// o The character is the DELETE character.
856
			// o The character is the DELETE character.
867
857
868
			if (getTerminalConnectorInfo() == null
858
			if (getTerminalConnector() == null
869
					|| getTerminalConnectorInfo().getConnector().isLocalEcho() == false || altKeyPressed
859
					|| getTerminalConnector().isLocalEcho() == false || altKeyPressed
870
					|| (character >= '\u0001' && character < '\t')
860
					|| (character >= '\u0001' && character < '\t')
871
					|| (character > '\t' && character < '\r')
861
					|| (character > '\t' && character < '\r')
872
					|| (character > '\r' && character <= '\u001f')
862
					|| (character > '\r' && character <= '\u001f')
Lines 912-919 Link Here
912
		return ""; //$NON-NLS-1$
902
		return ""; //$NON-NLS-1$
913
	}
903
	}
914
904
915
	public void setConnector(ITerminalConnectorInfo connector) {
905
	public void setConnector(ITerminalConnector connector) {
916
		fConnectorInfo=connector;
906
		fConnector=connector;
917
907
918
	}
908
	}
919
	public ICommandInputField getCommandInputField() {
909
	public ICommandInputField getCommandInputField() {
(-)schema/terminalConnector.exsd (-12 / +11 lines)
Lines 2-10 Link Here
2
<!-- Schema file written by PDE -->
2
<!-- Schema file written by PDE -->
3
<schema targetNamespace="org.eclipse.tm.terminal" xmlns="http://www.w3.org/2001/XMLSchema">
3
<schema targetNamespace="org.eclipse.tm.terminal" xmlns="http://www.w3.org/2001/XMLSchema">
4
<annotation>
4
<annotation>
5
      <appInfo>
5
      <appinfo>
6
         <meta.schema plugin="org.eclipse.tm.terminal" id="terminalConnector" name="TerminalConnector"/>
6
         <meta.schema plugin="org.eclipse.tm.terminal" id="terminalConnector" name="TerminalConnector"/>
7
      </appInfo>
7
      </appinfo>
8
      <documentation>
8
      <documentation>
9
         
9
         
10
      </documentation>
10
      </documentation>
Lines 34-42 Link Here
34
               <documentation>
34
               <documentation>
35
                  
35
                  
36
               </documentation>
36
               </documentation>
37
               <appInfo>
37
               <appinfo>
38
                  <meta.attribute translatable="true"/>
38
                  <meta.attribute translatable="true"/>
39
               </appInfo>
39
               </appinfo>
40
            </annotation>
40
            </annotation>
41
         </attribute>
41
         </attribute>
42
      </complexType>
42
      </complexType>
Lines 49-57 Link Here
49
               <documentation>
49
               <documentation>
50
                  A class implementing ITerminalConnector
50
                  A class implementing ITerminalConnector
51
               </documentation>
51
               </documentation>
52
               <appInfo>
52
               <appinfo>
53
                  <meta.attribute kind="java" basedOn="org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector"/>
53
                  <meta.attribute kind="java" basedOn="org.eclipse.tm.internal.terminal.provisional.api.TerminalConnectorImpl:"/>
54
               </appInfo>
54
               </appinfo>
55
            </annotation>
55
            </annotation>
56
         </attribute>
56
         </attribute>
57
         <attribute name="id" type="string" use="required">
57
         <attribute name="id" type="string" use="required">
Lines 66-74 Link Here
66
               <documentation>
66
               <documentation>
67
                  The name of the connection (used in the UI)
67
                  The name of the connection (used in the UI)
68
               </documentation>
68
               </documentation>
69
               <appInfo>
69
               <appinfo>
70
                  <meta.attribute translatable="true"/>
70
                  <meta.attribute translatable="true"/>
71
               </appInfo>
71
               </appinfo>
72
            </annotation>
72
            </annotation>
73
         </attribute>
73
         </attribute>
74
      </complexType>
74
      </complexType>
Lines 78-88 Link Here
78
78
79
79
80
80
81
82
   <annotation>
81
   <annotation>
83
      <appInfo>
82
      <appinfo>
84
         <meta.section type="copyright"/>
83
         <meta.section type="copyright"/>
85
      </appInfo>
84
      </appinfo>
86
      <documentation>
85
      <documentation>
87
         Copyright (c) 2006 Wind River Systems, Inc. and others.
86
         Copyright (c) 2006 Wind River Systems, Inc. and others.
88
All rights reserved. This program and the accompanying materials 
87
All rights reserved. This program and the accompanying materials 
(-)src/org/eclipse/tm/internal/terminal/provisional/api/TerminalConnectorImpl.java (+85 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2007 Wind River Systems, Inc. and others.
3
 * All rights reserved. This program and the accompanying materials 
4
 * are made available under the terms of the Eclipse Public License v1.0 
5
 * which accompanies this distribution, and is available at 
6
 * http://www.eclipse.org/legal/epl-v10.html 
7
 * 
8
 * Contributors: 
9
 * Michael Scharf (Wind River) - initial API and implementation
10
 *******************************************************************************/
11
package org.eclipse.tm.internal.terminal.provisional.api;
12
13
import java.io.OutputStream;
14
15
public abstract class TerminalConnectorImpl {
16
	/**
17
	 * Called once after the constructor
18
	 * @throws Exception
19
	 */
20
	public void initialize() throws Exception {
21
	}
22
	/**
23
	 * Connect using the current state of the settings.
24
	 * @param control Used to inform the UI about state changes and messages from the connection.
25
	 */
26
	abstract public void connect(ITerminalControl control);
27
28
	/**
29
	 * Disconnect if connected. Else do nothing.
30
	 * Has to set the state of the {@link ITerminalControl}
31
	 */
32
	abstract public void disconnect();
33
34
    /**
35
     * @return the terminal to remote stream (bytes written to this stream will
36
     * be sent to the remote site). For the stream in the other direction (remote to
37
     * terminal see {@link ITerminalControl#getRemoteToTerminalOutputStream()}
38
     */
39
	abstract public OutputStream getOutputStream();
40
41
	/**
42
	 * @return A string that represents the settings of the connection. This representation
43
	 * may be shown in the status line of the terminal view. 
44
	 */
45
	abstract public String getSettingsSummary();
46
	
47
	/**
48
	 * @return true if a local echo is needed.
49
	 * TODO:Michael Scharf: this should be handed within the connection....
50
	 */
51
	public boolean isLocalEcho() {
52
		return false;
53
	}
54
55
	/**
56
	 * @return a new page that can be used in a dialog to setup this connection.
57
	 * The dialog should persist its settings with the {@link #load(ISettingsStore)}
58
	 * and {@link #save(ISettingsStore)} methods.
59
	 *  
60
	 */
61
	abstract public ISettingsPage makeSettingsPage();
62
63
	/**
64
	 * Load the state of this connection. Is typically called before 
65
	 * {@link #connect(ITerminalControl)}.
66
	 * 
67
	 * @param store a string based data store. Short keys like "foo" can be used to 
68
	 * store the state of the connection.
69
	 */
70
	abstract public void load(ISettingsStore store);
71
	/**
72
	 * When the view or dialog containing the terminal is closed, 
73
	 * the state of the connection is saved into the settings store <code>store</code>
74
	 * @param store
75
	 */
76
	abstract public void save(ISettingsStore store);
77
78
    /**
79
     * Notify the remote site that the size of the terminal has changed.
80
     * @param newWidth
81
     * @param newHeight
82
     */
83
	public void setTerminalSize(int newWidth, int newHeight) {
84
	}
85
}
(-)src/org/eclipse/tm/internal/terminal/connector/TerminalConnector.java (+190 lines)
Added Link Here
1
package org.eclipse.tm.internal.terminal.connector;
2
3
import java.io.OutputStream;
4
5
import org.eclipse.core.runtime.IAdaptable;
6
import org.eclipse.core.runtime.Platform;
7
import org.eclipse.tm.internal.terminal.control.impl.TerminalMessages;
8
import org.eclipse.tm.internal.terminal.provisional.api.ISettingsPage;
9
import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
10
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
11
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
12
import org.eclipse.tm.internal.terminal.provisional.api.Logger;
13
import org.eclipse.tm.internal.terminal.provisional.api.TerminalConnectorImpl;
14
import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
15
16
/**
17
 * A placeholder for the ITerminalConnector. It gets initialized when
18
 * the real connector is needed. 
19
 * The following methods can be called without initializing
20
 * the contributed class: {@link #getId()}, {@link #getName()},
21
 * {@link #getSettingsSummary()},{@link #load(ISettingsStore)},
22
 * {@link #setTerminalSize(int, int)}, {@link #save(ISettingsStore)},
23
 * {@link #getAdapter(Class)}
24
 *
25
 */
26
public class TerminalConnector implements ITerminalConnector {
27
	/**
28
	 * Creates an instance of TerminalConnectorImpl. This is
29
	 * used to lazily load classed defined in extensions.
30
	 */
31
	public interface Factory {
32
		/**
33
		 * @return an Connector
34
		 * @throws Exception
35
		 */
36
		TerminalConnectorImpl makeConnector() throws Exception;
37
	}
38
	/**
39
	 * 
40
	 */
41
	private final TerminalConnector.Factory fTerminalConnectorFactory;
42
	/**
43
	 * The (display) name of the TerminalConnector
44
	 */
45
	private final String fName;
46
	/**
47
	 * The unique id the connector
48
	 */
49
	private final String fId;
50
	/**
51
	 * The connector
52
	 */
53
	private TerminalConnectorImpl fConnector;
54
	/**
55
	 * If the initialization of the class specified in the extension fails,
56
	 * this variable contains the error
57
	 */
58
	private Exception fException;
59
	/**
60
	 * The store might be set before the real connector is initialized.
61
	 * This keeps the value until the connector is created.
62
	 */
63
	private ISettingsStore fStore;
64
	/**
65
	 * @param terminalConnectorFactory
66
	 * @param id
67
	 * @param name
68
	 */
69
	public TerminalConnector(TerminalConnector.Factory terminalConnectorFactory, String id, String name) {
70
		fTerminalConnectorFactory = terminalConnectorFactory;
71
		fId = id;
72
		fName = name;
73
	}
74
	public String getInitializationErrorMessage() {
75
		getConnectorImpl();
76
		if(fException!=null)
77
			return fException.getLocalizedMessage();
78
		return null;
79
	}
80
	public String getId() {
81
		return fId;
82
	}
83
	public String getName() {
84
		return fName;
85
	}
86
	private TerminalConnectorImpl getConnectorImpl() {
87
		if(!isInitialized()) {
88
			try {
89
				fConnector=fTerminalConnectorFactory.makeConnector();
90
				fConnector.initialize();
91
			} catch (Exception e) {
92
				fException=e;
93
				fConnector=new TerminalConnectorImpl(){
94
					public void connect(ITerminalControl control) {
95
						control.setState(TerminalState.CLOSED);
96
						control.setMsg(getInitializationErrorMessage());
97
					}
98
					public void disconnect() {
99
					}
100
					public OutputStream getOutputStream() {
101
						return null;
102
					}
103
					public String getSettingsSummary() {
104
						return null;
105
					}
106
					public void load(ISettingsStore store) {
107
					}
108
					public ISettingsPage makeSettingsPage() {
109
						return null;
110
					}
111
					public void save(ISettingsStore store) {
112
					}};
113
				// that's the place where we log the exception
114
				Logger.logException(e);
115
			}
116
			if(fConnector!=null && fStore!=null)
117
				fConnector.load(fStore);
118
		}
119
		return fConnector;
120
	}
121
	
122
	public boolean isInitialized() {
123
		return fConnector!=null || fException!=null;
124
	}
125
	public void connect(ITerminalControl control) {
126
		getConnectorImpl().connect(control);
127
	}
128
	public void disconnect() {
129
		getConnectorImpl().disconnect();
130
	}
131
	public OutputStream getTerminalToRemoteStream() {
132
		return getConnectorImpl().getOutputStream();
133
	}
134
	public String getSettingsSummary() {
135
		if(fConnector!=null)
136
			return getConnectorImpl().getSettingsSummary();
137
		else
138
			return TerminalMessages.NotInitialized; 
139
	}
140
	public boolean isLocalEcho() {
141
		return getConnectorImpl().isLocalEcho();
142
	}
143
	public void load(ISettingsStore store) {
144
		if(fConnector==null) {
145
			fStore=store;
146
		} else {
147
			getConnectorImpl().load(store);
148
		}
149
	}
150
	public ISettingsPage makeSettingsPage() {
151
		return getConnectorImpl().makeSettingsPage();
152
	}
153
	public void save(ISettingsStore store) {
154
		// no need to save the settings: it cannot have changed
155
		// because we are not initialized....
156
		if(fConnector!=null)
157
			getConnectorImpl().save(store);
158
	}
159
	public void setTerminalSize(int newWidth, int newHeight) {
160
		// we assume that setTerminalSize is called also after
161
		// the terminal has been initialized. Else we would have to cache
162
		// the values....
163
		if(fConnector!=null) {
164
			fConnector.setTerminalSize(newWidth, newHeight);
165
		}
166
	}
167
	public Object getAdapter(Class adapter) {
168
		TerminalConnectorImpl connector=null;
169
		if(isInitialized())
170
			connector=getConnectorImpl();
171
		// if we cannot create the connector then we cannot adapt...
172
		if(connector!=null) {
173
			// maybe the connector is adaptable
174
			if(connector instanceof IAdaptable) {
175
				Object result =((IAdaptable)connector).getAdapter(adapter);
176
				// Not sure if the next block is needed....
177
				if(result==null)
178
					//defer to the platform
179
					result= Platform.getAdapterManager().getAdapter(connector, adapter);
180
				if(result!=null)
181
					return result;
182
			}
183
			// maybe the real adapter is what we need....
184
			if(adapter.isInstance(connector))
185
				return connector;
186
		}
187
		// maybe we have to be adapted....
188
		return Platform.getAdapterManager().getAdapter(this, adapter);
189
	}
190
}
(-)src/org/eclipse/tm/internal/terminal/telnet/TelnetConnector.java (-2 / +2 lines)
Lines 23-34 Link Here
23
23
24
import org.eclipse.tm.internal.terminal.provisional.api.ISettingsPage;
24
import org.eclipse.tm.internal.terminal.provisional.api.ISettingsPage;
25
import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
25
import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
26
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
27
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
26
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
28
import org.eclipse.tm.internal.terminal.provisional.api.Logger;
27
import org.eclipse.tm.internal.terminal.provisional.api.Logger;
28
import org.eclipse.tm.internal.terminal.provisional.api.TerminalConnectorImpl;
29
import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
29
import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
30
30
31
public class TelnetConnector implements ITerminalConnector {
31
public class TelnetConnector extends TerminalConnectorImpl {
32
	private OutputStream fOutputStream;
32
	private OutputStream fOutputStream;
33
	private InputStream fInputStream;
33
	private InputStream fInputStream;
34
	private Socket fSocket;
34
	private Socket fSocket;
(-)src/org/eclipse/tm/internal/terminal/view/TerminalView.java (-15 / +23 lines)
Lines 56-62 Link Here
56
import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
56
import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
57
import org.eclipse.tm.internal.terminal.control.TerminalViewControlFactory;
57
import org.eclipse.tm.internal.terminal.control.TerminalViewControlFactory;
58
import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
58
import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
59
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnectorInfo;
59
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
60
import org.eclipse.tm.internal.terminal.provisional.api.Logger;
60
import org.eclipse.tm.internal.terminal.provisional.api.Logger;
61
import org.eclipse.tm.internal.terminal.provisional.api.TerminalConnectorExtension;
61
import org.eclipse.tm.internal.terminal.provisional.api.TerminalConnectorExtension;
62
import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
62
import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
Lines 211-217 Link Here
211
		//if (isConnected())
211
		//if (isConnected())
212
		if (fCtlTerminal.getState()!=TerminalState.CLOSED)
212
		if (fCtlTerminal.getState()!=TerminalState.CLOSED)
213
			return;
213
			return;
214
		if(fCtlTerminal.getTerminalConnectorInfo()==null)
214
		if(fCtlTerminal.getTerminalConnector()==null)
215
			setConnector(showSettingsDialog());
215
			setConnector(showSettingsDialog());
216
		fCtlTerminal.connectTerminal();
216
		fCtlTerminal.connectTerminal();
217
	}
217
	}
Lines 246-252 Link Here
246
	}
246
	}
247
247
248
	public void onTerminalSettings() {
248
	public void onTerminalSettings() {
249
		ITerminalConnectorInfo c=showSettingsDialog();
249
		ITerminalConnector c=showSettingsDialog();
250
		if(c!=null) {
250
		if(c!=null) {
251
			setConnector(c);
251
			setConnector(c);
252
252
Lines 254-264 Link Here
254
		}
254
		}
255
	}
255
	}
256
256
257
	private ITerminalConnectorInfo showSettingsDialog() {
257
	private ITerminalConnector showSettingsDialog() {
258
		// When the settings dialog is opened, load the Terminal settings from the
258
		// When the settings dialog is opened, load the Terminal settings from the
259
		// persistent settings.
259
		// persistent settings.
260
260
261
		TerminalSettingsDlg dlgTerminalSettings = new TerminalSettingsDlg(getViewSite().getShell(),fCtlTerminal.getConnectors(),fCtlTerminal.getTerminalConnectorInfo());
261
		TerminalSettingsDlg dlgTerminalSettings = new TerminalSettingsDlg(getViewSite().getShell(),fCtlTerminal.getConnectors(),fCtlTerminal.getTerminalConnector());
262
		dlgTerminalSettings.setTerminalTitle(getPartName());
262
		dlgTerminalSettings.setTerminalTitle(getPartName());
263
		Logger.log("opening Settings dialog."); //$NON-NLS-1$
263
		Logger.log("opening Settings dialog."); //$NON-NLS-1$
264
264
Lines 276-282 Link Here
276
		return dlgTerminalSettings.getConnector();
276
		return dlgTerminalSettings.getConnector();
277
	}
277
	}
278
278
279
	private void setConnector(ITerminalConnectorInfo connector) {
279
	private void setConnector(ITerminalConnector connector) {
280
		fCtlTerminal.setConnector(connector);
280
		fCtlTerminal.setConnector(connector);
281
	}
281
	}
282
282
Lines 296-302 Link Here
296
			// display in the view's content description line.  This is used by class
296
			// display in the view's content description line.  This is used by class
297
			// TerminalText when it processes an ANSI OSC escape sequence that commands
297
			// TerminalText when it processes an ANSI OSC escape sequence that commands
298
			// the terminal to display text in its title bar.
298
			// the terminal to display text in its title bar.
299
		} else if(fCtlTerminal.getTerminalConnectorInfo()==null){
299
		} else if(fCtlTerminal.getTerminalConnector()==null){
300
			strTitle=ViewMessages.NO_CONNECTION_SELECTED;
300
			strTitle=ViewMessages.NO_CONNECTION_SELECTED;
301
		} else {
301
		} else {
302
			// When parameter 'data' is null, we construct a descriptive string to
302
			// When parameter 'data' is null, we construct a descriptive string to
Lines 307-313 Link Here
307
			//In order to make the logic of assembling, and the separators, better adapt to foreign languages
307
			//In order to make the logic of assembling, and the separators, better adapt to foreign languages
308
			if(summary.length()>0)
308
			if(summary.length()>0)
309
				summary=summary+" - ";  //$NON-NLS-1$
309
				summary=summary+" - ";  //$NON-NLS-1$
310
			String name=fCtlTerminal.getTerminalConnectorInfo().getName();
310
			String name=fCtlTerminal.getTerminalConnector().getName();
311
			if(name.length()>0) {
311
			if(name.length()>0) {
312
				name+=": "; //$NON-NLS-1$
312
				name+=": "; //$NON-NLS-1$
313
			}
313
			}
Lines 327-333 Link Here
327
		// TODO: use another mechanism than "?" for the magic non initialized state
327
		// TODO: use another mechanism than "?" for the magic non initialized state
328
		// see TerminalConnectorProxy.getSettingsSummary
328
		// see TerminalConnectorProxy.getSettingsSummary
329
		String summary="?"; //$NON-NLS-1$
329
		String summary="?"; //$NON-NLS-1$
330
		if(fCtlTerminal.getTerminalConnectorInfo()!=null)
330
		if(fCtlTerminal.getTerminalConnector()!=null)
331
			summary=fCtlTerminal.getSettingsSummary();
331
			summary=fCtlTerminal.getSettingsSummary();
332
		if("?".equals(summary)) { //$NON-NLS-1$
332
		if("?".equals(summary)) { //$NON-NLS-1$
333
			summary=fStore.get(STORE_SETTING_SUMMARY, ""); //$NON-NLS-1$
333
			summary=fStore.get(STORE_SETTING_SUMMARY, ""); //$NON-NLS-1$
Lines 451-461 Link Here
451
	 * This method creates the top-level control for the Terminal view.
451
	 * This method creates the top-level control for the Terminal view.
452
	 */
452
	 */
453
	protected void setupControls(Composite wndParent) {
453
	protected void setupControls(Composite wndParent) {
454
		ITerminalConnectorInfo[] connectors=TerminalConnectorExtension.getTerminalConnectors();
454
		ITerminalConnector[] connectors = makeConnectors();
455
		fCtlTerminal = TerminalViewControlFactory.makeControl(this, wndParent, connectors);
455
		fCtlTerminal = TerminalViewControlFactory.makeControl(this, wndParent, connectors);
456
		String connectionType=fStore.get(STORE_CONNECTION_TYPE);
456
		String connectionType=fStore.get(STORE_CONNECTION_TYPE);
457
		for (int i = 0; i < connectors.length; i++) {
457
		for (int i = 0; i < connectors.length; i++) {
458
			connectors[i].getConnector().load(getStore(connectors[i]));
458
			connectors[i].load(getStore(connectors[i]));
459
			if(connectors[i].getId().equals(connectionType))
459
			if(connectors[i].getId().equals(connectionType))
460
				fCtlTerminal.setConnector(connectors[i]);
460
				fCtlTerminal.setConnector(connectors[i]);
461
		}
461
		}
Lines 469-478 Link Here
469
			setPartName(title);
469
			setPartName(title);
470
	}
470
	}
471
471
472
	private void saveSettings(ITerminalConnectorInfo connector) {
472
	/**
473
		ITerminalConnectorInfo[] connectors=fCtlTerminal.getConnectors();
473
	 * @return a list of connectors this view can use
474
	 */
475
	protected ITerminalConnector[] makeConnectors() {
476
		ITerminalConnector[] connectors=TerminalConnectorExtension.makeTerminalConnectors();
477
		return connectors;
478
	}
479
480
	private void saveSettings(ITerminalConnector connector) {
481
		ITerminalConnector[] connectors=fCtlTerminal.getConnectors();
474
		for (int i = 0; i < connectors.length; i++) {
482
		for (int i = 0; i < connectors.length; i++) {
475
			connectors[i].getConnector().save(getStore(connectors[i]));
483
			connectors[i].save(getStore(connectors[i]));
476
		}
484
		}
477
		if(connector!=null) {
485
		if(connector!=null) {
478
			fStore.put(STORE_CONNECTION_TYPE,connector.getId());
486
			fStore.put(STORE_CONNECTION_TYPE,connector.getId());
Lines 493-499 Link Here
493
		fStore.put(STORE_TITLE,getPartName());
501
		fStore.put(STORE_TITLE,getPartName());
494
		fStore.saveState(memento);
502
		fStore.saveState(memento);
495
	}
503
	}
496
	private ISettingsStore getStore(ITerminalConnectorInfo connector) {
504
	private ISettingsStore getStore(ITerminalConnector connector) {
497
		return new SettingStorePrefixDecorator(fStore,connector.getId()+"."); //$NON-NLS-1$
505
		return new SettingStorePrefixDecorator(fStore,connector.getId()+"."); //$NON-NLS-1$
498
	}
506
	}
499
507
(-)src/org/eclipse/tm/internal/terminal/view/TerminalSettingsDlg.java (-9 / +9 lines)
Lines 41-52 Link Here
41
import org.eclipse.swt.widgets.Shell;
41
import org.eclipse.swt.widgets.Shell;
42
import org.eclipse.swt.widgets.Text;
42
import org.eclipse.swt.widgets.Text;
43
import org.eclipse.tm.internal.terminal.provisional.api.ISettingsPage;
43
import org.eclipse.tm.internal.terminal.provisional.api.ISettingsPage;
44
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnectorInfo;
44
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
45
45
46
class TerminalSettingsDlg extends Dialog {
46
class TerminalSettingsDlg extends Dialog {
47
	private Combo fCtlConnTypeCombo;
47
	private Combo fCtlConnTypeCombo;
48
	private Text fTerminalTitleText;
48
	private Text fTerminalTitleText;
49
	private final ITerminalConnectorInfo[] fConnectors;
49
	private final ITerminalConnector[] fConnectors;
50
	private final ISettingsPage[] fPages;
50
	private final ISettingsPage[] fPages;
51
	/**
51
	/**
52
	 * Maps the fConnectors index to the fPages index
52
	 * Maps the fConnectors index to the fPages index
Lines 58-64 Link Here
58
	private IDialogSettings fDialogSettings;
58
	private IDialogSettings fDialogSettings;
59
	private String fTerminalTitle;
59
	private String fTerminalTitle;
60
60
61
	public TerminalSettingsDlg(Shell shell, ITerminalConnectorInfo[] connectors, ITerminalConnectorInfo connector) {
61
	public TerminalSettingsDlg(Shell shell, ITerminalConnector[] connectors, ITerminalConnector connector) {
62
		super(shell);
62
		super(shell);
63
		fConnectors=getValidConnectors(connectors);
63
		fConnectors=getValidConnectors(connectors);
64
		fPages=new ISettingsPage[fConnectors.length];
64
		fPages=new ISettingsPage[fConnectors.length];
Lines 73-93 Link Here
73
	 * @param connectors
73
	 * @param connectors
74
	 * @return connectors excluding connectors with errors
74
	 * @return connectors excluding connectors with errors
75
	 */
75
	 */
76
	private ITerminalConnectorInfo[] getValidConnectors(ITerminalConnectorInfo[] connectors) {
76
	private ITerminalConnector[] getValidConnectors(ITerminalConnector[] connectors) {
77
		List list=new ArrayList(Arrays.asList(connectors));
77
		List list=new ArrayList(Arrays.asList(connectors));
78
		for (Iterator iterator = list.iterator(); iterator.hasNext();) {
78
		for (Iterator iterator = list.iterator(); iterator.hasNext();) {
79
			ITerminalConnectorInfo info = (ITerminalConnectorInfo) iterator.next();
79
			ITerminalConnector info = (ITerminalConnector) iterator.next();
80
			if(info.isInitialized() && info.getInitializationErrorMessage()!=null)
80
			if(info.isInitialized() && info.getInitializationErrorMessage()!=null)
81
				iterator.remove();
81
				iterator.remove();
82
		}
82
		}
83
		connectors=(ITerminalConnectorInfo[]) list.toArray(new ITerminalConnectorInfo[list.size()]);
83
		connectors=(ITerminalConnector[]) list.toArray(new ITerminalConnector[list.size()]);
84
		return connectors;
84
		return connectors;
85
	}
85
	}
86
	ISettingsPage getPage(int i) {
86
	ISettingsPage getPage(int i) {
87
		if(fPages[i]==null) {
87
		if(fPages[i]==null) {
88
			if(fConnectors[i].getInitializationErrorMessage()!=null) {
88
			if(fConnectors[i].getInitializationErrorMessage()!=null) {
89
				// create a error message
89
				// create a error message
90
				final ITerminalConnectorInfo conn=fConnectors[i];
90
				final ITerminalConnector conn=fConnectors[i];
91
				fPages[i]=new ISettingsPage(){
91
				fPages[i]=new ISettingsPage(){
92
					public void createControl(Composite parent) {
92
					public void createControl(Composite parent) {
93
						Label l=new Label(parent,SWT.WRAP);
93
						Label l=new Label(parent,SWT.WRAP);
Lines 105-111 Link Here
105
					public boolean validateSettings() {return false;}
105
					public boolean validateSettings() {return false;}
106
				};
106
				};
107
			} else {
107
			} else {
108
				fPages[i]=fConnectors[i].getConnector().makeSettingsPage();
108
				fPages[i]=fConnectors[i].makeSettingsPage();
109
			}
109
			}
110
			// TODO: what happens if an error occurs while
110
			// TODO: what happens if an error occurs while
111
			// the control is partly created?
111
			// the control is partly created?
Lines 245-251 Link Here
245
			}
245
			}
246
		});
246
		});
247
	}
247
	}
248
	public ITerminalConnectorInfo getConnector() {
248
	public ITerminalConnector getConnector() {
249
		if(fSelectedConnector>=0)
249
		if(fSelectedConnector>=0)
250
			return fConnectors[fSelectedConnector];
250
			return fConnectors[fSelectedConnector];
251
		return null;
251
		return null;
(-)src/org/eclipse/tm/internal/terminal/serial/SerialConnector.java (-2 / +2 lines)
Lines 30-41 Link Here
30
import org.eclipse.core.runtime.Status;
30
import org.eclipse.core.runtime.Status;
31
import org.eclipse.tm.internal.terminal.provisional.api.ISettingsPage;
31
import org.eclipse.tm.internal.terminal.provisional.api.ISettingsPage;
32
import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
32
import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
33
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
34
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
33
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
35
import org.eclipse.tm.internal.terminal.provisional.api.Logger;
34
import org.eclipse.tm.internal.terminal.provisional.api.Logger;
35
import org.eclipse.tm.internal.terminal.provisional.api.TerminalConnectorImpl;
36
import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
36
import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
37
37
38
public class SerialConnector implements ITerminalConnector {
38
public class SerialConnector extends TerminalConnectorImpl {
39
	private OutputStream fOutputStream;
39
	private OutputStream fOutputStream;
40
	private InputStream fInputStream;
40
	private InputStream fInputStream;
41
	private ITerminalControl fControl;
41
	private ITerminalControl fControl;
(-)META-INF/MANIFEST.MF (-1 / +2 lines)
Lines 8-14 Link Here
8
Require-Bundle: org.junit,
8
Require-Bundle: org.junit,
9
 org.eclipse.tm.terminal,
9
 org.eclipse.tm.terminal,
10
 org.eclipse.swt,
10
 org.eclipse.swt,
11
 org.eclipse.jface
11
 org.eclipse.jface,
12
 org.eclipse.core.runtime
12
Bundle-RequiredExecutionEnvironment: J2SE-1.4
13
Bundle-RequiredExecutionEnvironment: J2SE-1.4
13
Export-Package: org.eclipse.tm.internal.terminal.emulator;x-internal:=true,
14
Export-Package: org.eclipse.tm.internal.terminal.emulator;x-internal:=true,
14
 org.eclipse.tm.internal.terminal.model;x-internal:=true,
15
 org.eclipse.tm.internal.terminal.model;x-internal:=true,
(-)src/org/eclipse/tm/internal/terminal/connector/TerminalConnectorTest.java (+255 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2007 Wind River Systems, Inc. and others.
3
 * All rights reserved. This program and the accompanying materials 
4
 * are made available under the terms of the Eclipse Public License v1.0 
5
 * which accompanies this distribution, and is available at 
6
 * http://www.eclipse.org/legal/epl-v10.html 
7
 * 
8
 * Contributors: 
9
 * Michael Scharf (Wind River) - initial API and implementation
10
 *******************************************************************************/
11
package org.eclipse.tm.internal.terminal.connector;
12
13
import java.io.OutputStream;
14
15
import junit.framework.TestCase;
16
17
import org.eclipse.swt.widgets.Composite;
18
import org.eclipse.swt.widgets.Shell;
19
import org.eclipse.tm.internal.terminal.connector.TerminalConnector.Factory;
20
import org.eclipse.tm.internal.terminal.provisional.api.ISettingsPage;
21
import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
22
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
23
import org.eclipse.tm.internal.terminal.provisional.api.TerminalConnectorImpl;
24
import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
25
26
public class TerminalConnectorTest extends TestCase {
27
	public class SettingsMock implements ISettingsStore {
28
29
		public String get(String key) {
30
			return null;
31
		}
32
33
		public String get(String key, String defaultValue) {
34
			return null;
35
		}
36
37
		public void put(String key, String value) {
38
		}
39
	
40
	}
41
	public static class TerminalControlMock implements ITerminalControl {
42
43
		public void displayTextInTerminal(String text) {
44
		}
45
46
		public OutputStream getRemoteToTerminalOutputStream() {
47
			return null;
48
		}
49
50
		public Shell getShell() {
51
			return null;
52
		}
53
54
		public TerminalState getState() {
55
			return null;
56
		}
57
58
		public void setMsg(String msg) {
59
		}
60
61
		public void setState(TerminalState state) {
62
		}
63
64
		public void setTerminalTitle(String title) {
65
		}
66
67
	}
68
	static class ConnectorMock extends TerminalConnectorImpl {
69
70
		public boolean fEcho;
71
		public int fWidth;
72
		public int fHeight;
73
		public ITerminalControl fControl;
74
		public ISettingsStore fSaveStore;
75
		public ISettingsStore fLoadStore;
76
		public boolean fDisconnect;
77
78
		public boolean isLocalEcho() {
79
			return fEcho;
80
		}
81
		public void setTerminalSize(int newWidth, int newHeight) {
82
			fWidth=newWidth;
83
			fHeight=newHeight;
84
		}
85
		public void connect(ITerminalControl control) {
86
			fControl=control;
87
		}
88
		public void disconnect() {
89
			fDisconnect=true;
90
		}
91
92
		public OutputStream getOutputStream() {
93
			return null;
94
		}
95
96
		public String getSettingsSummary() {
97
			return "Summary";
98
		}
99
100
		public void load(ISettingsStore store) {
101
			fLoadStore=store;
102
		}
103
104
		public ISettingsPage makeSettingsPage() {
105
			return new ISettingsPage(){
106
				public void createControl(Composite parent) {
107
				}
108
				public void loadSettings() {
109
				}
110
				public void saveSettings() {
111
				}
112
				public boolean validateSettings() {
113
					return false;
114
				}};
115
		}
116
117
		public void save(ISettingsStore store) {
118
			fSaveStore=store;
119
		}
120
	}
121
	static class SimpleFactory implements Factory {
122
		final TerminalConnectorImpl fConnector;
123
		public SimpleFactory(TerminalConnectorImpl connector) {
124
			fConnector = connector;
125
		}
126
		public TerminalConnectorImpl makeConnector() throws Exception {
127
			// TODO Auto-generated method stub
128
			return fConnector;
129
		}		
130
	}
131
	public void testGetInitializationErrorMessage() {
132
		TerminalConnector c=new TerminalConnector(new SimpleFactory(new ConnectorMock()),"xID","xName");
133
		c.connect(new TerminalControlMock());
134
		assertNull(c.getInitializationErrorMessage());
135
136
		c=new TerminalConnector(new SimpleFactory(new ConnectorMock(){
137
			public void initialize() throws Exception {
138
				throw new Exception("FAILED");
139
			}}),"xID","xName");
140
		c.connect(new TerminalControlMock());
141
		assertEquals("FAILED",c.getInitializationErrorMessage());
142
		
143
	}
144
145
	public void testGetIdAndName() {
146
		TerminalConnector c=new TerminalConnector(new SimpleFactory(new ConnectorMock()),"xID","xName");
147
		assertEquals("xID", c.getId());
148
		assertEquals("xName", c.getName());
149
	}
150
151
	public void testIsInitialized() {
152
		TerminalConnector c=new TerminalConnector(new SimpleFactory(new ConnectorMock()),"xID","xName");
153
		assertFalse(c.isInitialized());
154
		c.getId();
155
		assertFalse(c.isInitialized());
156
		c.getName();
157
		assertFalse(c.isInitialized());
158
		c.getSettingsSummary();
159
		assertFalse(c.isInitialized());
160
		c.setTerminalSize(10,10);
161
		assertFalse(c.isInitialized());
162
		c.load(null);
163
		assertFalse(c.isInitialized());
164
		c.save(null);
165
		assertFalse(c.isInitialized());
166
		c.getAdapter(ConnectorMock.class);
167
		assertFalse(c.isInitialized());
168
	}
169
170
	public void testConnect() {
171
		TerminalConnector c=new TerminalConnector(new SimpleFactory(new ConnectorMock()),"xID","xName");
172
		assertFalse(c.isInitialized());
173
		c.connect(new TerminalControlMock());
174
		assertTrue(c.isInitialized());
175
		
176
	}
177
178
	public void testDisconnect() {
179
		ConnectorMock mock=new ConnectorMock();
180
		TerminalConnector c=new TerminalConnector(new SimpleFactory(mock),"xID","xName");
181
		TerminalControlMock control=new TerminalControlMock();
182
		c.connect(control);
183
		c.disconnect();
184
		assertTrue(mock.fDisconnect);
185
	}
186
187
	public void testGetTerminalToRemoteStream() {
188
		ConnectorMock mock=new ConnectorMock();
189
		TerminalConnector c=new TerminalConnector(new SimpleFactory(mock),"xID","xName");
190
		TerminalControlMock control=new TerminalControlMock();
191
		c.connect(control);
192
		assertSame(mock.fControl,control);
193
	}
194
195
	public void testGetSettingsSummary() {
196
		TerminalConnector c=new TerminalConnector(new SimpleFactory(new ConnectorMock()),"xID","xName");
197
		assertEquals("Not Initialized", c.getSettingsSummary());
198
		c.connect(new TerminalControlMock());
199
		assertEquals("Summary", c.getSettingsSummary());
200
	}
201
202
	public void testIsLocalEcho() {
203
		ConnectorMock mock=new ConnectorMock();
204
		TerminalConnector c=new TerminalConnector(new SimpleFactory(mock),"xID","xName");
205
		assertFalse(c.isLocalEcho());
206
		mock.fEcho=true;
207
		assertTrue(c.isLocalEcho());
208
	}
209
210
	public void testLoad() {
211
		ConnectorMock mock=new ConnectorMock();
212
		TerminalConnector c=new TerminalConnector(new SimpleFactory(mock),"xID","xName");
213
		ISettingsStore s=new SettingsMock();
214
		c.load(s);
215
		// the load is called after the connect...
216
		assertNull(mock.fLoadStore);
217
		c.connect(new TerminalControlMock());
218
		assertSame(s,mock.fLoadStore);
219
	}
220
221
	public void testSave() {
222
		ConnectorMock mock=new ConnectorMock();
223
		TerminalConnector c=new TerminalConnector(new SimpleFactory(mock),"xID","xName");
224
		ISettingsStore s=new SettingsMock();
225
		c.save(s);
226
		assertNull(mock.fSaveStore);
227
		c.connect(new TerminalControlMock());
228
		c.save(s);
229
		assertSame(s,mock.fSaveStore);		
230
	}
231
232
	public void testMakeSettingsPage() {
233
		ConnectorMock mock=new ConnectorMock();
234
		TerminalConnector c=new TerminalConnector(new SimpleFactory(mock),"xID","xName");
235
		assertNotNull(c.makeSettingsPage());
236
	}
237
238
	public void testSetTerminalSize() {
239
		ConnectorMock mock=new ConnectorMock();
240
		TerminalConnector c=new TerminalConnector(new SimpleFactory(mock),"xID","xName");
241
		c.setTerminalSize(100, 200);
242
		
243
	}
244
245
	public void testGetAdapter() {
246
		ConnectorMock mock=new ConnectorMock();
247
		TerminalConnector c=new TerminalConnector(new SimpleFactory(mock),"xID","xName");
248
		assertNull(c.getAdapter(ConnectorMock.class));
249
		// the load is called after the connect...
250
		c.connect(new TerminalControlMock());
251
252
		assertSame(mock, c.getAdapter(ConnectorMock.class));
253
	}
254
255
}
(-)src/test/Main.java (-23 / +2 lines)
Lines 1-7 Link Here
1
package test;
1
package test;
2
2
3
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
3
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
4
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnectorInfo;
5
import org.eclipse.tm.internal.terminal.provisional.api.TerminalConnectorExtension;
4
import org.eclipse.tm.internal.terminal.provisional.api.TerminalConnectorExtension;
6
5
7
public class Main {
6
public class Main {
Lines 10-39 Link Here
10
	 * @param args
9
	 * @param args
11
	 */
10
	 */
12
	public static void main(String[] args) {
11
	public static void main(String[] args) {
13
		// TODO Auto-generated method stub
14
		new ITerminalConnectorInfo(){
15
16
			public ITerminalConnector getConnector() {
17
				return null;
18
			}
19
20
			public String getId() {
21
				return "com.yourdomain.ssh";
22
			}
23
24
			public String getInitializationErrorMessage() {
25
				return null;
26
			}
27
			public String getName() {
28
				return "SSH";
29
			}
30
			public boolean isInitialized() {
31
				return true;
32
			}};
33
	}
12
	}
34
13
35
	ITerminalConnectorInfo getSsh() {
14
	ITerminalConnector getSsh() {
36
		ITerminalConnectorInfo[] c = TerminalConnectorExtension.getTerminalConnectors();
15
		ITerminalConnector[] c = TerminalConnectorExtension.makeTerminalConnectors();
37
		for (int i = 0; i < c.length; i++) {
16
		for (int i = 0; i < c.length; i++) {
38
			if("org.eclipse.tm.internal.terminal.ssh.SshConnector".equals(c[i]))
17
			if("org.eclipse.tm.internal.terminal.ssh.SshConnector".equals(c[i]))
39
				return c[i];
18
				return c[i];

Return to bug 200541