Editeurs de modèles - Lab
Transcription
Editeurs de modèles - Lab
21/01/2016 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, UBO Laboratoire Lab-STICC UBO [email protected] 2 1 21/01/2016 UBO 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) [email protected] UBO • 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 [email protected] 4 2 21/01/2016 UBO • 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 [email protected] UBO • 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 [email protected] 6 3 21/01/2016 UBO • Aspect graphique • • GMF graph 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 [email protected] UBO 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 [email protected] 8 4 21/01/2016 UBO • 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 [email protected] UBO • 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 [email protected] 10 5 21/01/2016 UBO 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 [email protected] UBO • 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 [email protected] 12 6 21/01/2016 UBO • 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 – – • Attributs et icones 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 [email protected] UBO 13 Éditeur GMF [email protected] 14 7 21/01/2016 UBO 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 [email protected] UBO 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 [email protected] 16 8 21/01/2016 UBO • 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 [email protected] UBO • 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 17 Sirius [email protected] 18 9 21/01/2016 UBO 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 » [email protected] UBO 19 Éditeur Sirius [email protected] 20 10 21/01/2016 UBO 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/ [email protected] UBO • 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 [email protected] 22 11 21/01/2016 UBO 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 [email protected] UBO 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 | [email protected] 24 12 21/01/2016 UBO 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 [email protected] UBO 25 Xtext : exemple [email protected] 13 21/01/2016 UBO [email protected] UBO 27 Xtext : exemple [email protected] 28 14 21/01/2016 UBO 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 [email protected] UBO • 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 } } [email protected] 30 15 21/01/2016 UBO 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 [email protected] UBO 31 Auto Format • Ctrl – Shift – F • 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 [email protected] 32 16 21/01/2016 UBO 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/ [email protected] 33 17