Eclipse Plugin Entwicklung: Referenz auf selektierten File

Vatar

Erfahrenes Mitglied
Moin Moin.

Wir wollen bei uns in der Firma einkleines Plugin für Eclipse (3.0) schreiben, mit dem man einem Package einfach vordefinierte Copyright-Infos hinzufügen kann. Dazu haben wir das Contextmenu erweitert, was auch funktionert.

Meine Frage: Wie bekomme ich nun den File den ich ausgewählt habe? Über die IAction habe ich noch keinen weg gefunden da ran zu kommen und auch die Interfaces (IObjectActionDelegate, usw) waren wenig hilfreich.

Wär super wenn sich jemand damit auskennt.
Thx
 
Auskennen: kein Stück. :)
Ich kann mich nur erinnern, das mal (so ähnlich) im Buch "Contributing to Eclipse" gelesen zu haben:

Code:
public class NewAction implements IObjectActionDelegate {

	private IWorkbenchPart part;
	
	/**
	 * Constructor for Action1.
	 */
	public NewAction() {
		super();
	}

	/**
	 * @see IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart)
	 */
	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
		part= targetPart;
	}

	/**
	 * @see IActionDelegate#run(IAction)
	 */
	public void run(IAction action) {
		Shell shell = new Shell();
		ISelection sel= part.getSite().getSelectionProvider().getSelection();
		MessageDialog.openInformation(
			shell,
			"PackageExplorerSelectionAction Plug-in",
			"New Action was executed." + sel.toString() );
	}

	/**
	 * @see IActionDelegate#selectionChanged(IAction, ISelection)
	 */
	public void selectionChanged(IAction action, ISelection selection) {
	}

}

Laut Buch (s.o.) ist die Site eine Fassade, über die man an Informationen in der Workbench kommen kann.

Ich hab einfach den Extension Point "org.eclipse.ui.popupMenus" erweitert und dann die Vorlage benutzt.

HTH
 
Hallo!

Schau mal hier:
Code:
 package de.tutorials.pluginexample.popup.actions;
  
  import org.eclipse.core.resources.IFile;
  import org.eclipse.jface.action.IAction;
  import org.eclipse.jface.dialogs.MessageDialog;
  import org.eclipse.jface.viewers.ISelection;
  import org.eclipse.jface.viewers.IStructuredSelection;
  import org.eclipse.swt.widgets.Shell;
  import org.eclipse.ui.IActionDelegate;
  import org.eclipse.ui.IObjectActionDelegate;
  import org.eclipse.ui.IWorkbenchPart;
  
  public class SetCopyrightInfoAction implements IObjectActionDelegate {
  
  	/**
  	 * Constructor for Action1.
  	 */
  	public SetCopyrightInfoAction() {
  		super();
  	}
  
  	/**
  	 * @see IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart)
  	 */
  	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
  	}
  
  	/**
  	 * @see IActionDelegate#run(IAction)
  	 */
  	public void run(IAction action) {
  		Shell shell = new Shell();
  		MessageDialog.openInformation(shell, "Pluginexample Plug-in",
 				"Set Copyrightinfo was executed.");
  	}
  
  	/**
  	 * @see IActionDelegate#selectionChanged(IAction, ISelection)
  	 */
  	public void selectionChanged(IAction action, ISelection selection) {
  		if (selection instanceof IStructuredSelection) {
 		 IStructuredSelection structuredSelection = (IStructuredSelection) selection;
  		    IFile selectedFile = (IFile)structuredSelection.getFirstElement();
  			System.out.println(selectedFile.getName());
  			System.out.println(selectedFile.getFullPath());
  		}
  	}
  }

Anbei das Beispielprojekt... (Nicht vergessen im der Contribution den nameFilter passend zu setzen...) -> plugin.xml -> de.tutorials.pluginexample.contribution1 -> Extension Element Details.

Gruß Tom
 

Anhänge

  • de.tutorials.pluginexample.zip
    5,4 KB · Aufrufe: 157
Kann mir jemand sagen, was das Feld 'adaptable' (true/false) unter Extension Element Details bedeutet?

gruss Paolo
 
Hab auch mal ne Frage zu dem Thema:

Wenn mir mir das selektierte File geholt habe, also eine Instanz der Klasse IFile, wie kann ich dann daraus ein File bekommen?

Wenn ich

Code:
IFile selectedFile = (IFile) structuredSelection.getFirstElement();
File myFile = new File(selectedFile.getFullPath().toPortableString());

mache, bekomme ich beim Zugriff eine FileNotFoundException?

Kann mir einer sagen wie das geht?

Danke im voraus
 
Hallo!

Schau mal hier:
Java:
IStructuredSelection structuredSelection = (IStructuredSelection)selection;
    IFile file = (IFile)structuredSelection.getFirstElement();
    try {
      System.out.println(FileLocator.toFileURL(file.getLocationURI().toURL()));
    } catch (Exception e) {
      e.printStackTrace();
    }

Gruß Tom
 
Zurück