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

Collapse All | Expand All

(-)src/org/eclipse/rse/subsystems/terminals/core/TerminalServiceSubSystem.java (+26 lines)
Lines 6-16 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
15
import org.eclipse.rse.core.RSECorePlugin;
17
import org.eclipse.rse.core.RSECorePlugin;
16
import org.eclipse.rse.core.events.ISystemResourceChangeEvents;
18
import org.eclipse.rse.core.events.ISystemResourceChangeEvents;
Lines 86-91 Link Here
86
        Display.getDefault().asyncExec(new Refresh(this));
88
        Display.getDefault().asyncExec(new Refresh(this));
87
    }
89
    }
88
90
91
    public void removeChild(String terminalTitle) {
92
        if (children != null) {
93
            TerminalElement element = getChild(terminalTitle);
94
            if (element != null){
95
                children.remove(element);
96
                if (children == null) {
97
                    getConnectorService().removeCommunicationsListener(this);
98
                }
99
                Display.getDefault().asyncExec(new Refresh(this));
100
            }
101
        }
102
        
103
    }
104
    public TerminalElement getChild(String terminalTitle) {
105
        if (children != null) {
106
            Iterator iterator = children.iterator();
107
            while (iterator.hasNext()){
108
                TerminalElement element = (TerminalElement)iterator.next();
109
                if (element.getName().equals(terminalTitle))
110
                    return element;
111
            }
112
        }
113
        return null;
114
    }
89
    public Object[] getChildren() {
115
    public Object[] getChildren() {
90
        if (children != null)
116
        if (children != null)
91
            return children.toArray();
117
            return children.toArray();
(-)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/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
}

Return to bug 227572