Seite auswählen

Schlagwort: EMF

UUIDs im EMF-Modell verwenden

Die 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”> <!– … –>...

Weiterlesen

KobrA2 Metamodellierung

Endlich melde ich mich nach etwas längerer Pause mit einem neuen Artikel zurück. In der Zwischenzeit ist auch das eine oder andere geschehen, auch hinsichtlich meiner Diplomarbeit. Heute möchte ich mich dem Thema “Metamodellierung” widmen: Grundlage: Jan’s Diplomarbeit Grundlage dieses Teils meiner Arbeit war diesmal vor allem die Diplomarbeit von Jan Kadathukalam, der in den Abschnitten 3.1 und 3.3 die benötigten theoretischen Hintergrund erläutert. Aus seiner praktischen Arbeit habe ich das auf MDT UML2 basierte KobrA2 Metamodell verwendet und an meine Anforderungen angepasst. Diese Anpassungen sind in erster Linie das Umbenennen der Packages, das Ausgliedern der Elemente K2Model und K2Package sowie die Erweiterung des Package Structure (ehemals StructureClasses) um die voraussichtlich für meine Arbeit benötigten Elemente des KobrA2 Metamodells. Erweiterung des UML-Metamodells Die Aufgabenstellung meiner Diplomarbeit fordert die Erzeugung eines simplen Metamodells, so dass die in erster Linie geforderten Transformationen (SUM->View und View->SUM) realisiert werden können. Eine Erweiterung des UML-Metamodells liegt quasi auf der Hand. Da die Views selbst mit einer Lightweight Erweiterung der UML (durch Profile/Stereotypen) umgesetzt werden sollen, war mein erster Gedanke natürlich, auch das Metamodell des SUM über die Lightweight Extension zu realisieren, so dass das Quell- und Zielmodell der Transformationen im Prinzip das selbe Metamodell haben. Der Lehrstuhl allerdings propagiert die Erstellung eines eigenen KobrA2-Metamodells, so dass letztendlich nur eine Middle- oder Heavyweight Extension der UML in Frage kommt, wenn man die Vorteile der Metamodellierung...

Weiterlesen
Wird geladen