UUIDs im EMF-Modell verwenden
07. April 2009Die Referenzierung erfolgt in der XML/XMI-Repräsentation eines EMF-generierten Modells standardmäßig über XPath Ausdrücke (hm, stimmt das? wo hab ich das denn gelesen?).
<packagedElement xsi:type="KobrA2SUM.Structure:K2ComponentClass" name="TravelBookingSystem">
<generalization general="#//BookingSystem"/>
<!-- ... -->
</packagedElement>
<packagedElement xsi:type="KobrA2SUM.Structure:K2ComponentClass" name="TravelBookingSystem">
<!-- ... -->
</packagedElement>
Hieraus ergibt sich der Nachteil, dass ein SUM-View-Mapping der Modellelemente nur zu Programmlaufzeit sichergestellt werden kann. Ändert man zum Beispiel den Namen der Komponente “BookingSystem” in der View “offline” und möchte dann die Änderung in das SUM importieren, ist die nicht mehr korrekt möglich, da kein passendes Mapping mehr erfolgen kann. Vor allem hinsichtlich einer kollaborativen Entwicklung ergeben sich Schwierigkeiten, die ohne künstliche IDs nicht zu umgehen sind.
Aus diesem Grund gibt es die Möglichkeit UUIDs zu verwenden. Da diese bei EMF-generierten Modellen standardmäßig nicht vorgesehen sind, ist ein kleiner Eingriff des Programmierers in den erzeugten Code notwendig. Wie das funktioniert habe ich vor allem durch einen Artikel von Seweryn Niemiec erfahren: How To Enable UUID In EMF Generated Model [...]
Folgende Änderungen brachten mich zum Ziel:
- Die Klasse KobrA2SUMResourceFactoryImpl erweitert org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl
- Die Klasse KobrA2SUMResourceImpl erweitert org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl
- Außerdem wurde die Methode useUUIDs() der Klasse KobrA2SUMResourceImpl überschrieben:
/* (non-Javadoc)
* @see org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl#useUUIDs()
*/
@Override
protected boolean useUUIDs() {
return true;
}
Schließlich erhielt ich ein Modell, das UUIDs verwendet und auch über diese referenziert.
<packagedElement xsi:type="KobrA2SUM.Structure:K2ComponentClass" xmi:id="_5F2l0CKuEd654_10FfizxA" name="TravelBookingSystem">
<generalization xmi:id="_5F96kCKuEd654_10FfizxA" general="#_5H7CYSKuEd654_10FfizxA"/>
<!-- ... -->
</packagedElement>
<packagedElement xsi:type="KobrA2SUM.Structure:K2Class" xmi:id="_5H7CYSKuEd654_10FfizxA" name="BookingSystem">
<!-- ... -->
</packagedElement>
Bei der View-Erzeugung werden dann die UUIDs der Elemente “kopiert”, d.h. die UUID des Elements des SUM per eObject.eResource().getURIFragment(eObject) ausgelesen und dann beim Element der View manuell per UMLResource.setID(eObject) gesetzt.
Um dies herauszufinden war das durchstöbern der Newsgroup [news.eclipse.modeling.mdt.uml2] sehr hilfreich, denn dort fand ich den entsprechenden Hinweis.
Geschützt: KobrA2 Metamodellierung
24. März 2009Geschützt: Konzept zur Programmierung
26. Februar 2009Artikel zu meiner Diplomarbeit
19. Februar 2009Wie ihr sehen könnt, veröffentliche ich in der letzten Zeit immer wieder Artikel zu meiner Diplomarbeit. Diese sind zunächst einmal mit einem Passwort geschützt, um die Inhalte nur einem kleinen Kreis zugänglich zu machen. Ein Grund dafür ist, dass diese Artikel Auszüge meiner Diplomarbeit enthalten können. Somit dient mir der Blog zur Zeit als Art DA-Tagebuch und Sketchbook. Ich halte Informationen fest, berichte über neue Erkenntnisse und den Fortschritt meiner praktischen Arbeit. Die Idee dahinter ist, nach dem praktischen Teil viele Informationen und eine gute Grundlage für die schriftliche Ausarbeitung zu haben.
Nach Beendigung meiner DA werde ich alle (oder zumindest den Großteil) der DA-Artikel der öffentlichkeit zugänglich machen. Falls du das nicht abwarten kannst, dich meine DA interessiert und/oder der Meinung bist, auch zu dem kleinen Kreis der “Auserwählten” zu gehören, frag mich einfach nach dem Passwort ![]()