EMF Ecore Modell. Referenzen nach außen.

EMF

Neues Mitglied
Hallo Forum,
bin neuer hier und hoffe, dass mir jemand helfen kann. Google ist für mich ratlos.

Problem:
Beispielsweise habe ich zwei Ecore Modelle: "A" und "B".
Ein EClass vom Modell "A" referenziert auf ein EClass vom Modell "B".
Ich möchte nun von dem Modell "A" alle Referenzen bestimmen, die auf die Klassen anderer Modelle zeigen. D.h. also alle Referenzen, die nach außen zeigen.

Man könnte natürlich einen Parser schreiben und die Referenzen in der Ecore Datei "per Hand" raushollen. Gibt es vllt. bereits eine fertige Methode dafür? EcoreUtil stellt beispielsweise viel zur Verfügung, aber genau das was ich brauche habe ich da auch nicht gefunden.

Danke im Voraus!
 
hab eine Lösung gefunden, nähmlich stellt EcoreUtil.ExternalCrossReferencer das gewünschte zur Verfügung.

targetPackage - ist der "Wurzel" des untersuchendes Modells

Man erstellt zuerst einen Map mit allen Referenzen(die nach außen zeigen) von dem gewünschten Modell

Java:
Map <EObject,Collection<EStructuralFeature.Setting>> allReferences = EcoreUtil.ExternalCrossReferencer.find(targetPackage);
Mit volgendem Code bekommt man nun alle Elemente angezeigt:
Java:
for (Map.Entry<EObject,Collection<EStructuralFeature.Setting>> entry : allReferences.entrySet())
System.out.println(entry.getKey());

An der Stelle stelt man aber fest, dass alle "standarte" DateiTypen auch angezeigt werden (Solche wie: EInt, EString, usw.). Das ist ja auch richtig, denn diese nicht als ein EClass in meinem Modell defeniert sind (müssen sie auch nicht defeniert sein).
Was man dann machen kann: jedes Element (EObject) prüfen, ob das ein EObject vom Typ EClass ist, falls ja, dann ist es der gesuchte Verweis auf ein Klass von dem anderen Modell. Fertig!
 
Dabei vergisst du allerdings custom EDataTypes. Es sei denn das spielt keine Rolle...
Danke auf alle Fälle das du deine Lösung dazu gepostet hast.
 

Zurück
Oben