EMF-modell készítése

Utolsó frissítés: 2004. június 29.

Ez az ismertető részletesen leírja EMF-modellek létrehozásának és egyszerű modellszerkesztők előállításának folyamatát. Az ismertető demonstrálja, hogy az EMF segítségével milyen könnyű eljutni egy egyszerű modelldefiníciótól a modell teljesen funkcionális szerkesztőjéig.

Az előállítandó modell az UML nyelvben így fest (a modell leírását Az Eclipse Modeling Framework áttekintése című dokumentum tartalmazza):

Könyvtár UML- modellje

Megmutatjuk, hogy az EMF-modellt hogyan lehet két különböző forrásból előállítani: Rational Rose modellből, illetve jegyzetekkel ellátott Java-felületek és osztályok készletéből.

A képernyőfelvételek az Eclipse SDK 3.0 verziója és az EMF 2.0 verziója alapján készültek.


Tartalom

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 jegyzetekkel ellátott Java segítségével
2. lépés: Az EMF-modell kódjának előállítása
3. lépés: A modell szerkesztőjének előállítása
4. lépés: Az előállított szerkesztő futtatása


 tartalom

0. lépés: Előfeltételek

Az EMF futtató csomagja tartalmazza az EMF-generátort és a kapcsolódó bedolgozókat. A csomag telepítését követően bizonyosodjon meg arról, hogy ezek az Eclipse környezetben rendelkezésre állnak:

Az ismertetőhöz a fent nem kiemelt bedolgozók nem szükségesek. További bedolgozók megjelenhetnek a listán attól függően, hogy melyik EMF-csomagot telepítette.


 tartalom

1.a lépés: A modell importálása a Rose eszközből

A könyvtármodell Rose-fájl itt található: library.mdl. Mentse ezt a fájlt a munkaállomásán.

Hozzon létre egy új EMF-projektet a munkaterületen:


 tartalom

1.b lépés: A modell meghatározása jegyzetekkel ellátott Java segítségével

A modell Rose eszközből történő importálása helyett olyan Java felületek és osztályok készletével is el lehet kezdeni a munkát, melyek értelemszerűen megfelelnek a könyvtármodell osztályainak és számba vett típusainak. A szükséges jellemzők szemléltetéséhez ez a legminimálisabb mennyiségű kód. A rendszer ennek alapján összeállítja a törzsmodellt és a generátormodellt, melyek a hátralévő kód előállításának kiindulópontjai. A kód "@model" címkéket kap a Javadoc megjegyzés mezőiben, mely lehetővé teszi, hogy az Ecore objektumok attribútumaira és hivatkozásaira az alapértelmezéstől eltérő értékeket adjon meg.

Library.java 
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();
}
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 
package org.eclipse.example.library;

/**
 * @model
 */
public interface Writer
{
  /**
   * @model
   */
  String getName();

  /**
   * @model type="Book" opposite="author"
   */
  java.util.List getBooks();
}
BookCategory.java 
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;
}

Hozzon létre egy új Java-projektet a munkaterületen:

Az első Java-felület létrehozása:

Hozza létre a másik két felületet (Book.java és Writer.java) és az osztályt (BookCategory.java) ugyanezzel a módszerrel. Az osztály létrehozásához természetesen az előugró menü "Új/Osztály" menüpontját kell választani az "Új/Felület" menüpont helyett.

Hozza létre az EMF-modelleket:


 tartalom

2. lépés: Az EMF-modell kódjának előállítása

A generátormodell főobjektuma az egész modellt képviseli. A modell utódai a csomagokat képviselik, melynek leszármazottai az osztályozók (osztályok ás adattípusok, beleértve a felsorolási típusokat is). Az osztályok utódai az osztályattribútumok, hivatkozások és műveletek; a felsorolási típusok leszármazottai pedig az "enum" literálok.

A legtöbb esetben a tulajdonságok alapértékeit nem kell módosítani, de ez a lehetőség nagyfokú szabadságot biztosít a kód előállítása tekintetében. Ezt a témakört későbbi ismertetőkben vizsgáljuk majd meg részletesebben; most csak jelöljön ki különféle generátormodell objektumokat és vizsgálja meg azok tulajdonságait.

A kód előállítását a generátormodellben lehet kezdeményezni. Ezt a modell bármely objektumán, jobb egérgombbal történő kattintással lehet elérni.

Az előállítást követően a rendszer - ha a modell a Rose eszközből került importálásra - létrehozza, illetve - amennyiben a modell jegyzetekkel ellátott Java nyelvben volt megadva - befejezi az osztályfelületeket és az "enum" osztályt, és készít egy új felületpárt a csomaghoz és a gyárhoz. Ezen túlmenően még két új, a felületek és kiegészítő segédprogramok megvalósítását tartalmazó csomag ("impl" és "util" utótaggal), valamint a modell bedolgozójához szükséges "plugin.xml" leírófájl is létrejön.

Ha a modell jegyzetekkel allátott Java-nyelvben van megadva, akkor a Problémák nézetben megjelenhet a következő figyelmeztetés: "A java.util.List import nincs használatban". Ez a figyelmeztetés nem rendellenes, és a továbbhaladást nem akadályozza meg.

Amennyiben módosítja a modellt, akkor azt bármikor ismételten elő lehet állítani, és a módosításokat a rendszer összefésüli a kódban esetlegesen megtett változtatásokkal. Arra is van lehetőség, hogy a modellkódnak csak egy részhalmazát állítsa elő: ehhez kattintson a jobb egérgombbal egycsomagra, osztályra vagy "enum" objektumra, majd válassza az előugró menü "Modellkód előállítása" menüpontját.


 tartalom

3. lépés: A modell szerkesztőjének előállítása

Bármelyik modellből elő lehet állítani egy teljesen funkcionális Eclipse szerkesztőt. Alapértelmezésben a szerkesztő két bedolgozóból áll: a "szerkesztés" bedolgozó tartalmazza azokat az illesztőket, amelyek biztosítják a strukturált nézetet és végrehajtják a parancsalapú szerkesztést, a "szerkesztő" bedolgozó pedig a felhasználói felületet biztosítja a szerkesztő és a varázsló számára.

Amennyiben a modellt, valamint a szerkesztés és szerkesztő bedolgozóit egyetlen lépésben szeretné előállítani, ezt általában az előugró menü "Valamennyi előállítása" menüpontjának kiválasztásával érheti el.

A kódot a rendszer az előállítást követően automatikusan fordítja és - változás esetén - újrafordítja. Ha az automatikus felépítést a munkaterület beállításaiban letiltotta, a fordítást saját kezűleg kell elindítania:


 tartalom

4. lépés: Az előállított szerkesztő futtatása

Az új bedolgozók teszteléséhez az Eclipse egy másodpéldányát, az úgynevezett futtató munkaterületet kell elindítani. A bedolgozók ezen a munkaterületen fognak futni.

A könyvtármodell varázslója segítségével most létre lehet hozni a modell új példányát.

A szerkesztőben a főobjektum a "My.library" erőforrásnak felel meg. Alatta egyetlen könyvtár található: a varázslóban modellobjektumként kijelölt objektum.


tartalom