# EMF Editor Dateiverknüpfungen



## Paule (14. Okt 2007)

Hallo,

ich bin gerade dabei ein Eclipse Plugin zu schreiben. Nun bin ich auf ein Problem gestoßen und komme nicht weiter.

Mittels eines EMF Editors wird ein Modell und damit ja auch eine Datei erstellt. Im Editor kann man auch Verknüpfungen zu anderen EMF Modellen erstellen über "Load Resource". So weit so gut.

Mein Plugin soll nun das erstellte Model weiter verarbeiten. Dafür möchte ich die vorher im Editor angegebenen Verknüpfungen herausfinden und die verknüpften Modelle in eigenen Fenstern öffnen (wie das geht weiß ich).
Meine Frage ist also, wie finde ich die Verknüpfungen heraus, nachdem ich die Datei per Rechtsklick ausgewählt habe und den entsprechenden Eintrag im Kontextmenü gewählt habe?
Geht das evtl über das ISelection-Objekt? Ich habe auch schon versucht den zuständigen Editor herauszufinden, allerdings habe ich nirgends etwas zu den Verknüpfungen finden können.

Ich hoffe mri kann jemand helfen. Schon mal danke!!


----------



## Wildcard (14. Okt 2007)

Meines Wissens nach werden die Dateien nicht wirklich importiert.
Lediglich für den Editor wird die entsprechende Datei sichtbar.
Die Elemente aus dem 'importierten' können dann im eigentlichen Model verwendet werden und mit einer URI gespeichert.
Bei Bedarf wird die URI dann ausgewertet und die fehlenden Dateien nachgeladen.
Schau dir einfach mal die XML Struktur deiner Dateien an, dann müsstest du mehr wissen.


----------



## Paule (16. Okt 2007)

Ja stimmt.

Weißt Du zufällig wie man an das Model der Datei herankommt? Sprich so, dass ich irgendwie eine Instanz des Models habe und damit ganz normal weiterarbeiten kann.

Bis jetzt habe ich die XML Struktur ausgewertet und mir so z.B. die verlinkten Resourcen besorgt.  Aber das geht doch sicher auch etwas schöner, oder?

MfG!!


----------



## Wildcard (16. Okt 2007)

Der einfachste Weg dürfte über die Klasse EMFUtil führen.


----------



## Paule (16. Okt 2007)

Ok danke, werd ich mir gleich mal angucken.


----------



## Paule (16. Okt 2007)

Ehm blöde Frage 
Ich denke Du meinst diese Klasse hier:  EMFUtil zumindest scheint die Klasse das zu können, was ich möchte. Nur wo versteckt sich die Klasse denn? Ich wollte in der Plugin.xml eine dependency hinzufügen, nur leider gibt es kein package, dass mit org.eclipse.hyades (usw) beginnt.
Hab jetzt schon ne Weile gegoogelt allerdings dabei nichts brauchbares gefunden außer immer wieder die Dokumentation zur Klasse (siehe Link).


----------



## Wildcard (16. Okt 2007)

Verzeihung, ich meinte EcoreUtil. Aber mal blöd gefragt, wozu das ganze eigentlich? 
Du hast doch vermutlich eReferences in deinem Model, oder?
EMF sollte diese Referenzen doch automatisch auflösen.
Das sind doch auch eObjects, warum nicht einfach eObject.eResource oder eContainer?  ???:L


----------



## Paule (17. Okt 2007)

Bei meiner letzten Frage ging es mir gar nicht speziell um die Referenzen.
Kurz zum Ablauf mines Plugins: Es wird im Vorfeld ein Model und damit ja auch eine Datei erstellt. Diese kann man per Rechtsklick anklicken und wenn man aus dem Kontextmenü den passenden Eintrag auswählt, dann startet mein Plugin.
Dabei habe ich dann Zugriff auf ein ISelection Objekt woraus ich mir ein IFile Objekt erstelle. Aus diesem IFile möchte ich gerne das Model haben.
Sollte ih dieses Model erst einmal haben, brauche ich die Refernzen nicht mehr selbst auflösen (wie bisher), das macht dann ja EMF für mich.

Zur Verdeutlichung ein bisschen Code:


```
public class MyPluginAction implements IObjectActionDelegate {
	IWorkbenchPart part;
	ISelection selection;

	/**
	 * Constructor for Action1.
	 */
	public MyPluginAction() {
		super();
	}

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

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

	/**
	 * @see IActionDelegate#run(IAction)
	 */
	public void run(IAction action) {
		Shell shell = new Shell();
		
		IFile file = (IFile) ((IStructuredSelection) selection).getFirstElement();
		//aus diesem IFile möchte ich das Model bekommen
	}
}
```


----------



## Wildcard (17. Okt 2007)

Naja, über ein ResourceSet kannst du dir die Resource erstellen lassen und die Resource enthält das Model.


----------



## Paule (17. Okt 2007)

Oh man, doch so einfach. Ein genauer Blick in die API hätte das Problem schneller lösen können.
Sag nix  :roll: 
Vielen Dank!!!


----------

