Édition graphique d'un modèle EMF : application à un modèle de graphe

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 Commentez .

- Titre : Édition graphique d'un modèle EMF : application à un modèle de graphe

- Auteur : Serge Bachmann

- Parution : 1 février 2012

- 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.

Sommaire

- 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 args
*/
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

Un modèle EMF a été édité. Le code associé à ce modèle a été généré puis testé. Le code généré répond aux bons critères de la programmation objet. On peut penser que ce code est de meilleure qualité que le code développé dans le document « Programmation d'un modèle de graphe avec l'environnement de développement intégré Eclipse ».

VII - Licence

La licence « Creative Commons » s'applique à ce document, veuillez-vous référer à ce site pour de plus amples informations : http://creativecommons.org/licenses/by-nc-nd/2.0/fr/.