Modellgetriebene Softwareentwicklung Projektseminar H. Fritzsche
Was muss installiert werden? Idee der SF Grafik Was muss installiert werden? H. Fritzsche
Idee der SF Das zu entwickelnde Metamodell ist Ecore-basiert und wird von Ecore abgeleitet (Es gibt grundsätzlich zwei Möglichkeiten: - Ecore oder - UML2 + Profile GMF ist auf EMF-Metamodelle ausgerichtet (Editorerstellung) Zieltechnologien (Plattformen, Frameworks) sollen für konkretes Projekt individuell auswählbar sein Cartridges H. Fritzsche
H. Fritzsche
Der Kern steuert die Ausführung der Cartridge Modell wird an Cartridge übergeben H. Fritzsche
H. Fritzsche
Was muss installiert werden? Arbeit mit Eclipse Galileo, die Factory wird in Eclipse installiert Aufnahme EMF in Eclipse-Umgebung (features, plugins) Neues EMF-Projekt kreieren (SF-Student) Erweiterung um Cartridges durch ein Plug-in-Projekt Definition eigener Erweiterungspunkte H. Fritzsche
Das nachfolgende Beispiel für ein EMF-Projekt entspricht genau dem Tutorial. Es umfasst folgende Schritte: Step 0: Vorbereitungen Step 1: (Import the Model from Rose or) Define the Model Using Annotated Java Step 2: Generate the EMF Model Code Step 3: Generate an Editor for the Model Step 4: Run the Generated Editor H. Fritzsche
STEP 1: Define the Model Using Annotated Java Neues EMF-Projekt kreieren: H. Fritzsche
Es wird folgendes erzeugt: Jetzt wird src „von Hand“ gefüllt. einzeln, immer beginnend beim Kontextmenü von src: H. Fritzsche
Jetzt wird das EMF-Modell erzeugt: Hier ist ein Unterschied zum Tutorial Die Rubrik „EMF Model“ gibt Es nicht, statt dessen „EMF Generator Model“ (hat keine weiteren Auswirkungen) H. Fritzsche
Weiter bei STEP 2: H. Fritzsche
Ecore: H. Fritzsche
H. Fritzsche
STEP 2: Generate the EMF Model Code H. Fritzsche
Das generierte Modell zum EMF-Projekt: H. Fritzsche
ecore-Modell library.ecore und eine Generatormodell library.genmodel ► Ein ecore-Modell library.ecore und eine Generatormodell library.genmodel wurden erzeugt. Beide Modelle sind xml-Dateien. library ist der Package-Name. Das Generatormodell steuert die Codeerzeugung. H. Fritzsche
<?xml version="1.0" encoding="UTF-8"?> <ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="library" nsURI="http:///org/eclipse/example/library.ecore" nsPrefix="org.eclipse.example.library"> <eClassifiers xsi:type="ecore:EClass" name="Book"> <eStructuralFeatures xsi:type="ecore:EAttribute" name="title" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> <eStructuralFeatures xsi:type="ecore:EAttribute" name="pages" http://www.eclipse.org/emf/2002/Ecore#//EInt" defaultValueLiteral="100"/> <eStructuralFeatures xsi:type="ecore:EAttribute" name="category" eType="#//BookCategory"/> <eStructuralFeatures xsi:type="ecore:EReference" name="author" eType="#//Writer" eOpposite="#//Writer/books"/> </eClassifiers> H. Fritzsche
<eClassifiers xsi:type="ecore:EEnum" name="BookCategory"> <eLiterals name="Mystery"/> <eLiterals name="ScienceFiction" value="1"/> <eLiterals name="Biography" value="2"/> </eClassifiers> H. Fritzsche
<eClassifiers xsi:type="ecore:EClass" name="Library"> <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> <eStructuralFeatures xsi:type="ecore:EReference" name="writers" upperBound="-1" eType="#//Writer" containment="true" resolveProxies="false"/> name="books" upperBound="-1" eType="#//Book" containment="true" resolveProxies="false"/> </eClassifiers> H. Fritzsche
<eClassifiers xsi:type="ecore:EClass" name="Writer"> <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> <eStructuralFeatures xsi:type="ecore:EReference" name="books" upperBound="-1" eType="#//Book" eOpposite="#//Book/author"/> </eClassifiers> </ecore:EPackage> H. Fritzsche
STEP 3: Generate an Editor for the Model Nach der Generierung sollen die Klassen-Interfaces und die enum class erzeugt sein and a new pair of interfaces will have been created for the package itself and for the factory. 2 neue packages, with "impl" and "util" suffixes, which contain implementations of the interfaces and additional utility classes, and both types of manifest files for the model plug-in: "plugin.xml" and "MANIFEST.MF". H. Fritzsche
Code- Generierung beginnt beim Generatormodell Über Kontextmenü H. Fritzsche
Das Edit-plugin enthält Adapter Das Editor-plugin Enthält einen Editor H. Fritzsche
STEP 4: Run the Generated Editor ► Um die neuen Plugins zu testen, muss eine zweite Eclipse-Instanz gestartet werden. Select one of the projects and then choose "Run As/Eclipse Application" from the "Run" menu or toolbar drop-down. H. Fritzsche
H. Fritzsche
Eine Fehlerursache sind die fehlenden Dependencies : H. Fritzsche
H. Fritzsche