Créer un métamodèle et générer le code correspondant Le but de ce TP est de vous familiariser avec EMF. Vous allez apprendre à : • Créer un métamodèle UML avec Papyrus • Créer un métamodèle Ecore à partir du métamodèle UML • générer les classes Java à partir d’un métamodèle ECore • utiliser l’éditeur arborescent généré • créer de façon programmatique un modèle correspondant à votre métamodèle Questions – Vérifiez vos connaissances A la fin du TP, vérifiez vos connaissances nouvellement acquises en répondant aux questions suivantes. Vous devez répondre aux questions dans un document électronique à rendre au format .pdf ou .txt. • Comment créer un métamodèle avec Papyrus ? • Comment créer un projet EMF à partir d’un modèle UML ? • Comment générer les classes Java et les éditeurs avec EMF ? • Comment exécuter l’éditeur généré ? • Comment créer une instance de modèle conforme au métamodèle ? • Quel doit être le concept racine de mon modèle ? Créer un métamodèle avec Papyrus Papyrus est un modeleur UML. Il permet de créer graphiquement des modèles UML. Dans ce TP, nous allons nous en servir pour créer nos métamodèles. Pour cela, nous allons nous servir d’un diagramme de classes. Vous allez commencer par créer un métamodèle simple avec Papyrus. Ce Métamodèle servira dans le tutorial d'EMF. Le métamodèle à créer est le suivant : • Lancez Papyrus o Utilisez un nouveau workspace nommé « generateurDoc » o Choisissez de créer un nouveau projet Papyrus, nommez le « pje.library.metamodel ». Nommez le modèle « library ». Papyrus s’ouvre avec un diagramme de classe. Créez en un si il n’y en a pas. Vous pouvez maintenant créer graphiquement quelques métaclasses de votre métamodèle. Pour cela, créez des classes dans le diagramme et vous leur donnez un nom. Tutorial EMF • Faite le tutorial «EMF - Generating an EMF Model” : Help->Help Contents puis EMF Tutorial. o Pour le tutorial, choisissez de charger le model à partir de UML (.uml), puis pointez sur votre métamodèle fait précédemment. Ne faites pas les exemples avec un chargement à partir de Java ou autre. Métamodèle pour le projet Maintenant, vous allez créer votre métamodèle pour votre projet et générer les classes et les éditeurs. Pour cela, créez des classes dans le diagramme et donnez-leur un nom. Contentez-vous de commencer par deux ou trois concepts de base. Vous ajouterez les autres concepts par la suite au fur et à mesure. Nommez votre projet : pje.umldoc/metamodel Créer un projet EMF Une fois le modèle UML créé, nous allons créer le métamodèle Ecore et le générateur EMF (fichier .ecore et .genmodel). Vous pouvez pour cela créer un nouveau projet EMF. Créer un nouveau projet EMF : • new -> project … puis Eclipse Modeling Framework -> EMF Project • • Choisissez d’importer à partir d’UML • • • Recherchez votre modèle xxx.uml (Browse File System …) Gardez les options Choisissez le package racine de votre modele (umldoc) Vous devez maintenant avoir un fichier .ecore et un fichier .genmodel correspondant à votre métamodèle. Ouvrez le .genmodel et comparez le au modèle UML. Que sont devenu vos classes ? Générer les classes Java pour le métamodèle A partir du .genmodel, il est possible de générer : • des classes Java pour manipuler des modèles conforme à notre métamodèle • un éditeur arborescent pour créer graphiquement des modèles Pour • • • cela, il faut générer les classes Java et les éditeurs : ouvrez le .genmodel selectionnez la racine menu contextuel -> Generate All Les classes et les éditeurs sont générés. Tester l’éditeur arborescent généré Pour savoir comment tester les éditeurs, vous pouvez aussi vous référer au tutorial EMF. Testez les classes et l’éditeur généré. Vous devez lancer un deuxième Eclipse qui servira d’environnement de tests : Run -> Run As -> Eclipse Application Vous pouvez aussi cliquer sur la flèche noir à coté de cette icône , puis Run As -> Eclipse Application Dans l’Eclipse de test, créez un projet « test », new project -> general -> project . Puis créez un modèle en utilisant le wizard adéquat (cherchez le !) Enrichir son métamodèle Vous pouvez modifier votre métamodèle pour ajouter de nouveaux concepts (Property, Method, …). Une fois fait, il faut recharger le métamodèle Ecore et régénérer les classes et éditeurs : • modifiez votre métamodèle • Allez dans le projet contenant votre .genmodel et selectionnez-le • • menu contextuel->Reload Model … puis recommencez les étapes de générations de code et de teste de l’éditeur arborescent. Créer un modèle de façon programmatique Un modèle peut aussi être créé, sauvé et chargé à l’aide d’un programme Java. La documentation EMF (Help -> Help Content -> EMF Programmer’s Guide -> EMF Framework Programmer’s Guide) donne des exemples de code pour charger et sauver un modèle à l’aide des classes Java générées. Créez une classe executable (i.e. avec une méthode main() ) javagen.metamodel.tests.TestProg.java. Dans cette classe : • Créez un mjava.package contenant une mjava.class • Sauvez le modèle dans un fichier xml • Chargez le modèle