Follow Techotopia on Twitter

On-line Guides
All Guides
eBook Store
iOS / Android
Linux for Beginners
Office Productivity
Linux Installation
Linux Security
Linux Utilities
Linux Virtualization
Linux Kernel
System/Network Admin
Programming
Scripting Languages
Development Tools
Web Development
GUI Toolkits/Desktop
Databases
Mail Systems
openSolaris
Eclipse Documentation
Techotopia.com
Virtuatopia.com

How To Guides
Virtualization
General System Admin
Linux Security
Linux Filesystems
Web Servers
Graphics & Desktop
PC Hardware
Windows
Problem Solutions
Privacy Policy

  




 

 

Eclipse RSE Development Guide
Previous Page Home Next Page

Creating a Remote Resource pop-up Menu Action

In this tutorial, you will use the org.eclipse.ui.popupMenus extension point to create a pop-up menu action that will appear in the context menu for any .jar file, for any connection to any system type. The action will be labeled "Show contents" and will simply run the jar -tvf JDK command when selected, displaying the results in the command console. You could expand this example to copy the file to a local temporary folder, extract the list of file names within the jar, and display those names in an Eclipse table view.

Step-by-Step: Creating an RSE Remote Resource Pop-up Menu Action

  1. If you have not already, first create or prepare a plugin project.
  2. Open the plugin.xml file for editing by right-clicking on it and selecting Open With->Text Editor. Before the ending </plugin> statement, add the following lines:
    
       <!-- ======================================= -->
       <!-- Remote Object Popup Menu Actions        -->
       <!-- ======================================= -->
       <extension point="org.eclipse.ui.popupMenus">
          <objectContribution
                   objectClass="org.eclipse.rse.subsystems.files.core.subsystems.IRemoteFile"
                   nameFilter="*.jar"
                   id="actions.jar">
               <action
                       label="Show contents"
                       tooltip="List contents of this file"
                       class="samples.ui.actions.ShowJarContents"
                       menubarPath="additions"
                       enablesFor="1"
                       id="actions.jar.show">
               </action>
           </objectContribution>
        </extension>
    
    
    Save and close the file.
  3. Right-click on the project and use the New... action to create a new package in this project named samples.ui.actions.
  4. Create the Java class: right-click on the new samples.ui.actions package folder and select New->Class to open the New Java Class wizard. Enter "ShowJarContents" for the Name, add IObjectActionDelegate to the Interfaces that are implemented, and check the constructors from superclass checkbox as shown here. Click Finish to create the ShowJarContents class.
  5. Edit the generated ShowJarContents.java file as follows. Use the "Source -> Organize Imports" context menu item to add the appropriate import statements as you edit.
    1. Add an instance variable to hold a list of remote files and initialize it in the constructor.
    2. 
      	private List _selectedFiles;
      
      	/**
      	 * Constructor for ShowJarContents.
      	 */
      	public ShowJarContents() {
      		_selectedFiles = new ArrayList();
      	}	  
      
      
    3. Add the following three utility methods
    4. 
      	protected Shell getShell() {
      		return SystemBasePlugin.getActiveWorkbenchShell();
      	}
      
      	protected IRemoteFile getFirstSelectedRemoteFile() {
      		if (_selectedFiles.size() > 0) {
      			return (IRemoteFile)_selectedFiles.get(0);
      		}
      		return null;
      	}
      
      	protected ISubSystem getSubSystem() {
      		return getFirstSelectedRemoteFile().getParentRemoteFileSubSystem();
      	}
      
      
    5. Add the following methods to find the subsystem and run the command:
    6. 
      	public void runCommand(String command) {
      		IRemoteCmdSubSystem cmdss = getRemoteCmdSubSystem();
      		if (cmdss != null && cmdss.isConnected()) {
      			// Run the command in a visible shell
      			RemoteCommandHelpers.runUniversalCommand(getShell(), command, ".", cmdss); //$NON-NLS-1$
      		} else {
      			MessageDialog.openError(getShell(), "No command subsystem", "Found no command subsystem");
      		}
      	}
      
      	/**
      	 * Gets the Command subsystem associated with the current host
      	 */
      	public IRemoteCmdSubSystem getRemoteCmdSubSystem() {
      		IHost myHost = getSubSystem().getHost();
      		IRemoteCmdSubSystem[] subsys = RemoteCommandHelpers.getCmdSubSystems(myHost);
      		for (int i = 0; i < subsys.length; i++) {
      			if (subsys[i].getSubSystemConfiguration().supportsCommands()) {
      				return subsys[i];
      			}
      		}
      		return null;
      	}
      
      
    7. Finally, flesh out the methods that were created as stubs
    8. 
      	public void run(IAction action) {
      		IRemoteFile selectedFile = getFirstSelectedRemoteFile();
      		String cmdToRun = "jar -tvf " + selectedFile.getAbsolutePath(); //$NON-NLS-1$
      		try {
      			runCommand(cmdToRun);
      		} catch (Exception e) {
      			String excType = e.getClass().getName();
      			MessageDialog.openError(getShell(), excType, excType + ": " + e.getLocalizedMessage()); //$NON-NLS-1$
      			e.printStackTrace();
      		}
      	}
      
      	public void selectionChanged(org.eclipse.jface.action.IAction action, org.eclipse.jface.viewers.ISelection selection) {
      		_selectedFiles.clear();
      		// store the selected jars to be used when running
      		Iterator theSet = ((IStructuredSelection) selection).iterator();
      		while (theSet.hasNext()) {
      			Object obj = theSet.next();
      			if (obj instanceof IRemoteFile) {
      				_selectedFiles.add(obj);
      			}
      		}
      	}
      
      	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
      	}
      
      
    The final result after editing is shown here.

Now, you can try your new action. Use Run->Run As->Eclipse Application. Drill down in the RSE to a Jar file in a local or remote connection and right-click to see and run your new action. Notice how it does not appear for files that do not end with the ".jar" extension. This is because of the "nameFilter" attribute in our extension point .xml file.


 
 
  Published under the terms of the Eclipse Public License Version 1.0 ("EPL") Design by Interspire