1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-15 21:15:23 +02:00

[218227][usability] Contribute a "Show in RSE" action to Resource Navigator and Project Explorer

This commit is contained in:
David McKnight 2009-01-26 20:20:06 +00:00
parent 995c8f06e7
commit a921481a0b
4 changed files with 124 additions and 8 deletions

View file

@ -15,6 +15,7 @@
# Willian Mitsuda - [184824] added a Remote action set item # Willian Mitsuda - [184824] added a Remote action set item
# David McKnight (IBM) - [187711] Link with Editor action for System View # David McKnight (IBM) - [187711] Link with Editor action for System View
# David McKnight (IBM) - [209593] [api] add support for "file permissions" and "owner" properties for unix files # David McKnight (IBM) - [209593] [api] add support for "file permissions" and "owner" properties for unix files
# David McKnight (IBM) - [218227][usability] Contribute a "Show in RSE" action to Resource Navigator and Project Explorer
############################################################################### ###############################################################################
# NLS_MESSAGEFORMAT_NONE # NLS_MESSAGEFORMAT_NONE
@ -55,3 +56,9 @@ Remote.Search = &Remote...
Remote.Search.tooltip = Opens Remote Search dialog page for text and file searching on remote systems Remote.Search.tooltip = Opens Remote Search dialog page for text and file searching on remote systems
LinkWithSystemView.label = Link with Editor LinkWithSystemView.label = Link with Editor
# Show in RSE View
ShowInRSEView.label = Show in Remote Systems view
ShowInRSEView.tooltip = Display the selected resource in the Remote Systems view

View file

@ -13,6 +13,7 @@ Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley.
Contributors: Contributors:
David McKnight (IBM) - [261019] New File/Folder actions available in Work Offline mode David McKnight (IBM) - [261019] New File/Folder actions available in Work Offline mode
David McKnight (IBM) - [218227][usability] Contribute a "Show in RSE" action to Resource Navigator and Project Explorer
--> -->
<?eclipse version="3.0"?> <?eclipse version="3.0"?>
<plugin> <plugin>
@ -474,5 +475,21 @@ David McKnight (IBM) - [261019] New File/Folder actions available in Wo
</action> </action>
</viewContribution> </viewContribution>
</extension> </extension>
<extension
point="org.eclipse.ui.popupMenus">
<objectContribution
objectClass="org.eclipse.core.resources.IResource"
id="org.eclipse.rse.ui.ShowResourceInSystemsView">
<action id="org.eclipse.rse.ui.ShowResourceInSystemsViewAction"
label="%ShowInRSEView.label"
tooltip="%ShowInRSEView.tooltip"
class="org.eclipse.rse.internal.files.ui.actions.ShowResourceInSystemsViewDelegate">
menubarPath="group.goto"
enablesFor="1"
id="showResourceInSystemsView">
</action>
</objectContribution>
</extension>
</plugin> </plugin>

View file

@ -0,0 +1,91 @@
/********************************************************************************
* Copyright (c) 2009 IBM Corporation. All rights reserved.
* This program and the accompanying materials are made available under the terms
* of the Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html
*
* Initial Contributors:
* The following IBM employees contributed to the Remote System Explorer
* component that contains this file: David McKnight.
*
* Contributors:
* David McKnight (IBM) - [218227][usability] Contribute a "Show in RSE" action to Resource Navigator and Project Explorer
********************************************************************************/
package org.eclipse.rse.internal.files.ui.actions;
import java.net.URI;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.action.IAction;
import org.eclipse.rse.core.RSECorePlugin;
import org.eclipse.rse.core.model.IHost;
import org.eclipse.rse.core.model.ISystemProfile;
import org.eclipse.rse.core.model.ISystemRegistry;
import org.eclipse.rse.internal.ui.actions.ShowInSystemsViewDelegate;
import org.eclipse.rse.subsystems.files.core.model.RemoteFileUtility;
import org.eclipse.rse.subsystems.files.core.subsystems.IRemoteFileSubSystem;
public class ShowResourceInSystemsViewDelegate extends
ShowInSystemsViewDelegate {
public void run(IAction action) {
if (_selectedObject instanceof IResource){
Object remoteObject = null;
IResource resource = (IResource)_selectedObject;
ISystemRegistry sr = RSECorePlugin.getTheSystemRegistry();
// need to find the remote equivalent of this
IPath location = resource.getLocation();
if (location != null){
String fullPath = location.toOSString();
IHost localHost = sr.getLocalHost();
if (localHost != null){
IRemoteFileSubSystem ss = RemoteFileUtility.getFileSubSystem(localHost);
try {
remoteObject = ss.getRemoteFileObject(fullPath, new NullProgressMonitor());
}
catch (Exception e) {
}
}
}
else {
URI uri = resource.getLocationURI();
String hostName = uri.getHost();
String fullPath = uri.getPath();
IHost host = null;
// find the host
ISystemProfile[] profiles = sr.getSystemProfileManager().getActiveSystemProfiles();
for (int i = 0; i < profiles.length && host == null; i++){
ISystemProfile profile = profiles[i];
host = sr.getHost(profile, hostName);
}
if (host != null){
IRemoteFileSubSystem ss = RemoteFileUtility.getFileSubSystem(host);
try {
remoteObject = ss.getRemoteFileObject(fullPath, new NullProgressMonitor());
}
catch (Exception e) {
}
}
}
if (remoteObject != null){
_selectedObject = remoteObject;
}
else {
//unable to find remote object equivalent so returning
return;
}
}
super.run(action);
}
}

View file

@ -10,6 +10,7 @@
* *
* Contributors: * Contributors:
* David McKnight (IBM) - [160105] [usability] Universal action needed to locate a resource in the Remote Systems View * David McKnight (IBM) - [160105] [usability] Universal action needed to locate a resource in the Remote Systems View
* David McKnight (IBM) - [218227][usability] Contribute a "Show in RSE" action to Resource Navigator and Project Explorer
********************************************************************************/ ********************************************************************************/
package org.eclipse.rse.internal.ui.actions; package org.eclipse.rse.internal.ui.actions;
@ -318,7 +319,7 @@ public class ShowInSystemsViewDelegate implements IViewActionDelegate {
} }
private IAction _action; private IAction _action;
private Object _remoteObject; protected Object _selectedObject;
private SystemViewPart _systemViewPart; private SystemViewPart _systemViewPart;
public void init(IViewPart view) { public void init(IViewPart view) {
@ -330,19 +331,19 @@ public class ShowInSystemsViewDelegate implements IViewActionDelegate {
SystemView systemTree = viewPart.getSystemView(); SystemView systemTree = viewPart.getSystemView();
// now we've got to show the object in this view part // now we've got to show the object in this view part
TreeItem item = (TreeItem)systemTree.findFirstRemoteItemReference(_remoteObject, null); TreeItem item = (TreeItem)systemTree.findFirstRemoteItemReference(_selectedObject, null);
if (item != null){ if (item != null){
systemTree.getTree().setSelection(item); systemTree.getTree().setSelection(item);
} }
else if (_remoteObject instanceof IAdaptable) else if (_selectedObject instanceof IAdaptable)
{ {
ISystemViewElementAdapter adapter = (ISystemViewElementAdapter)((IAdaptable)_remoteObject).getAdapter(ISystemViewElementAdapter.class); ISystemViewElementAdapter adapter = getAdapter((IAdaptable)_selectedObject);
if (adapter != null){ if (adapter != null){
ISubSystem subSystem = adapter.getSubSystem(_remoteObject); ISubSystem subSystem = adapter.getSubSystem(_selectedObject);
if (subSystem.getSubSystemConfiguration().supportsFilters()){ if (subSystem.getSubSystemConfiguration().supportsFilters()){
// no match, so we will expand from filter // no match, so we will expand from filter
// query matching filter in a job (to avoid main thread) // query matching filter in a job (to avoid main thread)
LinkFromFilterJob job = new LinkFromFilterJob((IAdaptable)_remoteObject, systemTree); LinkFromFilterJob job = new LinkFromFilterJob((IAdaptable)_selectedObject, systemTree);
job.schedule(); job.schedule();
} }
else { else {
@ -351,7 +352,7 @@ public class ShowInSystemsViewDelegate implements IViewActionDelegate {
// put these items in the tree and look for remote object // put these items in the tree and look for remote object
// if we can't find the remote object under this, the ShowChildrenInTree will recurse // if we can't find the remote object under this, the ShowChildrenInTree will recurse
Display.getDefault().asyncExec(new ShowChildrenInTree(subSystem, children, null, systemTree, (IAdaptable)_remoteObject)); Display.getDefault().asyncExec(new ShowChildrenInTree(subSystem, children, null, systemTree, (IAdaptable)_selectedObject));
} }
} }
} }
@ -381,7 +382,7 @@ public class ShowInSystemsViewDelegate implements IViewActionDelegate {
IStructuredSelection sel = (IStructuredSelection)selection; IStructuredSelection sel = (IStructuredSelection)selection;
if (sel.size() == 1){ if (sel.size() == 1){
_action.setEnabled(true); _action.setEnabled(true);
_remoteObject = sel.getFirstElement(); _selectedObject = sel.getFirstElement();
} }
else { else {
_action.setEnabled(false); _action.setEnabled(false);