Poslední aktualizace: 29. červen 2004
Tento výukový program je postupný popis procesu vytváření modelu EMF a generování editoru jednoduchých modelů. Při procházení tohoto výukového programu zjistíte, jak jednoduše umožňuje EMF přechod od jednoduché definice modelu k plně funkčnímu editoru pro tento model.
Model, který se bude generovat, vypadá jako tento v UML (popis tohoto modelu viz Přehled Eclipse Modeling Framework):
Bude předvedeno, jakým způsobem lze vygenerovat model EMF z některého ze dvou různých zdrojů: modelu Rational Rose nebo sady anotovaných rozhraní a tříd jazyka Java.
Screenshoty jsou založeny na Eclipse SDK verze 3.0 a EMF verze 2.0.
Krok 0: | Vstupní specifikace |
Krok 1: | Importovat model z Rose, nebo Definovat model pomocí anotovaného prostředí Java |
Krok 2: | Generovat kód modelu EMF |
Krok 3: | Vygenerovat editor pro model |
Krok 4: | Spustit vygenerovaný editor |
Balíček EMF Runtime obsahuje generátor EMF a řadu souvisejících modulů plug-in. Po instalaci balíčku ověřte, zda jsou k dispozici ve vašem prostředí Eclipse:
Další moduly plug-in EMF, které nejsou zvýrazněny výše, nejsou pro tento výukový program vyžadovány. Mohou a nemusí se objevit, podle toho, které balíčky EMF jste nainstalovali.
Soubor Rose pro model knihovny lze nalézt zde: library.mdl. Uložte jej někam na vaši pracovní stanici.
Vytvořte nový projekt EMF v pracovním prostoru:
Namísto importování modelu ze schématu Rose je možno začít sadou rozhraní a tříd prostředí Java, které odpovídají třídám, nebo ve výčtu uvedeným typům v modelu knihovny. Tento kód je pouhé minimum potřebné ke znázornění požadovaných funkcí. Na jeho základě bude sestaven model jádra a model generátoru, které budou poté řídit generování zbývajícího kódu. Kód je anotován pomocí značek "@model" v komentářích dokumentace Javadoc kvůli specifikaci jiných než výchozích hodnot pro atributy a odkazy objektů Ecore.
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; }
Vytvořte nový projekt v jazyce Java v pracovním prostoru:
Vytvořte první rozhraní prostředí Java:
Stejným způsobem vytvořte další dvě rozhraní (Book.java a Writer.java) a třídu (BookCategory.java). Pro vytvoření třídy vyberte z rozevírací nabídky volbu "Nový/Třída", namísto volby "Nový/Rozhraní".
Vytvořte modely EMF:
Model generátoru zobrazuje kořenový objekt, představující celý model. Tento Import má podřízené prvky, které představují jeho balíčky, jejichž podřízené prvky dále představují klasifikátory (třídy a datové typy, včetně ve výčtu uvedených typů). Podřízené prvky tříd jsou atributy tříd, odkazy a operace, podřízené prvky ve výčtu uvedených typů jsou výčtové literály.
Ve většině případů není nutno měnit výchozí hodnoty vlastností, avšak tyto volby mohou poskytovat velký podíl na řízení kódu, který je generován. Toto téma bude plně prozkoumáno v novějších výukových materiálech, v tuto chvíli vyberte několik různých objektů modelu generátoru a sledujte jejich vlastnosti.
Model generátoru je také místo, ve kterém budete zahajovat generování kódu. Klepnutím pravým tlačítkem myši na objekt v modelu je možno vygenerovat kód pro tento objekt.
Po vygenerování budou vytvořena (pokud byl model importován z Rose), nebo dokončena (pokud byl model definován pomocí anotovaného prostředí Java) rozhraní tříd a třída výčtu a bude vytvořena nová dvojice rozhraní pro samotný balíček a pro továrnu. Přibudou také dva nové balíčky s příponami "impl" a "util", které obsahují implementace rozhraní a další obslužné třídy a soubor s manifestem "plugin.xml" pro modul plug-in modelu.
Pokud definujete model pomocí anotovaného prostředí Java, může se zobrazit varování v pohledu problémů: "java.util.List import se nikdy nepoužívá". Toto varování se očekává a nebude vám bránit pokračovat na další krok.
Změněný model je možno regenerovat a změny budou sloučeny s jakýmikoli ručně provedenými úpravami, které jste u kódu provedli. Je možno také selektivně vygenerovat podmnožinu kódu modelu tak, že klepnete pravým tlačítkem myši na balíček, třídu, nebo objekt výčtu a vyberete volbu "Generovat kód modelu" z rozevírací nabídky.
Pro kterýkoli model je možno vygenerovat plně funkční editor Eclipse. Ve výchozím nastavení je rozdělen mezi dva moduly plug-in: modul plug-in pro úpravy obsahuje adaptéry poskytující strukturovaný pohled a provádějící příkazovou úpravu modelových objektů, modul plug-in "editor" poskytuje uživatelské rozhraní pro editor a průvodce.
Obecně platí, že pokud si přejete vygenerovat moduly plug-in modelu, editace a editoru v rámci jednoho kroku, můžete to provést pomocí volby "Vygenerovat vše" v rozevírací nabídce.
Kód by se měl zkompilovat automaticky při svém vygenerování a při každé změně by se měl zkompilovat znovu. Pokud vypnete volbu automatického sestavování v předvolbách pracovní plochy, máte možnost kompilaci zahájit ručně:
Pro otestování nových modulů plug-in musí být spuštěna druhá instance Eclipse s názvem Běhová pracovní plocha. Moduly plug-in poběží na této pracovní ploše.
Nyní je možno použít průvodce modelu Knihovna pro vytvoření nové instance modelu.
Kořenový objekt v tomto editoru odpovídá prostředku My.library. Pod ním leží jednoduchá knihovna, objekt vybraný jako modelový objekt v průvodci.