labsticc.univ-brest.fr/pages_perso/babau/ Ingénierie Dirigée par les Modèles Editeurs de modèles (Eclipse Modeling Tools) Jean-Philippe Babau Département Informatique, UFR Sciences, Laboratoire Lab-STICC 2 1
Modèles et méta-modèles Introduction aux modèles C est quoi un modèle? Ca sert à quoi de faire des modèles? Comment on fait des modèles? Outils de modélisation et de méta-modélisation Editeurs de modèles (EMF, GMF, Xtext) Expression et évaluation de contraintes (OCL) Transformation de modèles (M2M, M2T) 3 Eclipse Modeling Tools Méta-modélisation et édition de modèles avec EMF Basé sur Ecore Créer un projet EMF Générer le code filename.genmodel Accès à l édition graphique de modèles GEF et GMF, ObeoDesigner Accès à l édition textuelle de modèles EMFText, XText 4 2
Obeo Designer Basé sur EMF Facilités de modélisation graphique Nombreuses possibilités Mises au point et tests rapides Plusieurs vues possibles Génération de code possible http://www.obeodesigner.com/ 5 GMF : principes Basé sur EMF et Java Un modèle ecore et un générateur de code genmodel Plusieurs aspects : plusieurs modèles Aspects graphique : filename.gmfgraph Aspects outils : filename.gmftool Lien entre modèle, graphique et outils : filename.gmfmap Générateur d éditeur graphique : filename.gmfgen Editeur graphique Génération d un projet modelname.diagram Aide à la création des modèles : DashBoard 6 3
GMF principes La EClass racine n est pas représentée On édite directement les éléments «à l intérieur» de la EClass racine C est «le fond» de l éditeur On a accès aux attributs de la EClass racine via les propriétés Il faut prévoir une EClass racine On ne dessine que les éléments contenus dans la EClass racine Un seul niveau dans une fenêtre Possibilités de définir des éditeurs en cascade Pour éditer des entités contenues dans des entités Une vue, et donc un éditeur, par entité contenue Plusieurs niveaux : plusieurs fenêtres et plusieurs éditeurs 7 GMF graph Aspect graphique Fichier filename.gmfgraph Structure Galerie de figures Ensemble des figures à représenter Nœuds et connexions Ensemble des entités et des liens à représenter Labels Ensemble des textes à afficher Compartiments Ensemble des regroupements 8 4
Forme graphique : un polygone ajouter un Template Point child node x=0, y=0 ajouter 7 Template Point node x=40, y=0 x=40, y=30 x=30, y=30 x=30, y=40 x=40, y=30 x=30, y=40 x=0, y=40 9 Les labels Centrer un label Sélectionner la figure New Child / Grid Layout (true, 1) Dans la figure, sélectionner le label New Child / Grid Layout Data (true, true, CENTER,0,1,CENTER,1) Positionner un label sur une connection Sélectionner le Diagram Label New Child / Alignment facet CENTER : au milieu New Child / Label Offset facet X et Y : positions relatives 10 5
GMF tool, map Aspect outils filename.gmftool, filename.gmfmap, filename.gmfgen Tool : Palette Création d éléments Map : lien graphique, modèle et outil Génération de filename.gmfgen Dashboard A n'utiliser qu'une seule fois au départ pour initialiser les modèles 11 GMF gen gmfgen model Modèle d entrée du générateur d éfiteur graphique Généré par gmfmap Peut être modifié et adapté Possibilité de modification du code Java généré @generated NOT Exemple d une initialisation de diagramme http://gmfsamples.tuxfamily.org/wiki/doku.php?id=gmf_tutorial7 12 6
Taille des éléments Contraindre une taille constante Dans le fichier MM.gmfgraph Dans le descripteur de figure figurename Sélection de la figure New Child / Preferred Size Dimension Initialisation des dimensions en X et Y Dans le fichier MM.gmfgen Gen Top Level Node NodeName / Inner Class Viewmap figurename New Child / Resize Constraints 13 Attributs et icones Masquer un attribut PropertyName de l onglet properties Dans le projet MM.edit Fichier EClassItemProvider.java Dans la méthode getpropertydescriptors(object object) Mettre en commentaire // addpropertynamepropertydescriptor(object); Ne pas modifier un attribut via l interface graphique Dans le fichier MM.gmfmap Sélectionner le Feature Label Mapping correspondant Positionner Read Only à true Ne pas afficher d icône sur le champ à modifier Dans le fichier MM.gmfgraph Sélectionner le Diagram Label champ correspondant Positionner Element Icon à false 14 7
Éditeurs en cascade Création du deuxième éditeur Création d un deuxième fichier xx.genmodel Changer le champ Model Name xx Création des fichiers GMF xx.gmfgraph, xx.gmftool et xx.gmfmap Sélection du même fichier ecore pour xx.gmfmap xx.gmfgen Création à l aide de xx.gmfmap et xx.genmodel Adapter les noms de projet et autres notations Gen Editor Generator xx.diagram Package Name Prefix xx.diagram Gen Plugin xx Plugin ID xx.diagram Domain File et Diagram File extension 15 Éditeurs en cascade Paramétrage du 1 er éditeur Dans Gen Top Level Node xxeditpart New Child / Open Diagram Behaviour Sélection de Open Diagram Behaviour OpenDiagramEditPolicy Diagram Kind : placer le champ Model ID qui se trouve dans Gen Editor Generator xx.diagram Editor ID : placer le champ ID qui se trouve dans Gen Editor Generator xx.diagram» Gen Editor View xx.diagram.part 16 8
Documentation web Documentation GMF http://wiki.eclipse.org/graphical_modeling_framework/tutorial/part_1 http://gmfsamples.tuxfamily.org/wiki/doku.php?id=gmf_tutorial2 http://sbachmann.developpez.com/eclipse/generer-editeurgraphique-gmf/ Utilisation des images SVG dans un projet GMF : http://wiki.eclipse.org/gmf_tutorial_part_2#use_svgfigure Présentation du comportement étrange des «Polyline» de gmfgraph comme un bug : https://bugs.eclipse.org/bugs/show_bug.cgi?id=145863 Pour les contraintes OCL et GMF : http://sbachmann.developpez.com/eclipse/exprimer-valider-contraintes-ocl-emf/ Des éditeurs graphiques et utilitaires http://trac.rtsys.informatik.uni-kiel.de/trac/09ws-eclipse/wiki/exercises/gmf http://www.kermeta.org/docs/fr.irisa.triskell.kermeta.samples.fsm.documentation/build/html.chunk ed/kermeta-create-fsm-graphical-editor-with-gmf/ch02.html#create_new_gmf_project http://serdom.eu/ser/2009/01/21/eclipse-gmf-making-figures-sensitive-to-attributes-of-semanticelements http://gmfsamples.tuxfamily.org/wiki/doku.php Model 2 Text : Xtext Installation et information http://www.eclipse.org/xtext/ Inclus dans Eclipse Modeling Tools Méta-modélisation Création d un modèle mymetamodel.ecore Génération de code (mymetamodel.genmodel) Syntaxe concrète File/New/other/Xtext/ Xtext Project from existing Ecore Models Next : Select EPackages : sélection du package root du métamodèle Entry rule : c est la EClass root Next : choix du nom du projet et de l extension des fichiers Grammaire du langage : mydsl.xtext 18 9
Xtext Pas obligatoirement lié à EMF Attention : dans la version Juno, pour que xtext fonctionne, il faut ajouter la "Nature Xtext" au projet EMF contenant le modèle ecore sélectionnez le projet ecore menu contextuel : "Configure / Add Xtext Nature" Aide à l édition Vérifications de XText Analyse syntaxique Associé à Xtext Générateur de code : Xtend Validation : adapter le code java 19 Xtext : syntaxe concrète Lexique Renvoie un type de base (par défaut EString) terminal ID : ('^')?('a'..'z' 'A'..'Z' '_') ('a'..'z' 'A'..'Z' '_' '0'..'9')*; terminal INT returns ecore::eint : ('0'..'9')+; Date : yyyy-mm-dd Expressions Extended Backus-Naur Form-like (EBNF) exactement 1 (par défaut) zéro ou un? zéro ou plus * un ou plus + ou 20 10
Xtext : syntaxe concrète Grammaire Une règle pour chaque EClass Nommer les éléments référencés Un attribut name de type EString par EClass Ajoutez une EClass abstraite NamedElement Éléments syntaxiques de Xtext = affectation d un élement += affectation de plusieurs éléments?= affectation d un booléen si présence d un mot clé & liste non ordonnée [EClass] référence croisée vers des éléments existants (containement false) attention : doit posséder un attribut de type EString qui s appelle name 21 Xtext : exemple 11
23 Xtext : exemple 24 12
Éditeur GMF 25 Xtext : adaptations Dans le fichier GenerateMyDSL.mwe2, modifiez les options ainsi // the Antlr parser fragment = parser.antlr.xtextantlrgeneratorfragment { options = { backtrack = true memoize=true classsplitting = true } } // antlr parser generator tailored for content assist fragment = parser.antlr.xtextantlruigeneratorfragment { options = { backtrack = true memoize=true classsplitting = true } } 26 13
Model 2 Text : Xtext Génération de l éditeur myprojectname/src/myprojectname/generatemydsl.mwe2 Run As MWE2 Workflow Caractéristiques texte -> ecore Ok si la syntaxe est vérifiée Ecore -> texte Ok si la syntaxe est vérifiée Version java 1.7 requise Menu Window/preferences/installed JRE/jre7 Donner la nature Xtext au projet EMF avant de générer la grammaire Faire GenerateAll après les modifications, sur le genmodel afin de régénérer les classes java 27 Quelques liens utiles pour xtext http://christiandietrich.wordpress.com/2011/07/16/iqualifiednameproviders-inxtext-2-0/ http://stackoverflow.com/questions/10316112/xtext-cross-reference-usingcustom-terminal-rule http://www.openarchitectureware.org/pub/documentation/4.2/html/contents/xtext _tutorial.html#d0e http://www.eclipse.org/xtext/ 28 14