1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-04 14:55:41 +02:00

[227535] [rseterminal][api] terminals.ui should not depend on files.core (apply patch from Anna Dushistova)

This commit is contained in:
Martin Oberhuber 2008-05-20 21:32:40 +00:00
parent 44fbb32594
commit a6537200bb
13 changed files with 176 additions and 423 deletions

View file

@ -6,9 +6,10 @@ Bundle-Version: 3.0.0.qualifier
Bundle-Activator: org.eclipse.rse.internal.subsystems.files.core.Activator
Bundle-Localization: plugin
Require-Bundle: org.eclipse.ui,
org.eclipse.core.expressions;bundle-version="3.4.0",
org.eclipse.core.runtime,
org.eclipse.rse.services;bundle-version="[3.0.0,4.0.0)",
org.eclipse.core.resources,
org.eclipse.rse.services;bundle-version="[3.0.0,4.0.0)",
org.eclipse.rse.core;bundle-version="[3.0.0,4.0.0)",
org.eclipse.rse.ui;bundle-version="[3.0.0,4.0.0)"
Bundle-ActivationPolicy: lazy

View file

@ -59,4 +59,16 @@
</factory>
</extension>
<!-- ================================================================= -->
<!-- Property Testers -->
<!-- ================================================================= -->
<extension point="org.eclipse.core.expressions.propertyTesters">
<propertyTester
class="org.eclipse.rse.internal.subsystems.files.core.RemoteFilePropertyTester"
id="org.eclipse.rse.subsystems.files.core.RemoteFilePropertyTester"
namespace="org.eclipse.rse.subsystems.files"
properties="isdirectory"
type="org.eclipse.rse.subsystems.files.core.subsystems.IRemoteFile">
</propertyTester>
</extension>
</plugin>

View file

@ -0,0 +1,27 @@
/********************************************************************************
* Copyright (c) 2008 MontaVista Software, Inc.
* This program and the accompanying materials are made available under the terms
* of the Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Anna Dushistova (MontaVista) - initial API and implementation
********************************************************************************/
package org.eclipse.rse.internal.subsystems.files.core;
import org.eclipse.core.expressions.PropertyTester;
import org.eclipse.rse.subsystems.files.core.subsystems.IRemoteFile;
public class RemoteFilePropertyTester extends PropertyTester {
public boolean test(Object receiver, String property, Object[] args,
Object expectedValue) {
boolean test = ((Boolean) expectedValue).booleanValue();
if (receiver != null && receiver instanceof IRemoteFile) {
return ((IRemoteFile) receiver).isDirectory() && test;
}
return !test;
}
}

View file

@ -4,11 +4,11 @@ Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.rse.terminals.ui;singleton:=true
Bundle-Version: 0.1.0.qualifier
Bundle-Activator: org.eclipse.rse.internal.terminals.ui.Activator
Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime,
org.eclipse.rse.services;bundle-version="[3.0.0,4.0.0)",
Require-Bundle: org.eclipse.core.runtime,
org.eclipse.core.expressions;bundle-version="[3.0.0,4.0.0)",
org.eclipse.ui,
org.eclipse.ui.views,
org.eclipse.rse.subsystems.files.core;bundle-version="[3.0.0,4.0.0)",
org.eclipse.rse.services;bundle-version="[3.0.0,4.0.0)",
org.eclipse.rse.core;bundle-version="[3.0.0,4.0.0)",
org.eclipse.rse.ui;bundle-version="[3.0.0,4.0.0)",
org.eclipse.rse.subsystems.terminals.core;bundle-version="[0.1.0,0.2.0)",

View file

@ -18,4 +18,7 @@ providerName = Eclipse.org
terminalsView.name = Terminals
Launch_Terminal_Label =Launch Terminal
Launch_Terminal_Tooltip=Launch a terminal from the selected directory
terminalsCategory.name = Terminal Commands

View file

@ -47,25 +47,57 @@ Anna Dushistova (MontaVista) - [227535] [rseterminal][api] terminals.ui should
id="org.eclipse.rse.terminals.ui.view.TerminalView">
</view>
</extension>
<extension
point="org.eclipse.ui.popupMenus">
<objectContribution
objectClass="org.eclipse.rse.subsystems.files.core.subsystems.IRemoteFile"
id="org.eclipse.rse.terminals.ui.launch">
<visibility>
<and>
<objectState name="isdirectory" value="true"/>
<objectState name="isTerminalSubSystemExists" value="true"/>
</and>
</visibility>
<action
label="Launch Terminal"
icon="icons/terminal_view.gif"
tooltip="%Launch_Terminal_Tooltip"
class="org.eclipse.rse.internal.terminals.ui.actions.LaunchTerminalActionDelegate"
enablesFor="1"
id="org.eclipse.rse.terminalss.ui.actions.LaunchTerminalActionDelegate">
</action>
</objectContribution>
</extension>
<extension
point="org.eclipse.ui.menus">
<menuContribution
locationURI="popup:org.eclipse.rse.ui.view.systemView?after=additions">
<command
commandId="org.eclipse.rse.terminals.ui.actions.LaunchTerminalCommand"
icon="icons/terminal_view.gif"
label="%Launch_Terminal_Label"
tooltip="%Launch_Terminal_Tooltip">
<visibleWhen>
<iterate>
<or>
<and>
<test
args="terminals"
property="org.eclipse.rse.core.hasSubSystemCategory"
value="true">
</test>
<instanceof
value="org.eclipse.rse.subsystems.files.core.subsystems.IRemoteFile">
</instanceof>
<test
property="org.eclipse.rse.subsystems.files.isdirectory"
value="true">
</test>
</and>
<instanceof
value="org.eclipse.rse.subsystems.terminals.core.ITerminalServiceSubSystem">
</instanceof>
</or>
</iterate>
</visibleWhen>
</command>
</menuContribution>
</extension>
<extension point="org.eclipse.ui.commands">
<category
id="org.eclipse.rse.terminals.ui.commands.category"
name="%terminalsCategory.name">
</category>
<command
categoryId="org.eclipse.rse.terminals.ui.commands.category"
id="org.eclipse.rse.terminals.ui.actions.LaunchTerminalCommand"
name="%Launch_Terminal_Label">
</command>
</extension>
<extension
point="org.eclipse.ui.handlers">
<handler
class="org.eclipse.rse.internal.terminals.ui.handlers.LaunchTerminalCommandHandler"
commandId="org.eclipse.rse.terminals.ui.actions.LaunchTerminalCommand">
</handler>
</extension>
</plugin>

View file

@ -7,6 +7,7 @@
* Contributors:
* Yu-Fen Kuo (MontaVista) - initial API and implementation
* Yu-Fen Kuo (MontaVista) - [227572] RSE Terminal doesn't reset the "connected" state when the shell exits
* Anna Dushistova (MontaVista) - [227535] [rseterminal][api] terminals.ui should not depend on files.core
********************************************************************************/
package org.eclipse.rse.internal.terminals.ui;
@ -21,7 +22,6 @@ import org.eclipse.rse.core.subsystems.ISubSystem;
import org.eclipse.rse.internal.services.terminals.ITerminalShell;
import org.eclipse.rse.internal.terminals.ui.views.RSETerminalConnector;
import org.eclipse.rse.internal.terminals.ui.views.TerminalViewTab;
import org.eclipse.rse.subsystems.files.core.subsystems.IRemoteFile;
import org.eclipse.rse.subsystems.terminals.core.ITerminalServiceSubSystem;
import org.eclipse.rse.subsystems.terminals.core.elements.TerminalElement;
import org.eclipse.swt.custom.CTabItem;
@ -37,19 +37,6 @@ public class TerminalServiceHelper {
super();
}
/**
* Helper method to return the path to change-directory to, given a selected
* remote file object
*/
public static String getWorkingDirectory(IRemoteFile selectedFile) {
String path = null;
if (selectedFile.isDirectory())
path = selectedFile.getAbsolutePath();
else
path = selectedFile.getParentPath();
return path;
}
public static ITerminalServiceSubSystem getTerminalSubSystem(
IHost connection) {
ISystemRegistry systemRegistry = RSECorePlugin.getTheSystemRegistry();

View file

@ -1,273 +0,0 @@
/********************************************************************************
* Copyright (c) 2002, 2008 IBM Corporation and others. All rights reserved.
* This program and the accompanying materials are made available under the terms
* of the Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html
*
* Initial Contributors:
* The following IBM employees contributed to the Remote System Explorer
* component that contains this file: David McKnight, Kushal Munir,
* Michael Berger, David Dykstal, Phil Coulthard, Don Yantzi, Eric Simpson,
* Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley.
*
* Contributors:
* Martin Oberhuber (Wind River) - Fix 154874 - handle files with space or $ in the name
* Martin Oberhuber (Wind River) - [186128] Move IProgressMonitor last in all API
* Martin Oberhuber (Wind River) - [174945] Remove obsolete icons from rse.shells.ui
* Martin Oberhuber (Wind River) - [186640] Add IRSESystemType.testProperty()
* Martin Oberhuber (Wind River) - [187218] Fix error reporting for connect()
* Kevin Doyle (IBM) - [187083] Launch Shell action available on folders inside virtual files
* David McKnight (IBM) - [216252] [api][nls] Resource Strings specific to subsystems should be moved from rse.ui into files.ui / shells.ui / processes.ui where possible
* David McKnight (IBM) - [220547] [api][breaking] SimpleSystemMessage needs to specify a message id and some messages should be shared
* Yu-Fen Kuo (MontaVista) - Adapted from SystemCommandAction
* Martin Oberhuber (Wind River) - [149285] [ssh] multiple prompts and errors in case of incorrect username
********************************************************************************/
package org.eclipse.rse.internal.terminals.ui.actions;
import java.util.Iterator;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.rse.core.filters.ISystemFilterReference;
import org.eclipse.rse.core.model.IHost;
import org.eclipse.rse.core.subsystems.ISubSystem;
import org.eclipse.rse.internal.terminals.ui.Activator;
import org.eclipse.rse.internal.terminals.ui.TerminalServiceHelper;
import org.eclipse.rse.internal.terminals.ui.views.TerminalViewer;
import org.eclipse.rse.internal.terminals.ui.views.TerminalsUI;
import org.eclipse.rse.services.clientserver.PathUtility;
import org.eclipse.rse.services.clientserver.archiveutils.ArchiveHandlerManager;
import org.eclipse.rse.services.clientserver.messages.SystemMessageException;
import org.eclipse.rse.subsystems.files.core.subsystems.IRemoteFile;
import org.eclipse.rse.subsystems.files.core.subsystems.IRemoteFileSubSystem;
import org.eclipse.rse.subsystems.terminals.core.ITerminalServiceSubSystem;
import org.eclipse.rse.subsystems.terminals.core.elements.TerminalElement;
import org.eclipse.rse.ui.SystemBasePlugin;
import org.eclipse.rse.ui.actions.SystemBaseAction;
import org.eclipse.rse.ui.view.ISystemViewElementAdapter;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.widgets.Shell;
/**
* action to launch a terminal from either the terminal subsystem or selected
* directory
*
*/
public class LaunchTerminalAction extends SystemBaseAction {
private ITerminalServiceSubSystem subSystem;
private IRemoteFile selected;
private ISystemFilterReference selectedFilterRef;
public LaunchTerminalAction(String text, ImageDescriptor image, Shell shell) {
super(text, image, shell);
}
/**
* Constructor for LaunchTerminalAction
*
* @param parent
* @param subSystem
* the terminal subsystem to use if launching a terminal
*/
public LaunchTerminalAction(Shell parent,
ITerminalServiceSubSystem subSystem) {
this(Activator.getResourceString("LaunchTerminalAction.title"), //$NON-NLS-1$
Activator.getResourceString("LaunchTerminalAction.tooltip"), //$NON-NLS-1$
parent, subSystem);
}
/**
* Constructor for LaunchTerminalAction
*
* @param title
* title of the action
* @param tooltip
* tooltip of the action
* @param parent
* @param subSystem
* the terminal subsystem to use if launching a terminal
*/
public LaunchTerminalAction(String title, String tooltip, Shell parent,
ITerminalServiceSubSystem subSystem) {
this(title, tooltip, Activator.getDefault().getImageDescriptor(
Activator.ICON_ID_LAUNCH_TERMINAL), parent,
subSystem);
}
/**
* Constructor for LaunchTerminalAction
*
* @param title
* title of the action
* @param tooltip
* tooltip of the action
* @param descriptor
* image descriptor to be displayed for this action
* @param parent
* @param subSystem
* the terminal subsystem to use if launching a terminal
*/
public LaunchTerminalAction(String title, String tooltip,
ImageDescriptor descriptor, Shell parent,
ITerminalServiceSubSystem subSystem) {
super(title, tooltip, descriptor, parent);
this.subSystem = subSystem;
}
/**
* @return the terminal subsystem
*/
public ITerminalServiceSubSystem getSubSystem() {
return subSystem;
}
/**
* settor for the terminal subsystem
*
* @param subSystem
* terminal subsystem
*/
public void setSubSystem(ITerminalServiceSubSystem subSystem) {
this.subSystem = subSystem;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.rse.ui.actions.SystemBaseAction#updateSelection(org.eclipse.jface.viewers.IStructuredSelection)
*/
public boolean updateSelection(IStructuredSelection selection) {
boolean enable = false;
Iterator e = selection.iterator();
Object selectedObject = e.next();
if (selectedObject != null) {
if (selectedObject instanceof ISystemFilterReference) {
selectedFilterRef = (ISystemFilterReference) selectedObject;
selected = null;
enable = true;
}
if (selectedObject instanceof IRemoteFile) {
selected = (IRemoteFile) selectedObject;
selectedFilterRef = null;
IHost host = selected.getParentRemoteFileSubSystem().getHost();
subSystem = TerminalServiceHelper.getTerminalSubSystem(host);
// If the selected object is a virtual folder then we need to
// select the parent
// of the archive
if (ArchiveHandlerManager.isVirtual(selected.getAbsolutePath())) {
IRemoteFileSubSystem rfss = selected
.getParentRemoteFileSubSystem();
String file = selected.getAbsolutePath();
// Get the archive's path
file = file.substring(0, file
.indexOf(ArchiveHandlerManager.VIRTUAL_SEPARATOR));
// Get the parent of the archive's path
file = file.substring(0, file.lastIndexOf(selected
.getSeparator()));
try {
selected = rfss.getRemoteFileObject(file, null);
} catch (SystemMessageException exc) {
}
}
if (!selected.isFile()) {
enable = checkObjectType(selected);
}
} else if (selectedObject instanceof ITerminalServiceSubSystem) {
subSystem = (ITerminalServiceSubSystem) selectedObject;
enable = true;
}
}
return enable;
}
private ITerminalServiceSubSystem getTerminalSubSystem() {
IHost currentHost = null;
if (selectedFilterRef != null) {
ISystemViewElementAdapter adapter = (ISystemViewElementAdapter) ((IAdaptable) selectedFilterRef)
.getAdapter(ISystemViewElementAdapter.class);
if (adapter != null) {
ISubSystem ss = adapter.getSubSystem(selectedFilterRef);
if (ss != null) {
currentHost = ss.getHost();
}
}
} else if (selected != null) {
currentHost = selected.getSystemConnection();
}
if (currentHost != null) {
return TerminalServiceHelper.getTerminalSubSystem(currentHost);
}
return getSubSystem();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.rse.ui.actions.SystemBaseAction#run()
*/
public void run() {
if (selectedFilterRef != null) {
ISystemViewElementAdapter adapter = (ISystemViewElementAdapter) ((IAdaptable) selectedFilterRef)
.getAdapter(ISystemViewElementAdapter.class);
if (adapter != null) {
ISubSystem ss = adapter.getSubSystem(selectedFilterRef);
if (ss != null) {
Object target = ss.getTargetForFilter(selectedFilterRef);
if (target != null && target instanceof IRemoteFile) {
selected = (IRemoteFile) target;
}
}
}
}
ITerminalServiceSubSystem terminalSubSystem = getTerminalSubSystem();
if (terminalSubSystem != null) {
TerminalsUI terminalsUI = TerminalsUI.getInstance();
TerminalViewer viewer = terminalsUI.activateTerminalsView();
if (!terminalSubSystem.isConnected()) {
try {
terminalSubSystem.connect(new NullProgressMonitor(), false);
} catch (OperationCanceledException e) {
// user canceled, return silently
return;
} catch (Exception e) {
SystemBasePlugin.logError(e.getLocalizedMessage(), e);
}
}
if (terminalSubSystem.isConnected()) {
CTabItem tab = viewer.getTabFolder().createTabItem(
terminalSubSystem.getHost(), getInitialDirectoryCmd());
TerminalElement element = TerminalServiceHelper
.createTerminalElement(tab, terminalSubSystem);
terminalSubSystem.addChild(element);
}
}
}
private String getInitialDirectoryCmd() {
if (selected == null)
return null;
String path = TerminalServiceHelper.getWorkingDirectory(selected);
String cdCmd = "cd " + PathUtility.enQuoteUnix(path); //$NON-NLS-1$
if (getTerminalSubSystem().getHost().getSystemType().isWindows()) {
cdCmd = "cd /d \"" + path + '\"'; //$NON-NLS-1$
}
return cdCmd + "\r"; //$NON-NLS-1$
}
}

View file

@ -1,55 +0,0 @@
/********************************************************************************
* Copyright (c) 2006, 2008 IBM Corporation and others. All rights reserved.
* This program and the accompanying materials are made available under the terms
* of the Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html
*
* Initial Contributors:
* The following IBM employees contributed to the Remote System Explorer
* component that contains this file: David McKnight, Kushal Munir,
* Michael Berger, David Dykstal, Phil Coulthard, Don Yantzi, Eric Simpson,
* Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley.
*
* Contributors:
* Martin Oberhuber (Wind River) - [168870] refactor org.eclipse.rse.core package of the UI plugin
* Yu-Fen Kuo (MontaVista) - Adapted from LaunchShellActionDelegate
********************************************************************************/
package org.eclipse.rse.internal.terminals.ui.actions;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.rse.ui.SystemBasePlugin;
import org.eclipse.swt.widgets.Event;
import org.eclipse.ui.IActionDelegate;
import org.eclipse.ui.actions.ActionDelegate;
public class LaunchTerminalActionDelegate extends ActionDelegate implements
IActionDelegate {
private LaunchTerminalAction launchTerminalAction;
private ISelection selection;
public void run(IAction action) {
if (launchTerminalAction == null) {
launchTerminalAction = new LaunchTerminalAction(SystemBasePlugin
.getActiveWorkbenchShell(), null);
}
launchTerminalAction.updateSelection((IStructuredSelection) selection);
launchTerminalAction.run();
}
public void runWithEvent(IAction action, Event event) {
super.runWithEvent(action, event);
}
public void selectionChanged(IAction action, ISelection selection) {
super.selectionChanged(action, selection);
this.selection = selection;
}
public LaunchTerminalActionDelegate() {
}
}

View file

@ -12,69 +12,21 @@
*
* Contributors:
* Yu-Fen Kuo (MontaVista) - Adapted from ShellServiceSubSystemConfigurationAdapter
* Anna Dushistova (MontaVista) - [227535] [rseterminal][api] terminals.ui should not depend on files.core
********************************************************************************/
package org.eclipse.rse.internal.terminals.ui.configuration.adapter;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.rse.core.subsystems.ISubSystem;
import org.eclipse.rse.core.subsystems.ISubSystemConfiguration;
import org.eclipse.rse.internal.terminals.ui.Activator;
import org.eclipse.rse.internal.terminals.ui.TerminalServiceHelper;
import org.eclipse.rse.internal.terminals.ui.actions.LaunchTerminalAction;
import org.eclipse.rse.subsystems.files.core.subsystems.IRemoteFileSubSystem;
import org.eclipse.rse.subsystems.terminals.core.ITerminalServiceSubSystem;
import org.eclipse.rse.ui.SystemMenuManager;
import org.eclipse.rse.ui.view.SubSystemConfigurationAdapter;
import org.eclipse.swt.widgets.Shell;
public class TerminalServiceSubSystemConfigurationAdapter extends
SubSystemConfigurationAdapter {
protected LaunchTerminalAction terminalAction;
protected ImageDescriptor activeImageDescriptor;
protected ImageDescriptor inactiveImageDescriptor;
public IAction[] getSubSystemActions(SystemMenuManager menu,
IStructuredSelection selection, Shell shell, String menuGroup,
ISubSystemConfiguration factory, ISubSystem selectedSubSystem) {
List allActions = new ArrayList();
IAction[] baseActions = super.getSubSystemActions(menu, selection,
shell, menuGroup, factory, selectedSubSystem);
for (int i = 0; i < baseActions.length; i++) {
allActions.add(baseActions[i]);
}
// launching terminals and finding files
if (selectedSubSystem instanceof IRemoteFileSubSystem) {
IRemoteFileSubSystem fs = (IRemoteFileSubSystem) selectedSubSystem;
ITerminalServiceSubSystem cmdSubSystem = TerminalServiceHelper
.getTerminalSubSystem(fs.getHost());
if (cmdSubSystem != null) {
allActions.add(getTerminalAction(cmdSubSystem, shell));
}
} else if (selectedSubSystem instanceof ITerminalServiceSubSystem) {
allActions.add(getTerminalAction(
(ITerminalServiceSubSystem) selectedSubSystem, shell));
}
return (IAction[]) allActions.toArray(new IAction[allActions.size()]);
}
public IAction getTerminalAction(
ITerminalServiceSubSystem selectedSubSystem, Shell shell) {
if (terminalAction == null) {
terminalAction = new LaunchTerminalAction(shell, selectedSubSystem);
} else {
terminalAction.setSubSystem(selectedSubSystem);
}
return terminalAction;
}
public ImageDescriptor getImage(ISubSystemConfiguration config) {
if (inactiveImageDescriptor == null) {
inactiveImageDescriptor = Activator.getDefault()

View file

@ -5,15 +5,16 @@ Bundle-SymbolicName: org.eclipse.rse.ui;singleton:=true
Bundle-Version: 3.0.0.qualifier
Bundle-Activator: org.eclipse.rse.ui.RSEUIPlugin
Bundle-Localization: plugin
Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime,
org.eclipse.rse.services;bundle-version="[3.0.0,4.0.0)",
Require-Bundle: org.eclipse.core.runtime,
org.eclipse.core.expressions;bundle-version="3.4.0",
org.eclipse.core.resources,
org.eclipse.jface.text,
org.eclipse.ui.views,
org.eclipse.ui,
org.eclipse.ui.forms,
org.eclipse.ui.ide,
org.eclipse.ui.views,
org.eclipse.ui.workbench.texteditor,
org.eclipse.rse.services;bundle-version="[3.0.0,4.0.0)",
org.eclipse.rse.core;bundle-version="[3.0.0,4.0.0)"
Import-Package: com.ibm.icu.lang,
com.ibm.icu.text,

View file

@ -16,6 +16,7 @@ Martin Oberhuber (Wind River) - [185554] Remove dynamicPopupMenuExtensions exten
Martin Oberhuber (Wind River) - [186525] Move keystoreProviders to core
Martin Oberhuber (Wind River) - [186523] Move subsystemConfigurations from UI to core
Martin Oberhuber (Wind River) - [185552] Remove remoteSystemsViewPreferencesActions extension point
Anna Dushistova (MontaVista) - [227535] [rseterminal][api] terminals.ui should not depend on files.core
-->
<?eclipse version="3.1"?>
<plugin>
@ -491,4 +492,14 @@ Martin Oberhuber (Wind River) - [185552] Remove remoteSystemsViewPreferencesActi
</viewerContentBinding>
</extension>
<extension point="org.eclipse.core.expressions.propertyTesters">
<propertyTester
id="org.eclipse.rse.ui.SubSystemPropertyTester"
type="org.eclipse.core.runtime.IAdaptable"
namespace="org.eclipse.rse.core"
properties="hasSubSystemCategory"
class="org.eclipse.rse.internal.ui.subsystems.SubSystemPropertyTester">
</propertyTester>
</extension>
</plugin>

View file

@ -0,0 +1,55 @@
/********************************************************************************
* Copyright (c) 2008 MontaVista Software, Inc.
* This program and the accompanying materials are made available under the terms
* of the Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Anna Dushistova (MontaVista) - [227535] [rseterminal][api] terminals.ui should not depend on files.core
********************************************************************************/
package org.eclipse.rse.internal.ui.subsystems;
import org.eclipse.core.expressions.PropertyTester;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.rse.core.RSECorePlugin;
import org.eclipse.rse.core.model.IHost;
import org.eclipse.rse.core.model.ISystemRegistry;
import org.eclipse.rse.core.subsystems.ISubSystem;
import org.eclipse.rse.core.subsystems.ISubSystemConfigurationProxy;
import org.eclipse.rse.ui.view.ISystemViewElementAdapter;
public class SubSystemPropertyTester extends PropertyTester {
public boolean test(Object receiver, String property, Object[] args,
Object expectedValue) {
if (property.toLowerCase().equals("hassubsystemcategory")) { //$NON-NLS-1$
boolean test = ((Boolean) expectedValue).booleanValue();
ISystemViewElementAdapter adapter = (ISystemViewElementAdapter) ((IAdaptable) receiver)
.getAdapter(ISystemViewElementAdapter.class);
if (adapter != null) {
ISubSystem subsystem = adapter.getSubSystem(receiver);
if (subsystem != null) {
IHost host = subsystem.getHost();
ISystemRegistry registry = RSECorePlugin
.getTheSystemRegistry();
String category = (String) args[0];
ISubSystemConfigurationProxy[] proxies = registry
.getSubSystemConfigurationProxiesByCategory(category);
for (int i = 0; i < proxies.length; i++) {
if (proxies[i]
.appliesToSystemType(host.getSystemType())) {
return test;
}
}
}
return !test;
} else {
return !test;
}
}
return false;
}
}