Utolsó frissítés: 2007. június 18.
Ez az ismertető részletesen leírja, hogy hogyan hozhat létre EMF modellt, és hogyan állíthat elő hozzá egy egyszerű modellszerkesztőt. Az ismertető az alábbiakban bemutatja, hogy az EMF használatával milyen könnyen eljuthat egy egyszerű modellből egy teljes funkcionalitással rendelkező szerkesztőig az adott modellhez.
Az előállítandó modell így néz ki UML-ben (a modell leírását lásd: Eclipse Modeling Framework áttekintése):
Bemutatjuk, hogy hogyan lehet EMF modellt előállítani két forrás valamelyikéből: Rational Rose modellből vagy annotált Java felületek és osztályok készletéből.
A képernyőképek az Eclipse SDK 3.3.0 RC4 változatán és az EMF 2.3.0 RC3 változatán alapulnak.
| 0. lépés: | Előfeltételek |
| 1. lépés: | A modell importálása a Rose eszközből vagy A modell meghatározása annotált Java használatával |
| 2. lépés: | Az EMF modell kódjának előállítása |
| 3. lépés: | Szerkesztő előállítása a modellhez |
| 4. lépés: | Az előállított szerkesztő futtatása |
Az EMF futtató csomag tartalmazza az EMF előállítót és számos kapcsolódó bedolgozót. A csomag telepítése után ellenőrizze, hogy ezek elérhetőek az Eclipse környezetben:



Jelen ismertetőhöz nem szükségesek további EMF bedolgozók. Lehet, hogy megjelennek, lehet, hogy nem, attól függően, hogy mely EMF csomagokat telepítette.
A library modell Rose fájlja itt található: library.mdl. Mentse valahová a munkaállomásra.
Hozzon létre egy új EMF projektet a munkaterületen:








Ahelyett, hogy egy Rose diagramból importálnánk a modellt, kiindulhatunk olyan Java felületek és osztályok készletéből, amelyek értelemszerűen megfelelnek a library modell osztályainak és felsorolt típusainak. Minimálisan ez a kód szükséges a kívánt szolgáltatások bemutatásához. Ez alapján összeállításra kerül egy Ecore modell és egy előállító modell, ami aztán vezérli a többi kód előállítását. A kód "@model" címke annotációkkal van ellátva Javadoc megjegyzésekben, hogy megadhasson az alapértelmezettől eltérő értékeket az Ecore objektumok attribútumainak és hivatkozásainak.
Az EMF 2.3 változatától kezdve lehetősége van Java 5.0 általános típusokkal és felsorolásokkal meghatározni az annotált Java felületeket. Mindkét megközelítést bemutatjuk a megfelelő helyen. A Java 5.0 használatához győződjön meg róla, hogy az Eclipse "Java/Fordító/Fordító megfelelőségi szintje" értéke "5.0" vagy magasabb értékre van állítva.

A library modellt leíró felületek:
Library.java (Java 1.4)
package org.eclipse.example.library; import java.util.List; /** * @model */ public interface Library { /** * @model */ String getName(); /** * @model type="Writer" containment="true" */ List getWriters(); /** * @model type="Book" containment="true" */ List getBooks(); }Library.java (Java 5.0)
package org.eclipse.example.library; import java.util.List; /** * @model */ public interface Library { /** * @model */ String getName(); /** * @model containment="true" */ List<Writer> getWriters(); /** * @model containment="true" */ List<Book> getBooks(); }Book.java
package org.eclipse.example.library; /** * @model */ public interface Book { /** * @model */ String getTitle(); /** * @model default="100" */ int getPages(); /** * @model */ BookCategory getCategory(); /** * @model opposite="books" */ Writer getAuthor(); }Writer.java (Java 1.4)
package org.eclipse.example.library; /** * @model */ public interface Writer { /** * @model */ String getName(); /** * @model type="Book" opposite="author" */ java.util.List getBooks(); }Writer.java (Java 5.0)
package org.eclipse.example.library; /** * @model */ public interface Writer { /** * @model */ String getName(); /** * @model opposite="author" */ java.util.List<Book> getBooks(); }BookCategory.java (Java 1.4)
package org.eclipse.example.library; /** * @model */ public class BookCategory { /** * @model name="Mystery" */ public static final int MYSTERY = 0; /** * @model name="ScienceFiction" */ public static final int SCIENCE_FICTION = 1; /** * @model name="Biography" */ public static final int BIOGRAPHY = 2; }BookCategory.java (Java 5.0)
package org.eclipse.example.library; /** * @model */ public enum BookCategory { /** * @model name="Mystery" */ MYSTERY, /** * @model name="ScienceFiction" */ SCIENCE_FICTION, /** * @model name="Biography" */ BIOGRAPHY; }
Hozzon létre egy új, üres EMF projektet a munkaterületen:




Hozza létre az első Java felületet:




Ugyanígy hozza létre a másik két felületet (Book.java és Writer.java) és az osztályt (BookCategory.java). Az osztály létrehozásakor természetesen az "Új/Osztály" menüpontot kell választani az előugró menüből az "Új/Felület" helyett.






Az előállító modellben van egy gyökér objektum, amely a teljes modellt képviseli. Ennek a modellnek vannak utódai, amelyek a csomagjait képviselik, azok utódai pedig a minősítőket (osztályokat és adattípusokat, beleértve a felsorolt típusokat). Az osztályok utódai az osztályattribútumok, hivatkozások és műveletek; a felsorolt típusok utódai a felsorolás literálok.



A legtöbb esetben nincs szükség a tulajdonságok módosítására azok alapértelmezett értékéről, de ezekkel a beállításokkal nagy mértékben befolyásolhatja, hogy milyen legyen az előállított kód. Külön említést érdemel a "Megfelelési szint" beállítás, ami a második a fenti képen. Ha azt választotta, hogy kihasználja a Java 5.0 által bevezetett új szerkezeteket az annotált Java felületeken, vagy olyan kódot akar előállítani, ami általános típusokat használ, akkor ez a beállítás "5.0" vagy magasabb értékű legyen. A kezdeti érték a fordító megfelelési szint tulajdonsága, amelyet fentebb, a 0. lépésben mutattunk be.
Az előállító modell az a hely is, ahol kezdeményezi a kódelőállítást. Ha rákattint a jobb egérgombbal egy objektumra a modellben, akkor előállíthatja a hozzá tartozó kódot.


Az előállítás eredményeképp létrehozásra (amennyiben a modell a Rose eszközből lett importálva), illetve kiegészítésre (amennyiben a modell annotált Java használatával lett meghatározva) kerültek az osztály felületek és a felsorolás osztály, valamint létrehozásra került egy új felületpár magához a csomaghoz és a gyárhoz. Van két új csomag is, "impl" és "util" utótaggal. Ezek tartalmazzák a felületek és további segédprogram osztályok megvalósítását, valamint mindkét típusú leírófájlt a modell bedolgozóhoz: "plugin.xml" és "MANIFEST.MF".
Ha annotált Java használatával határozta meg a modellt, akkor lehet, hogy figyelmeztetés jelenik meg a Problémák nézetben: "A java.util.List import sosem kerül felhasználásra". A figyelmeztetés elvárt, és nem akadályozza meg, hogy folytassa a következő lépéssel.
Ha módosítja a modellt, akkor utána újra előállíthatja, a változások össze lesznek vonva a kódon korábban kézzel végrehajtott módosításokkal. Megteheti azt is, hogy szelektíven állítja elő a modell egy részhalmazát. Ehhez kattintson a jobb egérgombbal egy csomag, osztály vagy felsorolás objektumra, majd válassza az előugró menü "Modell kódjának előállítása" menüpontját.
Bármely modellhez előállíthat egy teljesen működőképes Eclipse szerkesztőt is. Ez alapértelmezésben két bedolgozóra van osztva: a "szerkesztés" bedolgozó olyan illesztőket tartalmaz, amelyek strukturált megjelenítést biztosítanak és a modell objektumainak parancs alapú szerkesztését végzik, a "szerkesztő" bedolgozó pedig a szerkesztő és a varázsló felhasználói felületét biztosítja.



Általánosságban, ha egyetlen lépésben akarja előállítani a modell, szerkesztés és szerkesztő bedolgozót, akkor válassza az előugró menü "Összes előállítása" menüpontját.
Ez egy teszt bedolgozót is létrehoz, amelyben előállított JUnit teszt vázak vannak a változékony szolgáltatások és a modellben meghatározott műveletek gyakorlásához. Ez a modell nem tartalmaz ilyeneket, de általában Önnek kell kitöltenie ezeknek a teszteknek a törzsét. A teszt bedolgozó egy egyszerű példa osztályt is tartalmaz, amely bemutatja a modell betöltését és érvényesítését egy önálló alkalmazásban.
A kódot automatikusan le kell fordítani az előállításkor, és újra le kell fordítani, valahányszor megváltozik. Ha letiltotta az automatikus összeépítést a munkaterület beállításaiban, akkor kézileg kell kezdeményeznie a fordítást.




Az új bedolgozók teszteléséhez el kell indítani egy második Eclipse példányt. A bedolgozók ezen a munkaterületen fognak futni.


Most már létrehozhatja a modell új példányát a Library modell varázslóval.








A szerkesztőben látható gyökér objektum a My.library erőforrásnak felel meg. Alatta egyetlen könyvtár van, az az objektum, amelyet modellobjektumként választott a varázslóban.







