Eclipse -PlugIn, IWorkbenchPart - Inhalt?

BlueBook

Grünschnabel
Hallo Ihr,

ich versuch gerade ein PlugIn für Eclipse zu schreiben. Verzweifle aber dabei an den Inhalt einer Datei zu kommen.

Ich hab das PopUp-Menü über das Plugin so erweitert, dass XML Dateien einen neuen Menüpunkt haben.

Wird dieser gewählt, wird zuerst die Methode:
public void setActivePart(IAction action, IWorkbenchPart targetPart) {
und danach die run() Methode aufgerufen.... (so weit normal)

Über IWorkbenchPart targetPart komm ich an das Icon der XML Datei, aber wie an den Inhalt?
Ich möchte diesen gerne an einen XML-Parser übergeben...

Bin für jeden Lösungsvorschlag dankbar!

BB
 
Hallo!

Hier mal ein alternativer Weg um das gewünschte zu bewerkstelligen ...

Mein Plugin.xml:

Ich erweitere das PopUP Menu von Eclipse im Resources View...
Ich bekomme die Selektierte Datei über eine ISelection beim selectionChanged Event
in der Klasse MyAction. Danach wird dessen run Methode aufgerufen.

Code:
<?xml version="1.0" encoding="UTF-8"?>
<plugin
   id="de.tutorials.plugin"
   name="de.tutorials.plugin"
   version="1.0.0">

   <runtime>
      <library name="plugin.jar"/>
   </runtime>
   <requires>
      <import plugin="org.eclipse.ui.workbench"/>
      <import plugin="org.eclipse.ui.views"/>
      <import plugin="org.eclipse.ui.editors"/>
      <import plugin="org.eclipse.core.boot"/>
      <import plugin="org.eclipse.core.resources"/>
      <import plugin="org.eclipse.core.runtime"/>
      <import plugin="org.eclipse.jface"/>
      <import plugin="org.eclipse.jdt"/>
      <import plugin="org.eclipse.jdt.core"/>
      <import plugin="org.eclipse.jdt.ui"/>
   </requires>

   <extension
         point="org.eclipse.ui.popupMenus">
      <objectContribution
            objectClass="org.eclipse.core.resources.IResource"
            adaptable="true"
            id="de.tutorials.plugin.popup">
         <menu
               label="Tutorials.de:Test"
               path="additions"
               id="de.tutorials.menu">
            <separator
                  name="group1">
            </separator>
         </menu>
         <action
               label="Tutorials.de:doIt"
               class="de.tutorials.plugin.action.MyAction"
               menubarPath="de.tutorials.menu/group1"
               id="de.tutorials.plugin.action.MyAction">
         </action>
      </objectContribution>
   </extension>
</plugin>

Meine Klasse de.tutorials.plugin.action.MyAction

Code:
package de.tutorials.plugin.action;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IActionDelegate;

public class MyAction extends Action implements IActionDelegate {

	IStructuredSelection currentSel;

	public void run(IAction action) {

		IFile file = (IFile) currentSel.getFirstElement();

		if (file == null)
			return;

		String fileName = file.getName();
		if (!fileName.endsWith(".xml"))
			return;

		System.out.println(fileName);

		BufferedReader br = null;
		try {
			br = new BufferedReader(new InputStreamReader(file.getContents()));
		} catch (CoreException e1) {
			e1.printStackTrace();
			return;
		}

		String line = null;
		try {
			while ((line = br.readLine()) != null) {
				System.out.println(line);
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (br != null) {
				try {
					br.close();
				} catch (IOException e2) {
					e2.printStackTrace();
				}
			}
		}
	}

	public void selectionChanged(IAction action, ISelection selection) {
		if (selection instanceof IStructuredSelection) {
			currentSel = (IStructuredSelection) selection;
		}
	}
}

Gruß Tom

Gruß Tom
 

Anhänge

Hallo Tom!

erst einmal danke für die schnelle Antwort bzw. für die schnelle und auch hilfreiche Antwort! :-)

Okay, wahrscheinlich ist dieses IWorkbanchPart Dingen wirklich nur für die GUI, obwohl ich´s bissel blöde finde, dass man keine Chance hat an die Datei zu kommen.

Aber so gehts ja jetzt auch :-)

Ich bin gerade dabei mich einzuarbeiten. Ich hab Deine zwei "Uralt"-Links zum Thema hier im Forum gefunden, kannte die aber auch schon.

Wo bekommt man denn vielleicht mal eine gute Übersicht zu dem Thema "PlugIns"?

Oder muss man sich ein Buch kaufen?

http://www.qualityeclipse.com/
Das Buch scheint recht nett zu sein. Fands auch nett, weil die das komplette SWT-Kapitel online haben.

Kennt das Buch jemand?
Oder andere Empfehlungen?

Gruß
BB
 
Hi Tom,

danke für den Hinweis, hab mir das Buch gerade mal ausgeliehen, sieht ja wirklich recht nett aus. Allerdings muss ich gerade sagen, dass ich damit mein neues Problem auch nicht gelöst bekomme. Die 28 Seiten zu den PlugIns sind ja doch relativ allgemein gehalten.

Vielelicht magst Du mir (oder wer anders) noch einmal helfen.
(Ich hab jetzt mal keinen neuen Thread erstellt, weil´s ja auch noch um PlugIns gehts...)

Ich hab zwei der "vorgefertigten" PlugIns benutzt. Einmal um das KontextMenü zu erweitern und einmal um das DropDown-Menü zu erweitern.

Beide rufen mir meine Action-Methode auf.
Wenn man aber über das DropDown menü geht, wird vorher die Mehtode

public void init(IWorkbenchWindow window) {
this.window = window;
}

aufgerufen.

Wenn man über das KontextMenü geht, wird diese Mehtode nicht aufgerufen und die Referenz auf das IWorkbenchWindow nicht gesetzt.

Wie bekomm ich diese Referenz dann trotzdem?

Bin für jeden Hinweis dankbar.

Beste Grüße
BB
 
Zurück