Édition graphique d'un modèle EMF : application à un modèle de graphe
Date de publication : 01/02/2012.
Par
Serge Bachmann
Les outils de modélisation ("Eclipse Modeling Tools") d'Eclipse fournissent des outils graphiques pour faciliter l'édition de modèles EMF (Eclipse Modeling Framework).
Il existe plusieurs moyens permettant de définir un modèle EMF qui s'appuie sur le métamodèle Ecore.
Le plus simple est un éditeur graphique dont l'utilisation est illustrée dans ce document par la création d'un modèle de graphe.
Pour réagir à cet article, un espace de dialogue vous est proposé sur le forum
6 commentaires 
.
I. Introduction
I-A. Spécification
I-B. Lancement de la plateforme Eclipse
I-C. Passage en perspective « Ecore »
II. Édition du modèle EMF
II-A. Création du projet
II-B. Ouverture de l'éditeur
II-C. Création des « EClass »
II-D. Création des « EAttribute » des « EClass »
II-E. Mise en place des références
II-E-1. « Containment References »
II-E-2. « One way reference »
II-F. Validation du modèle EMF
III. Création projet EMF
IV. Génération du code associé au modèle
V. Utilisation du code généré
V-A. Mise en place du test
V-B. Édition des classes « Test » et « MonGraphe »
V-C. Lancement du test
VI. Conclusions
VII. Licence
I. Introduction
I-A. Spécification
Un modèle EMF d'un graphe est édité grâce à un éditeur graphique.
I-B. Lancement de la plateforme Eclipse
Double cliquer :

ou le raccourci vers cet exécutable si vous l'avez créé dans le répertoire destiné à recevoir les « workspaces ». La plate-forme « Eclipse » est lancée :
On choisit le workspace :
« E:\FORMATION_Eclipse\modeling-indigo-SR1\EMT\WS\EditionGraphiqueModeleEcore » :
Cliquer « OK ».
Fermer la fenêtre « Welcome ».
I-C. Passage en perspective « Ecore »
Faire :
Sélectionner la perspective « Ecore » :
Faire « OK », on obtient :
II. Édition du modèle EMF
II-A. Création du projet
Faire :
Nommer le projet :
Cliquer « Finish », le projet est créé, si on sélectionne le projet ses « properties » sont affichées :
II-B. Ouverture de l'éditeur
Faire :
Initialiser « Domain file name » :
Cliquer « Finish ».
L'éditeur du modèle EMF apparaît, on ferme quelques vues, on obtient :
Nous allons créer un modèle de graphe très simple.
Remarque : Le modèle « ecore » est semblable au diagramme de classes UML.
II-C. Création des « EClass »
Sélectionner « EClass » dans la Palette (Objects), désigner l'emplacement dans la zone d'édition :
Éditer les propriétés de la « EClass0 » :
Faire une sauvegarde.
Créer de même les « Eclass »: « Noeud » et « Arc ».
II-D. Création des « EAttribute » des « EClass »
Sélectionner « EAttribute » dans la Palette (Objects), et désigner la deuxième case de « Noeud », on obtient :
Éditer les « Properties » de cet attribut (en particulier pour « EType » utiliser le bouton « ... » pour sélectionner « EString ») :
on obtient :
procéder de même avec « Arc » :
II-E. Mise en place des références
II-E-1. « Containment References »
Un graphe est constitué d'une liste de nœuds et d'une liste d'arcs. La disparition du graphe entraîne la disparition des nœuds et des arcs qui le constituent d'où le type de référence.
Sélectionner « EReference » dans la Palette (Connections), positionner le curseur sur « Graphe »,
enfoncer le bouton gauche, garder le bouton enfoncé, amener le curseur sur « Nœud » puis le relâcher,
On obtient :
Éditer les « properties » de la référence :
Après déplacement des informations associées à la référence on obtient :
Créer de même une référence vers les Arcs :
II-E-2. « One way reference »
Un arc fait référence à un nœud origine et un nœud extrémité. La destruction de l'arc n'entraîne pas la destruction des noeuds associés. Un nœud n'est pas un composant d'un arc, d'où le type de référence. Sélectionner « EReference » dans la Palette (Connections), et désigner «Arc» puis « Noeud », on obtient :
Sélectionner l'arc, éditer ses « properties » :
On obtient :
Créer de même une référence « extremite ». Au final nous obtenons le modèle :
Faire une sauvegarde.
II-F. Validation du modèle EMF
Sélectionner « Graphe.ecore » dans le « Project Explorer » et dans l'éditeur utiliser le menu contextuel pour valider le modèle :
on obtient :
III. Création projet EMF
Faire :
Sélectionner « EMF Project » :
Cliquer « Next > ».
Nommer le projet :
Cliquer « Next > » et sélectionner « Ecore model ».
Cliquer « Next > ».
Dans « New EMF Project - Ecore Import » utiliser « Browse Workspace... » pour importer le modèle :
Cliquer « OK » on obtient :
Cliquer « Load » puis « Next > ».
Ne pas modifier « New EMF Project - Package Selection ».
Cliquer « Finish ». Le projet « exemple.graphe.emf » est créé. Le répertoire « src » est vide. Le répertoire « model » est mis à jour.
Sélectionner dans le projet « exemple.graphe.emf » le fichier « model / Graphe.genmodel » (Double-clic).
Dans l'éditeur ouvrir « Graphe » et sélectionner

.
Dans les « properties » initialiser « Base Package » avec « exemple.graphe ». Cliquer dans la vue « Graphe.genmodel », faire une sauvegarde.
IV. Génération du code associé au modèle
Faire une sauvegarde. Dans le menu contextuel de l'éditeur de « Graphe.genmodel » sélectionner « Generate Model Code ». Vérifier que le modèle est correct :
Le code est généré dans le projet « exemple.graphe.emf » :
V. Utilisation du code généré
Nous allons utiliser le code généré pour créer une instance de graphe très simple.
V-A. Mise en place du test
Dans « exemple.graphe.emf > src » on crée le « package » « test ».
Nommer le « package » :
Cliquer « Finish ».
Dans ce « package » créer la classe Test :
Définie par :
Cliquer « Finish ».
La classe est créée :
Créer, dans le même « package », la classe « MonGraphe » définie par :
Cliquer « Finish », la classe est créée :
V-B. Édition des classes « Test » et « MonGraphe »
Éditer la classe « Test » :
package test;
public class Test {
@param
public static void main(String[] args) {
System.out.println("TEST CODE GENERE");
MonGraphe monGraphe = new MonGraphe();
monGraphe.init();
monGraphe.print();
}
}
|
Éditer la classe « MonGraphe » :
package test;
import java.util.Iterator;
import org.eclipse.emf.common.util.EList;
import exemple.graphe.graphe.Arc;
import exemple.graphe.graphe.Graphe;
import exemple.graphe.graphe.Noeud;
import exemple.graphe.graphe.impl.GrapheFactoryImpl;
public class MonGraphe {
private Graphe graphe;
public void init(){
GrapheFactoryImpl factory = new GrapheFactoryImpl();
graphe = factory.createGraphe();
Noeud n1 = factory.createNoeud();
n1.setNom("N1");
graphe.getListeNoeuds().add(n1);
Noeud n2 = factory.createNoeud();
n2.setNom("N2");
graphe.getListeNoeuds().add(n2);
Arc arc1 = factory.createArc();
arc1.setNom("ARC1");
arc1.setOrigine(n1);
arc1.setExtremite(n2);
graphe.getListeArcs().add(arc1);
}
public void print(){
EList<Noeud> listeNoeuds = graphe.getListeNoeuds();
Iterator<Noeud> in = listeNoeuds.iterator();
System.out.println("Liste des noeuds:");
while (in.hasNext()){
Noeud n = in.next();
System.out.print(n.getNom()+ " ");
}
EList<Arc> listeArcs = graphe.getListeArcs();
Iterator<Arc> ia = listeArcs.iterator();
System.out.println("\nListe des arcs:");
while (ia.hasNext()){
Arc a = ia.next();
System.out.print(a.getNom()+"("+
a.getOrigine().getNom()+"->"+
a.getExtremite().getNom()+") ");
}
}
}
|
Faire une sauvegarde générale.
V-C. Lancement du test
Faire :
La classe « Main » s'exécute. La structure du graphe s'affiche dans la vue « console » :
VI. Conclusions
VII. Licence


Les sources présentées sur cette page sont libres de droits
et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ©
2011 Serge Bachmann. Aucune reproduction,
même partielle, ne peut être faite de ce site et de l'ensemble de son contenu :
textes, documents, images, etc. sans l'autorisation expresse de l'auteur.
Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 €
de dommages et intérêts.
Cette page est déposée.