Poslední aktualizace: 31. května 2006
Tento výukový program je pokračováním Generování modelu EMF, ve kterém je generován jednoduchý model knihovny. V tomto výukovém programu bylo znázorněno, jak je možno jednoduchým způsobem vygenerovat model EMF z modelu Rose nebo sady souborů rozhraní jazyka Java. V tomto výukovém programu bude předvedeno, jakým způsobem vygenerovat model EMF, který rozšiřuje model stávající.
Nejdříve návrat k modelu knihovny:
Nyní bude tento model knihovny rozšířen vytvořením nového balíku, školní knihovny. Tento balík obsahuje tři třídy, přičemž dvě z nich rozšiřují třídy v modelu knihovny:
Tento výukový program postupně předvede, jakým způsobem vygenerovat model EMF tohoto balíku školní knihovny, pomocí modelu knihovny, který jste již vytvořili. Jako u předchozího výukového programu bude předvedeno vytvoření tohoto nového modelu z modelu Rose a ze sady rozhraní jazyka Java.
Snímky obrazovky jsou založeny na Eclipse SDK verze 3.2.0 RC6 a EMF verze 2.2.0 RC6a.
| Krok 1: | Importovat model z Rose, nebo Definovat model pomocí anotovaného prostředí Java |
| Krok 2: | Generovat model EMF a kód editoru |
| Krok 3: | Spustit vygenerovaný editor |
| Krok 4: | Upravit editor |
| Příloha: | Alternativní způsob generování modelu |
Model knihovny a editor byly vygenerovány v předchozím výukovém programu, Generování modelu EMF.

Pokud tyto balíky nejsou uvedeny, budete nuceni projít předchozí výukový program nebo si přečíst Dodatek obsahující informace o tom, jak vytvořit oba modely najednou.
Uložte soubor modelu Rose schoollibrary.mdl někam na vaši pracovní stanici. Soubor obsahuje balíky knihovny a školní knihovny.
Při sdílení balíků mezi různými modely by se měl každý balík umístit do samostatného souboru .cat a odkaz na něj by měl být v souboru .mdl. Nicméně pro účely tohoto výukového programu byl duplikován a rozšířen balík knihovny v jednom modelovém souboru. Generátor se chová stejně, ať jsou balíky obsaženy v jednom souboru .mdl, nebo se na ně odkazuje v externích souborech .cat.
Vytvořte nový projekt EMF v pracovním prostoru:









Zde se nacházejí anotovaná rozhraní Java pro balík školní knihovny. Je možno generovat model EMF z těchto souborů rozhraní namísto modelu Rose.
SchoolLibrary.java
package org.eclipse.example.schoollibrary; import org.eclipse.example.library.Library; /** * @model */ public interface SchoolLibrary extends Library { /** * @model */ String getLocation(); }
Asset.java
package org.eclipse.example.schoollibrary; /** * @model */ public interface Asset { /** * @model */ float getValue(); }
SchoolBook.java
package org.eclipse.example.schoollibrary; import org.eclipse.example.library.Book; /** * @model */ public interface SchoolBook extends Book, Asset { }
Vytvořte nový prázdný projekt EMF v pracovním prostoru:



Přidejte závislost modulů plug-in v existujícím projektu knihovny:




Je možno vytvořit a zapsat rozhraní jako v předchozím výukovém programu, avšak namísto toho, bude znázorněno, jakým způsobem se mohou importovat ze souboru schoollibrary.zip. Uložte tento soubor někde na pracovní stanici nebo v jiném prázdném projektu ve vašem pracovním prostoru.




Vytvořit model EMF:






Model generátoru zobrazuje kořenový objekt, představující celý model. Podřízené prvky tohoto modelového objektu představují balíky v modelu.



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, nezapomeňte provést nové sestavení kódu při každé jeho změně.
Pro otestování nových modulů plug-in musí být spuštěna druhá instance Eclipse. Moduly plug-in poběží na této pracovní ploše.


Nyní je možno použít průvodce modelu školní knihovny pro vytvoření nové instance modelu.






Kořenový objekt v tomto editoru odpovídá prostředku My.schoollibrary. Všimněte si, že objekt pod ním je opravdu školní knihovna.





Ukončete druhou instanci platformy Eclipse s návratem na původní pracovní plochu pro vývoj.
Tato část výukového programu předvede, jakým způsobem se má upravit generovaný kód. Mění se pouze jmenovka v generovaném editoru, avšak zde bude tento postup proveden poněkud odlišným názorným způsobem.
Nejdříve se provedou změny v modelu generátoru, které ovlivní generovaný kód.


Následující tabulka shrnuje soubory, které byly vygenerovány položkami "Vygenerovat modelový kód", "Generovat kód úprav" a "Generovat kód editoru" a "Generovat kód testů" v kontextově citlivých nabídkách různých objektů. Položka nabídky "Vygenerovat vše" odpovídá výběru všech tří položek nabídky.
| Generovat kód modelu | Generovat editační kód | Generovat kód editoru | Generovat kód testu | |
| Model <M> |
MANIFEST.MF build.properties plugin.properties plugin.xml <M>Plugin.java * ...plus soubory pro každý balík |
MANIFEST.MF build.properties plugin.properties plugin.xml <M>EditPlugin.java ...plus soubory pro každý balík |
MANIFEST.MF build.properties plugin.properties plugin.xml <M>EditorPlugin.java <M>EditorAdvisor.java * ...plus soubory pro každý balík |
MANIFEST.MF build.properties plugin.properties plugin.xml <M>AllTests.java ...plus soubory pro každý balík |
| Balík <P> |
<P>Package.java <P>PackageImpl.java <P>Factory.java <P>FactoryImpl.java <P>Switch.java <P>AdaptorFactory.java <P>ResourceImpl.java * <P>ResourceFactoryImpl.java * <P>Validator.java * <P>XMLProcessor.java * ...plus soubory pro každou třídu a výčet a pro model |
<P>ItemProviderAdaptorFactory.java ...plus soubory pro každou třídu a pro model |
<P>Editor.java <P>ModelWizard.java <P>ActionBarContributor.java ...plus soubory pro model |
<P>Tests.java <P>Example.java ...plus soubory pro každou třídu a pro model |
| Třída <C> |
<C>.java <C>Impl.java ...plus soubory pro balík |
<C>ItemProvider.java ...plus soubory pro balík |
<C>Test.java ...plus soubory pro balík |
|
| Výčet <E> |
<E>.java ...plus soubory pro balík |
* Tyto soubory nejsou ve výchozím nastavení vygenerovány.
Nyní je možno otestovat provedenou změnu.

Předpokládejte, že si nepřejete mít předponu "Školní knihovny" ve jmenovce a chcete se jí zbavit. Jediným způsobem, jak to provést, je upravit kód, avšak jedná se o jednoduchou změnu.
Jak je popsáno v přehledu EMF.Edit Framework, EMF.Edit používá poskytovatele položek mimo jiné k určování, která jmenovka se má pro daný typ objektu zobrazit. Především se jedná o metodu getText(), která tuto operaci provádí a kterou je nutno změnit.





Byla změněna implementace metody getText() z původně vygenerované. Vlastnost funkce jmenovky na třídě školní knihovny v modelu generátoru nemá již žádný vliv na vygenerovaný kód. Je tomu tak proto, že byla odebrána značka @generated dokumentace Javadoc, která brání v přepsání této metody během generování kódu.
Nyní předpokládejte, že jste se dosud nerozhodli, zda by měl editor zobrazit hodnotu atributu umístění, nebo atributu názvu. Místo toho chcete, abyste později měli možnost měnit atributy prostřednictvím modelu generátoru. Nicméně, nepřejete si zobrazit předponu "školní knihovny". V podstatě si přejete zachovat vygenerovanou implementaci tak, aby byla k dispozici pro použití metodou ručního kódování, která odebírá předponu ze všech výsledků, které vrací. Nová metoda se musí nazývat "getText()", proto je třeba vygenerovanou metodu přejmenovat.
Naštěstí generátor kódu EMF podporuje tuto funkci: pokud by se metoda, kterou se chystá vygenerovat, dostala do konfliktu s metodou, která nemá značku @generated, vyhledá metodu se stejným názvem plus příponou "Gen". Pokud metoda existuje a je opatřena značkou "@generated", implementace bude namísto toho vygenerována do této metody.



Je možno se vrátit zpět k modelu generátoru, změnit vlastnost funkce jmenovky, regenerovat kód a ověřit, zda to opravdu ovlivňuje vygenerovaný kód.
Pokud již základní model knihovny nemá svůj editor vygenerovaný v oddělených projektech, máte možnost najednou vygenerovat modely knihovny a školní knihovny do stejné sady projektů. Je možné to provést z modelu Rose, nebo sady anotovaných rozhraní Java.
Počínaje modelem Rose je proces stejný, jak bylo popsáno výše, s výjimkou toho, že jsou oba balíky vybrány pro generování kódu.

Počínaje anotovanými rozhraními jazyka Java jsou oba balíky importovány do jednoho prázdného projektu EMF před jakýmkoli generováním kódu.

Pokud spustíte běhovou pracovní plochu pro otestování nového editoru, můžete si všimnout jedné malé odlišnosti v editoru pro model knihovny v porovnání se samostatným generováním z modelu školní knihovny.

Všimněte si, že jsou k dispozici tři typy podřízených prvků, přičemž v předchozím výukovém programu byly pouze dva typy. Konkrétně je přidán typ"Učebnice", který pochází z balíku školní knihovny. Předtím o tom generátor kódu během generování poskytovatele položek pro knihovnu nevěděl. Nyní, protože byly společně vygenerovány dva balíky, základní balík ví vše o balíku, který ho rozšiřuje.