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

Image non disponible

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 Donner une note à l'article (5).

Article lu   fois.

L'auteur

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

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 : Image non disponible 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 :

Image non disponible

On choisit le workspace :

« E:\FORMATION_Eclipse\modeling-indigo-SR1\EMT\WS\EditionGraphiqueModeleEcore » :

Image non disponible

Cliquer « OK ».

Fermer la fenêtre « Welcome ».

I-C. Passage en perspective « Ecore »

Faire :

Image non disponible

Sélectionner la perspective « Ecore » :

Image non disponible

Faire « OK », on obtient :

Image non disponible

II. Édition du modèle EMF

II-A. Création du projet

Faire :

Image non disponible

Nommer le projet :

Image non disponible

Cliquer « Finish », le projet est créé, si on sélectionne le projet ses « properties » sont affichées :

Image non disponible

II-B. Ouverture de l'éditeur

Faire :

Image non disponible

Initialiser « Domain file name » :

Image non disponible

Cliquer « Finish ».

L'éditeur du modèle EMF apparaît, on ferme quelques vues, on obtient :

Image non disponible

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 :

Image non disponible

Éditer les propriétés de la « EClass0 » :

Image non disponible

Faire une sauvegarde.

Créer de même les « Eclass »: « Noeud » et « Arc ».

Image non disponible

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 :

Image non disponible

Éditer les « Properties » de cet attribut (en particulier pour « EType » utiliser le bouton « ... » pour sélectionner « EString ») :

Image non disponible

on obtient :

Image non disponible

procéder de même avec « Arc » :

Image non disponible

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 :

Image non disponible

Éditer les « properties » de la référence :

Image non disponible

Après déplacement des informations associées à la référence on obtient :

Image non disponible

Créer de même une référence vers les Arcs :

Image non disponible

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 :

Image non disponible

Sélectionner l'arc, éditer ses « properties » :

Image non disponible

On obtient :

Image non disponible

Créer de même une référence « extremite ». Au final nous obtenons le modèle :

Image non disponible

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 :

Image non disponible

on obtient :

Image non disponible

III. Création projet EMF

Faire :

Image non disponible

Sélectionner « EMF Project » :

Image non disponible

Cliquer « Next > ».

Nommer le projet :

Image non disponible

Cliquer « Next > » et sélectionner « Ecore model ».

Image non disponible

Cliquer « Next > ».

Dans « New EMF Project - Ecore Import » utiliser « Browse Workspace... » pour importer le modèle :

Image non disponible

Cliquer « OK » on obtient :

Image non disponible

Cliquer « Load » puis « Next > ».

Ne pas modifier « New EMF Project - Package Selection ».

Image non disponible

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 Image non disponible.

Dans les « properties » initialiser « Base Package » avec « exemple.graphe ». Cliquer dans la vue « Graphe.genmodel », faire une sauvegarde.

Image non disponible

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 :

Image non disponible

Le code est généré dans le projet « exemple.graphe.emf » :

Image non disponible

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

Image non disponible

Nommer le « package » :

Image non disponible

Cliquer « Finish ».

Dans ce « package » créer la classe Test :

Image non disponible

Définie par :

Image non disponible

Cliquer « Finish ».

La classe est créée :

Image non disponible

Créer, dans le même « package », la classe « MonGraphe » définie par :

Image non disponible

Cliquer « Finish », la classe est créée :

Image non disponible

V-B. Édition des classes « Test » et « MonGraphe »

Éditer la classe « Test » :

 
Sélectionnez

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 » :

 
Sélectionnez

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 :

Image non disponible

La classe « Main » s'exécute. La structure du graphe s'affiche dans la vue « console » :

Image non disponible

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

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

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.