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