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

Collapse All | Expand All

(-)src/org/eclipse/rse/internal/terminals/ui/views/TerminalViewer.java (-2 / +9 lines)
Lines 21-26 Link Here
21
 * Radoslav Gerganov(ProSyst)    - [181563] Fix hardcoded Ctrl+Space for remote shell content assist
21
 * Radoslav Gerganov(ProSyst)    - [181563] Fix hardcoded Ctrl+Space for remote shell content assist
22
 * Yu-Fen Kuo       (MontaVista) - Adapted from SystemCommandsViewPart
22
 * Yu-Fen Kuo       (MontaVista) - Adapted from SystemCommandsViewPart
23
 * Anna Dushistova  (MontaVista) - Adapted from SystemCommandsViewPart
23
 * Anna Dushistova  (MontaVista) - Adapted from SystemCommandsViewPart
24
 * Yu-Fen Kuo (MontaVista) - [227572] RSE Terminal doesn't reset the "connected" state when the shell exits
24
 ********************************************************************************/
25
 ********************************************************************************/
25
package org.eclipse.rse.internal.terminals.ui.views;
26
package org.eclipse.rse.internal.terminals.ui.views;
26
27
Lines 32-40 Link Here
32
import org.eclipse.jface.viewers.Viewer;
33
import org.eclipse.jface.viewers.Viewer;
33
import org.eclipse.rse.core.RSECorePlugin;
34
import org.eclipse.rse.core.RSECorePlugin;
34
import org.eclipse.rse.core.events.ISystemResourceChangeEvent;
35
import org.eclipse.rse.core.events.ISystemResourceChangeEvent;
36
import org.eclipse.rse.core.events.ISystemResourceChangeEvents;
35
import org.eclipse.rse.core.events.ISystemResourceChangeListener;
37
import org.eclipse.rse.core.events.ISystemResourceChangeListener;
36
import org.eclipse.rse.core.model.ISystemRegistry;
38
import org.eclipse.rse.core.model.ISystemRegistry;
37
import org.eclipse.rse.services.clientserver.messages.SystemMessage;
39
import org.eclipse.rse.services.clientserver.messages.SystemMessage;
40
import org.eclipse.rse.subsystems.terminals.core.elements.TerminalElement;
38
import org.eclipse.rse.ui.RSEUIPlugin;
41
import org.eclipse.rse.ui.RSEUIPlugin;
39
import org.eclipse.rse.ui.SystemWidgetHelpers;
42
import org.eclipse.rse.ui.SystemWidgetHelpers;
40
import org.eclipse.rse.ui.messages.ISystemMessageLine;
43
import org.eclipse.rse.ui.messages.ISystemMessageLine;
Lines 103-110 Link Here
103
    }
106
    }
104
107
105
    public void systemResourceChanged(ISystemResourceChangeEvent event) {
108
    public void systemResourceChanged(ISystemResourceChangeEvent event) {
106
        // TODO Auto-generated method stub
109
        if (event.getType() == ISystemResourceChangeEvents.EVENT_TERMINAL_SHELL_REMOVED) {
107
110
            Object source = event.getSource();
111
            if (source instanceof TerminalElement) {
112
                tabFolder.disposePageFor(((TerminalElement) source).getName());
113
            }
114
        }
108
    }
115
    }
109
116
110
    public Shell getShell() {
117
    public Shell getShell() {
(-)src/org/eclipse/rse/internal/terminals/ui/views/TerminalViewTab.java (-5 / +51 lines)
Lines 15-20 Link Here
15
 * David McKnight   (IBM)        - [165680] "Show in Remote Shell View" does not work
15
 * David McKnight   (IBM)        - [165680] "Show in Remote Shell View" does not work
16
 * Yu-Fen Kuo      (MontaVista)  - Adapted from CommandsViewWorkbook
16
 * Yu-Fen Kuo      (MontaVista)  - Adapted from CommandsViewWorkbook
17
 * Anna Dushistova (MontaVista)  - Adapted from CommandsViewWorkbook
17
 * Anna Dushistova (MontaVista)  - Adapted from CommandsViewWorkbook
18
 * Yu-Fen Kuo      (MontaVista)  - [227572] RSE Terminal doesn't reset the "connected" state when the shell exits
18
 ********************************************************************************/
19
 ********************************************************************************/
19
package org.eclipse.rse.internal.terminals.ui.views;
20
package org.eclipse.rse.internal.terminals.ui.views;
20
21
Lines 23-30 Link Here
23
import org.eclipse.jface.action.IMenuManager;
24
import org.eclipse.jface.action.IMenuManager;
24
import org.eclipse.jface.action.MenuManager;
25
import org.eclipse.jface.action.MenuManager;
25
import org.eclipse.jface.action.Separator;
26
import org.eclipse.jface.action.Separator;
27
import org.eclipse.rse.core.RSECorePlugin;
28
import org.eclipse.rse.core.events.ISystemResourceChangeEvents;
29
import org.eclipse.rse.core.events.SystemResourceChangeEvent;
26
import org.eclipse.rse.core.model.IHost;
30
import org.eclipse.rse.core.model.IHost;
31
import org.eclipse.rse.core.model.ISystemRegistry;
27
import org.eclipse.rse.internal.terminals.ui.TerminalServiceHelper;
32
import org.eclipse.rse.internal.terminals.ui.TerminalServiceHelper;
33
import org.eclipse.rse.subsystems.terminals.core.ITerminalServiceSubSystem;
34
import org.eclipse.rse.subsystems.terminals.core.TerminalServiceSubSystem;
35
import org.eclipse.rse.subsystems.terminals.core.elements.TerminalElement;
28
import org.eclipse.rse.ui.view.ISystemViewElementAdapter;
36
import org.eclipse.rse.ui.view.ISystemViewElementAdapter;
29
import org.eclipse.swt.SWT;
37
import org.eclipse.swt.SWT;
30
import org.eclipse.swt.custom.CTabFolder;
38
import org.eclipse.swt.custom.CTabFolder;
Lines 38-43 Link Here
38
import org.eclipse.swt.layout.GridData;
46
import org.eclipse.swt.layout.GridData;
39
import org.eclipse.swt.widgets.Composite;
47
import org.eclipse.swt.widgets.Composite;
40
import org.eclipse.swt.widgets.Control;
48
import org.eclipse.swt.widgets.Control;
49
import org.eclipse.swt.widgets.Display;
41
import org.eclipse.swt.widgets.Menu;
50
import org.eclipse.swt.widgets.Menu;
42
import org.eclipse.tm.internal.terminal.actions.TerminalAction;
51
import org.eclipse.tm.internal.terminal.actions.TerminalAction;
43
import org.eclipse.tm.internal.terminal.actions.TerminalActionClearAll;
52
import org.eclipse.tm.internal.terminal.actions.TerminalActionClearAll;
Lines 203-209 Link Here
203
                    ;
212
                    ;
204
            }
213
            }
205
            item.setData(DATA_KEY_CONTROL, terminalControl);
214
            item.setData(DATA_KEY_CONTROL, terminalControl);
206
207
        }
215
        }
208
        item.setControl(c);
216
        item.setControl(c);
209
        tabFolder.setSelection(item);
217
        tabFolder.setSelection(item);
Lines 361-372 Link Here
361
                .getAdapter(ISystemViewElementAdapter.class);
369
                .getAdapter(ISystemViewElementAdapter.class);
362
        if (va != null) {
370
        if (va != null) {
363
            updateWithUniqueTitle(va.getName(root), titem);
371
            updateWithUniqueTitle(va.getName(root), titem);
372
            setTabImage(root, titem);
373
        }
374
    }
375
    private void setTabImage(IAdaptable root, CTabItem titem) {
376
        ISystemViewElementAdapter va = (ISystemViewElementAdapter) root
377
                .getAdapter(ISystemViewElementAdapter.class);
378
        if (va != null) {
379
            if (root instanceof IHost){
380
                ITerminalServiceSubSystem terminalServiceSubSystem = TerminalServiceHelper.getTerminalSubSystem((IHost)root);
381
                TerminalElement element = terminalServiceSubSystem.getChild(titem.getText());
382
                if (element != null){
383
                    va =  (ISystemViewElementAdapter) element.getAdapter(ISystemViewElementAdapter.class);
384
                    titem.setImage(va.getImageDescriptor(element).createImage());
385
                    return;
386
                }
387
            }
388
            
364
            titem.setImage(va.getImageDescriptor(root).createImage());
389
            titem.setImage(va.getImageDescriptor(root).createImage());
365
        }
390
        }
366
    }
391
    }
392
    public void setState(final TerminalState state) {
393
        if (state == TerminalState.CLOSED || state == TerminalState.CONNECTED){
394
            Display.getDefault().asyncExec(new Runnable(){
395
                public void run() {
396
                    CTabItem item = tabFolder.getSelection();
397
                    if (item != null && !item.isDisposed()){
398
                        Object data = item.getData();
399
                        if (data instanceof IHost){
400
                            IHost host = (IHost)data;
401
                            final ITerminalServiceSubSystem terminalServiceSubSystem = TerminalServiceHelper.getTerminalSubSystem(host);         
402
403
                            if (state == TerminalState.CONNECTED)
404
                                TerminalServiceHelper.updateTerminalShellForTerminalElement(item);
405
                            
406
                            setTabImage(host, item);
407
                            ISystemRegistry registry = RSECorePlugin.getTheSystemRegistry();
408
                            registry.fireEvent(new SystemResourceChangeEvent(terminalServiceSubSystem,
409
                                    ISystemResourceChangeEvents.EVENT_REFRESH, terminalServiceSubSystem));
410
                        }
411
                    }
412
                }                   
413
            });
414
        }
367
415
368
    public void setState(TerminalState state) {
369
        // terminalControl.setState(state);
370
    }
416
    }
371
417
372
    public void setTerminalTitle(String title) {
418
    public void setTerminalTitle(String title) {
Lines 386-397 Link Here
386
432
387
    public void onTerminalConnect() {
433
    public void onTerminalConnect() {
388
        // TODO Auto-generated method stub
434
        // TODO Auto-generated method stub
389
435
        
390
    }
436
    }
391
437
392
    public void onTerminalDisconnect() {
438
    public void onTerminalDisconnect() {
393
        // TODO Auto-generated method stub
439
        // TODO Auto-generated method stub
394
440
        
395
    }
441
    }
396
442
397
    public void onTerminalFontChanged() {
443
    public void onTerminalFontChanged() {
(-)src/org/eclipse/rse/internal/terminals/ui/views/TerminalViewElementAdapter.java (-2 / +12 lines)
Lines 27-32 Link Here
27
 * Xuan Chen        (IBM)        - [223126] [api][breaking] Remove API related to User Actions in RSE Core/UI
27
 * Xuan Chen        (IBM)        - [223126] [api][breaking] Remove API related to User Actions in RSE Core/UI
28
 * Yu-Fen Kuo      (MontaVista)  - Adopted from SystemViewRemoteOutputAdapter
28
 * Yu-Fen Kuo      (MontaVista)  - Adopted from SystemViewRemoteOutputAdapter
29
 * Anna Dushistova (MontaVista)  - Adopted from SystemViewRemoteOutputAdapter
29
 * Anna Dushistova (MontaVista)  - Adopted from SystemViewRemoteOutputAdapter
30
 * Yu-Fen Kuo      (MontaVista)  - [227572] RSE Terminal doesn't reset the "connected" state when the shell exits
30
 *******************************************************************************/
31
 *******************************************************************************/
31
package org.eclipse.rse.internal.terminals.ui.views;
32
package org.eclipse.rse.internal.terminals.ui.views;
32
33
Lines 37-42 Link Here
37
import org.eclipse.core.runtime.IProgressMonitor;
38
import org.eclipse.core.runtime.IProgressMonitor;
38
import org.eclipse.jface.resource.ImageDescriptor;
39
import org.eclipse.jface.resource.ImageDescriptor;
39
import org.eclipse.jface.viewers.IStructuredSelection;
40
import org.eclipse.jface.viewers.IStructuredSelection;
41
import org.eclipse.rse.internal.services.terminals.ITerminalShell;
40
import org.eclipse.rse.internal.terminals.ui.Activator;
42
import org.eclipse.rse.internal.terminals.ui.Activator;
41
import org.eclipse.rse.internal.terminals.ui.actions.RemoveTerminalAction;
43
import org.eclipse.rse.internal.terminals.ui.actions.RemoveTerminalAction;
42
import org.eclipse.rse.internal.terminals.ui.actions.ShowInTerminalViewAction;
44
import org.eclipse.rse.internal.terminals.ui.actions.ShowInTerminalViewAction;
Lines 101-109 Link Here
101
    }
103
    }
102
104
103
    public ImageDescriptor getImageDescriptor(Object element) {
105
    public ImageDescriptor getImageDescriptor(Object element) {
104
        // TODO different image for different state?
106
        if (element instanceof TerminalElement){
107
            TerminalElement terminalElement = (TerminalElement)element;
108
            ITerminalShell terminalShell = terminalElement.getTerminalShell();
109
            if (terminalShell != null){
110
                if (terminalShell.isActive())
111
                    return Activator.getDefault().getImageDescriptor(
112
                            Activator.ICON_ID_TERMINAL_SUBSYSTEM_LIVE);
113
            }
114
        }
105
        return Activator.getDefault().getImageDescriptor(
115
        return Activator.getDefault().getImageDescriptor(
106
                Activator.ICON_ID_TERMINAL_SUBSYSTEM_LIVE);
116
                Activator.ICON_ID_TERMINAL_SUBSYSTEM);
107
    }
117
    }
108
118
109
    public Object getParent(Object element) {
119
    public Object getParent(Object element) {
(-)src/org/eclipse/rse/internal/terminals/ui/views/RSETerminalConnectorImpl.java (+5 lines)
Lines 6-11 Link Here
6
 *
6
 *
7
 * Contributors:
7
 * Contributors:
8
 * Anna Dushistova (MontaVista) - initial API and implementation
8
 * Anna Dushistova (MontaVista) - initial API and implementation
9
 * Yu-Fen Kuo (MontaVista)      - [227572] RSE Terminal doesn't reset the "connected" state when the shell exits
9
 ********************************************************************************/
10
 ********************************************************************************/
10
package org.eclipse.rse.internal.terminals.ui.views;
11
package org.eclipse.rse.internal.terminals.ui.views;
11
12
Lines 86-89 Link Here
86
        this.shell = shell;
87
        this.shell = shell;
87
    }
88
    }
88
89
90
    public ITerminalShell getTerminalHostShell() {
91
        return shell;
92
    }
93
89
}
94
}
(-)src/org/eclipse/rse/internal/terminals/ui/TerminalServiceHelper.java (-3 / +36 lines)
Lines 6-11 Link Here
6
 *
6
 *
7
 * Contributors:
7
 * Contributors:
8
 * Yu-Fen Kuo (MontaVista) - initial API and implementation
8
 * Yu-Fen Kuo (MontaVista) - initial API and implementation
9
 * Yu-Fen Kuo (MontaVista) - [227572] RSE Terminal doesn't reset the "connected" state when the shell exits
9
 ********************************************************************************/
10
 ********************************************************************************/
10
11
11
package org.eclipse.rse.internal.terminals.ui;
12
package org.eclipse.rse.internal.terminals.ui;
Lines 17-26 Link Here
17
import org.eclipse.rse.core.model.IHost;
18
import org.eclipse.rse.core.model.IHost;
18
import org.eclipse.rse.core.model.ISystemRegistry;
19
import org.eclipse.rse.core.model.ISystemRegistry;
19
import org.eclipse.rse.core.subsystems.ISubSystem;
20
import org.eclipse.rse.core.subsystems.ISubSystem;
21
import org.eclipse.rse.internal.services.terminals.ITerminalShell;
22
import org.eclipse.rse.internal.terminals.ui.views.RSETerminalConnector;
23
import org.eclipse.rse.internal.terminals.ui.views.TerminalViewTab;
20
import org.eclipse.rse.subsystems.files.core.subsystems.IRemoteFile;
24
import org.eclipse.rse.subsystems.files.core.subsystems.IRemoteFile;
21
import org.eclipse.rse.subsystems.terminals.core.ITerminalServiceSubSystem;
25
import org.eclipse.rse.subsystems.terminals.core.ITerminalServiceSubSystem;
22
import org.eclipse.rse.subsystems.terminals.core.elements.TerminalElement;
26
import org.eclipse.rse.subsystems.terminals.core.elements.TerminalElement;
23
import org.eclipse.swt.custom.CTabItem;
27
import org.eclipse.swt.custom.CTabItem;
28
import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
29
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
24
30
25
public class TerminalServiceHelper {
31
public class TerminalServiceHelper {
26
32
Lines 49-55 Link Here
49
        ISystemRegistry systemRegistry = RSECorePlugin.getTheSystemRegistry();
55
        ISystemRegistry systemRegistry = RSECorePlugin.getTheSystemRegistry();
50
        ISubSystem[] subsystems = systemRegistry.getSubSystems(connection);
56
        ISubSystem[] subsystems = systemRegistry.getSubSystems(connection);
51
        for (int i = 0; i < subsystems.length; i++) {
57
        for (int i = 0; i < subsystems.length; i++) {
52
            if ("ssh.terminals".equals(subsystems[i].getSubSystemConfiguration().getId())) {
58
            if ("ssh.terminals".equals(subsystems[i]
59
                    .getSubSystemConfiguration().getId())) {
53
                ITerminalServiceSubSystem subSystem = (ITerminalServiceSubSystem) subsystems[i];
60
                ITerminalServiceSubSystem subSystem = (ITerminalServiceSubSystem) subsystems[i];
54
                return subSystem;
61
                return subSystem;
55
            }
62
            }
Lines 82-91 Link Here
82
    public static void removeTerminalElementFromHost(CTabItem item, IHost host) {
89
    public static void removeTerminalElementFromHost(CTabItem item, IHost host) {
83
        ITerminalServiceSubSystem terminalServiceSubSystem = getTerminalSubSystem(host);
90
        ITerminalServiceSubSystem terminalServiceSubSystem = getTerminalSubSystem(host);
84
        if (terminalServiceSubSystem != null) {
91
        if (terminalServiceSubSystem != null) {
85
            TerminalElement element = new TerminalElement(item.getText(),
92
            TerminalElement element = terminalServiceSubSystem.getChild(item.getText());
86
                    terminalServiceSubSystem);
87
            terminalServiceSubSystem.removeChild(element);
93
            terminalServiceSubSystem.removeChild(element);
88
        }
94
        }
89
95
90
    }
96
    }
97
98
    public static void updateTerminalShellForTerminalElement(CTabItem item) {
99
        Object data = item.getData();
100
        if (data instanceof IHost){
101
            IHost host = (IHost) data;
102
            ITerminalServiceSubSystem terminalServiceSubSystem = TerminalServiceHelper.getTerminalSubSystem(host);
103
            TerminalElement element = terminalServiceSubSystem.getChild(item.getText());
104
            if (element != null){
105
                ITerminalShell terminalShell = getTerminalShellFromTab(item);
106
                if (element.getTerminalShell() != terminalShell){
107
                    element.setTerminalShell(terminalShell);
108
                }
109
            }
110
        }
111
    }
112
    private static ITerminalShell getTerminalShellFromTab(CTabItem item) {
113
        ITerminalShell terminalShell = null;
114
        ITerminalViewControl terminalViewControl = (ITerminalViewControl) item
115
                .getData(TerminalViewTab.DATA_KEY_CONTROL);
116
        ITerminalConnector terminalConnector = terminalViewControl
117
                .getTerminalConnector();
118
        if (terminalConnector instanceof RSETerminalConnector) {
119
            RSETerminalConnector rseTerminalConnector = (RSETerminalConnector) terminalConnector;
120
            terminalShell = rseTerminalConnector.getTerminalHostShell();
121
        }
122
        return terminalShell;
123
    }
91
}
124
}
(-)src/org/eclipse/rse/subsystems/terminals/core/TerminalServiceSubSystem.java (-11 / +65 lines)
Lines 6-17 Link Here
6
 *
6
 *
7
 * Contributors:
7
 * Contributors:
8
 * Yu-Fen Kuo (MontaVista) - initial API and implementation
8
 * Yu-Fen Kuo (MontaVista) - initial API and implementation
9
 * Yu-Fen Kuo (MontaVista) - [227572] RSE Terminal doesn't reset the "connected" state when the shell exits
9
 ********************************************************************************/
10
 ********************************************************************************/
10
11
11
package org.eclipse.rse.subsystems.terminals.core;
12
package org.eclipse.rse.subsystems.terminals.core;
12
13
13
import java.util.ArrayList;
14
import java.util.ArrayList;
15
import java.util.Iterator;
14
16
17
import org.eclipse.core.runtime.IProgressMonitor;
15
import org.eclipse.rse.core.RSECorePlugin;
18
import org.eclipse.rse.core.RSECorePlugin;
16
import org.eclipse.rse.core.events.ISystemResourceChangeEvents;
19
import org.eclipse.rse.core.events.ISystemResourceChangeEvents;
17
import org.eclipse.rse.core.events.SystemResourceChangeEvent;
20
import org.eclipse.rse.core.events.SystemResourceChangeEvent;
Lines 86-91 Link Here
86
        Display.getDefault().asyncExec(new Refresh(this));
89
        Display.getDefault().asyncExec(new Refresh(this));
87
    }
90
    }
88
91
92
    public void removeChild(String terminalTitle) {
93
        if (children != null) {
94
            TerminalElement element = getChild(terminalTitle);
95
            if (element != null){
96
                children.remove(element);
97
                if (children == null) {
98
                    getConnectorService().removeCommunicationsListener(this);
99
                }
100
                Display.getDefault().asyncExec(new Refresh(this));
101
            }
102
        }
103
        
104
    }
105
    public TerminalElement getChild(String terminalTitle) {
106
        if (children != null) {
107
            Iterator iterator = children.iterator();
108
            while (iterator.hasNext()){
109
                TerminalElement element = (TerminalElement)iterator.next();
110
                if (element.getName().equals(terminalTitle))
111
                    return element;
112
            }
113
        }
114
        return null;
115
    }
89
    public Object[] getChildren() {
116
    public Object[] getChildren() {
90
        if (children != null)
117
        if (children != null)
91
            return children.toArray();
118
            return children.toArray();
Lines 107-127 Link Here
107
        case CommunicationsEvent.AFTER_DISCONNECT:
134
        case CommunicationsEvent.AFTER_DISCONNECT:
108
            // no longer listen
135
            // no longer listen
109
            getConnectorService().removeCommunicationsListener(this);
136
            getConnectorService().removeCommunicationsListener(this);
110
            // if (_cmdShells != null) _cmdShells.clear();
111
            // if (_envVars != null) _envVars.clear();
112
            // _defaultShell = null;
113
114
            break;
137
            break;
115
138
116
        case CommunicationsEvent.BEFORE_DISCONNECT:
139
        case CommunicationsEvent.BEFORE_DISCONNECT:
117
        case CommunicationsEvent.CONNECTION_ERROR:
140
        case CommunicationsEvent.CONNECTION_ERROR:
118
            // remove all shells
141
            Display.getDefault().asyncExec(new Runnable(){
119
            // saveShellState(_cmdShells);
142
                public void run() {
120
            // if (getShells().length > 0)
143
                    cancelAllTerminals();
121
            // {
144
                }
122
            // Display.getDefault().asyncExec(new CancelAllShells());
145
            });
123
            // // cancelAllShells();
124
            // }
125
            break;
146
            break;
126
        default:
147
        default:
127
            break;
148
            break;
Lines 132-136 Link Here
132
    public boolean isPassiveCommunicationsListener() {
153
    public boolean isPassiveCommunicationsListener() {
133
        return true;
154
        return true;
134
    }
155
    }
156
    public void cancelAllTerminals() {
157
        if (children == null || children.size() == 0)
158
            return;
159
160
        for (int i = children.size() - 1; i >= 0; i--) {
161
            TerminalElement element = (TerminalElement) children.get(i);
162
163
            try {
164
                removeTerminalElement(element);
165
            } catch (Exception e) {
166
                e.printStackTrace();
167
            }
135
168
169
        }
170
171
        children.clear();
172
        Display.getDefault().asyncExec(new Refresh(this));
173
174
    }
175
176
    private void removeTerminalElement(TerminalElement element) {
177
        element.getTerminalShell().exit();
178
        ISystemRegistry registry = RSECorePlugin.getTheSystemRegistry();
179
        registry.fireEvent(new SystemResourceChangeEvent(element, ISystemResourceChangeEvents.EVENT_TERMINAL_SHELL_REMOVED, null));
180
    }
181
    public void initializeSubSystem(IProgressMonitor monitor) {
182
        super.initializeSubSystem(monitor);
183
        getConnectorService().addCommunicationsListener(this);
184
    }
185
186
    public void uninitializeSubSystem(IProgressMonitor monitor) {
187
        getConnectorService().removeCommunicationsListener(this);
188
        super.uninitializeSubSystem(monitor);
189
    }
136
}
190
}
(-)src/org/eclipse/rse/subsystems/terminals/core/ITerminalServiceSubSystem.java (+5 lines)
Lines 6-11 Link Here
6
 *
6
 *
7
 * Contributors:
7
 * Contributors:
8
 * Yu-Fen Kuo (MontaVista) - initial API and implementation
8
 * Yu-Fen Kuo (MontaVista) - initial API and implementation
9
 * Yu-Fen Kuo (MontaVista) - [227572] RSE Terminal doesn't reset the "connected" state when the shell exits
9
 ********************************************************************************/
10
 ********************************************************************************/
10
package org.eclipse.rse.subsystems.terminals.core;
11
package org.eclipse.rse.subsystems.terminals.core;
11
12
Lines 16-19 Link Here
16
	public void addChild(TerminalElement element);
17
	public void addChild(TerminalElement element);
17
18
18
	public void removeChild(TerminalElement element);
19
	public void removeChild(TerminalElement element);
20
	
21
	public void removeChild(String terminalTitle);
22
	
23
	public TerminalElement getChild(String terminalTitle);
19
}
24
}
(-)src/org/eclipse/rse/subsystems/terminals/core/elements/TerminalElement.java (-6 / +24 lines)
Lines 7-30 Link Here
7
 * Contributors:
7
 * Contributors:
8
 * Yu-Fen Kuo (MontaVista)      - initial API and implementation
8
 * Yu-Fen Kuo (MontaVista)      - initial API and implementation
9
 * Anna Dushistova (MontaVista) - initial API and implementation
9
 * Anna Dushistova (MontaVista) - initial API and implementation
10
 * Yu-Fen Kuo (MontaVista)      - [227572] RSE Terminal doesn't reset the "connected" state when the shell exits
10
 ********************************************************************************/
11
 ********************************************************************************/
11
package org.eclipse.rse.subsystems.terminals.core.elements;
12
package org.eclipse.rse.subsystems.terminals.core.elements;
12
13
13
import org.eclipse.rse.core.subsystems.AbstractResource;
14
import org.eclipse.rse.core.subsystems.AbstractResource;
15
import org.eclipse.rse.internal.services.terminals.ITerminalShell;
14
import org.eclipse.rse.subsystems.terminals.core.ITerminalServiceSubSystem;
16
import org.eclipse.rse.subsystems.terminals.core.ITerminalServiceSubSystem;
15
17
16
public class TerminalElement extends AbstractResource {
18
public class TerminalElement extends AbstractResource {
17
    private String name;
19
    private String name;
18
20
    private ITerminalShell terminalShell;
19
    public String getName() {
20
        return name;
21
    }
22
21
23
    public TerminalElement(String name,
22
    public TerminalElement(String name,
24
            ITerminalServiceSubSystem terminalServiceSubSystem) {
23
            ITerminalServiceSubSystem terminalServiceSubSystem) {
25
        super(terminalServiceSubSystem);
24
        super(terminalServiceSubSystem);
26
        this.name = name;
25
        this.name = name;
27
    }
26
    }
27
    
28
    public String getName() {
29
        return name;
30
    }
31
28
32
29
    public String toString() {
33
    public String toString() {
30
        return getName();
34
        return getName();
Lines 32-44 Link Here
32
36
33
    public boolean equals(Object obj) {
37
    public boolean equals(Object obj) {
34
        if (obj instanceof TerminalElement) {
38
        if (obj instanceof TerminalElement) {
35
            return name.equals(((TerminalElement) obj).getName());
39
            if (obj == this)
40
                return true;
41
            return name.equals(((TerminalElement) obj).getName())
42
                    && terminalShell == ((TerminalElement) obj)
43
                            .getTerminalShell();
36
        }
44
        }
37
        return super.equals(obj);
45
        return super.equals(obj);
38
    }
46
    }
39
47
40
    public int hashCode() {
48
    public int hashCode() {
41
        return name.hashCode();
49
        if (terminalShell != null)
50
            return terminalShell.hashCode() + name.hashCode();
51
        return name.hashCode() ;
52
    }
53
54
    public ITerminalShell getTerminalShell() {
55
        return terminalShell;
56
    }
57
58
    public void setTerminalShell(ITerminalShell terminalShell) {
59
        this.terminalShell = terminalShell;
42
    }
60
    }
43
61
44
}
62
}
(-)src/org/eclipse/rse/core/events/ISystemResourceChangeEvents.java (+6 lines)
Lines 13-18 Link Here
13
 * Contributors:
13
 * Contributors:
14
 * Martin Oberhuber (Wind River) - [168975] Move RSE Events API to Core
14
 * Martin Oberhuber (Wind River) - [168975] Move RSE Events API to Core
15
 * Martin Oberhuber (Wind River) - [cleanup] Add API "since" Javadoc tags
15
 * Martin Oberhuber (Wind River) - [cleanup] Add API "since" Javadoc tags
16
 * Yu-Fen Kuo (MontaVista)       - [227572] RSE Terminal doesn't reset the "connected" state when the shell exits
16
 ********************************************************************************/
17
 ********************************************************************************/
17
18
18
package org.eclipse.rse.core.events;
19
package org.eclipse.rse.core.events;
Lines 348-353 Link Here
348
	public static final int EVENT_SEARCH_FINISHED = 150;
349
	public static final int EVENT_SEARCH_FINISHED = 150;
349
350
350
	/**
351
	/**
352
         * The event is to indicate that a terminal has been removed
353
         * A source RSE object is the expected parameter
354
         */
355
        public static final int EVENT_TERMINAL_SHELL_REMOVED = 160;
356
	/**
351
	 * Predefined event object for a property sheet update.
357
	 * Predefined event object for a property sheet update.
352
	 */
358
	 */
353
	public static final ISystemResourceChangeEvent PROPERTYSHEET_UPDATE_EVENT =
359
	public static final ISystemResourceChangeEvent PROPERTYSHEET_UPDATE_EVENT =

Return to bug 227572