lab-sticc.univ-brest.fr/~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, Sirius, 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, Sirius Accès à l édition textuelle de modèles EMFText, XText 4 2
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 5 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 6 3
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 7 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 8 4
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 9 GMF tool, map et gen Tool : Palette filename.gmftool Création d éléments Map : lien graphique, modèle et outil filename.gmfmap Basé sur filename.ecore, filename.gmfgraph, filename.gmftool Génération de filename.gmfgen Dashboard A n'utiliser qu'une seule fois au départ pour initialiser les modèles Vérifier les modèles générés 10 5
GMF gen gmfgen model Modèle d entrée du générateur d éditeur graphique Equivalent de genmodel pour ecore 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 11 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 12 6
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 13 Éditeur GMF 14 7
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 Sirius Basé sur EMF Mises au point et tests rapides Plusieurs vues possibles Une vue : un aspect du modèle Plusieurs représentations : diagrammes, tables Actions sur le modèle déclenchées par l interface Intégration Acceleo, Java, Xtext Génération de code possible 16 8
Sirius Structure Un projet contient une spécification (viewpoint specification project) Une spécification est composée de points de vue (viewpoint) un point de vue contient des représentations (diagram, sequence diagram, table, tree) Diagram Une EClass Root (Domain Class) Pre-condition sur l ouverture Il y a plusieurs couches (layer) dans un diagramme Une couche par défaut Contient les éléments (node, edge) à représenter 17 Sirius Node Une EClass Une précondition Une représentation (style) Un schéma Une image conditionnelle Edge Une EReference Une représentation (style) Palette Node Creation, Edge Creation Action lié à la création 18 9
Mise en place de l éditeur graphique avec Sirius https://wiki.eclipse.org/sirius/tutorials/4mintutorial Attention Il faut exporter le projet EMF il faut créer un modèle dans le «Modeling project» quand on crée un Node, il faut remplir le champ «Semantic Candidates Expression» 19 Éditeur Sirius 20 10
Documentation Sirius http://www.obeodesigner.com/company/news/474-sirius-agraphical-model-is-worth-a-thousand-words http://www.eclipse.org/sirius/ Http://alain-bernard.developpez.com/tutoriels/eclipse/sirius-intro/ 21 Model 2 Text : Xtext Préambule : modélisation Ecore Création d un méta-modèle mymetamodel.ecore Génération de code (mymetamodel.genmodel) Export du projet EMF Syntaxe concrète Représentation textuelle des modèles 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 22 11
Xtext : principes Aide à l édition Coloration syntaxique Complétion automatique Vérification Analyse syntaxique Détection d erreur Associé à Xtext Générateur de code : Xtend Validation : adapter le code java 23 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 24 12
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 25 Xtext : exemple 13
27 Xtext : exemple 28 14
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 29 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 } } 30 15
Installation et usage Installation et information http://www.eclipse.org/xtext/ Inclus dans Eclipse Modeling Tools Intégration Ecore Faire GenerateAll après les modifications, sur le genmodel afin de régénérer les classes java 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" Version java 1.7 requise Menu Window/preferences/installed JRE/jre7 31 Ctrl Shift F Auto Format Classe ExampleFormatter à adapter Fichier ExampleFormatter.xtend Passage à la ligne après les mots-clés Input, Output et les règles syntaxiques declaration et body for(kw : findkeywords('input',output')) { c.setlinewrap().after(kw) } for(rule: findrulecalls(declarationrule, bodyrule)) { c.setlinewrap().after(rule) } Régénérer xtext / export /restart Documentation http://www.eclipse.org/xtext/documentation.html#formatting 32 16
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/ 33 17