IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Générer des classes Java avec Acceleo en 5 minutes

Eclipse Acceleo est un outil de génération de code sous Eclipse. Il permet de concevoir des modules de génération de code dans un langage choisi par le développeur, à partir d'un ou plusieurs modèles, et fournit aussi des modules de génération de code prêts à être utilisés (UML vers Java, UML vers C#, etc.).

Dans ce tutoriel, nous utilisons la version 3.1.0 d'Acceleo. Nous détaillons les étapes d'installation et nous suivons la création d'un premier projet Acceleo en supposant que vous êtes familiarisé avec Eclipse Modeling Framework. Dans le cas contraire, nous vous invitons à consulter le support de cours suivant Introduction à la modélisation avec Eclipse EMF.

Les sources de l'exemple sont disponibles à l'adresse suivante : introacceleo.zip.

Si vous souhaitez donner votre avis sur ce tutoriel, profitez de cette discussion 2 commentaires Donner une note à l´article (5)

Article lu   fois.

Les deux auteurs

Profil ProSite personnel

Profil ProSite personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Installation

Nous utilisons pour cet article Eclipse Modeling Tools (version Indigo) que vous pouvez télécharger ici. Cette distribution d'Eclipse ne contient pas le plugin Acceleo. Nous montrons dans la suite comment procéder à son installation.

I-A. Méthode 1

Acceleo peut être installé sous Eclipse Modeling Tools en allant dans :

  • Help -> Install Modeling Components ;
Image non disponible
  • Sélectionner Acceleo ;
Image non disponible
  • Suivre les écrans suivants ;
Image non disponible
Image non disponible
  • Finalement, il vous sera demandé de redémarrer Eclipse pour que l'installation d'Acceleo prenne effet.

I-B. Méthode 2

Il est aussi possible d'installer Acceleo à partir du site de mise à jour en suivant les étapes suivantes :

Image non disponible
  • Suivre les écrans suivants ;
Image non disponible
Image non disponible
  • Redémarrer Eclipse pour que l'installation d'Acceleo prenne effet.

II. Créer un premier projet Acceleo

Dans cette section, nous créons un projet Acceleo que nous utilisons pour créer un template nous permettant de générer du code Java à partir d'un modèle Ecore.

  • File -> New -> … -> Acceleo Project ;
  • Entrer le nom du nouveau projet ;
  • Choisir son emplacement -> Finish ;
Image non disponible
  • Créer votre modèle source (en UML ou Ecore par exemple) et nommer le fichier education.ecore;
Image non disponible
  • Créer un nouvel Acceleo Module File ;
Image non disponible
  • Choisir son emplacement dans « Parent Folder » ;
  • Entrer le nom du module (genJava par exemple) ;
  • Ajouter l'URI du méta-modèle de votre modèle. Dans notre cas, c'est l'URI du méta-modèle de Ecore qui est ajoutée ;
  • Entrer le nom du template (genClass par exemple) ;
  • Choisir le type principal à manipuler dans le template (dans notre cas cela correspondra à EClass) ;
  • Cocher la case « Generate file » car notre template doit comporter un block [file] qui permettra de générer les fichiers de classes java ;
  • Cocher aussi « Main template » car nous utilisons ce template comme template principal et il sera le point d'entrée de l'exécution de notre programme de génération de code.
Image non disponible

Maintenant nous allons écrire un programme qui permet de générer du code Java à partir de notre modèle Ecore préalablement créé.

Notre objectif est de transformer les EClass en classes java, les EAttribute et EReference en propriétés de classes, les EOperation en méthodes java, et finalement générer les méthodes set et get relatives aux propriétés de classes.

Pour ce faire, Acceleo fournit un pseudo langage à balises où l'emploi des crochets [ ... ] est utilisé pour l'insertion de fonctionnalités spécifiques à Acceleo. Ainsi, tout texte en dehors des crochets sera interprété comme une simple chaîne de caractères.

 
Sélectionnez
[comment encoding = UTF-8 /]
[module genJava('http://www.eclipse.org/emf/2002/Ecore')]


[template public genClass(aEClass : EClass)]
[comment @main/]
[file (aEClass.name.concat('.java'), false, 'UTF-8')]
[comment][/comment]
public class [aEClass.name/] {

[for (aEAttribute : EAttribute | aEClass.eAllAttributes)]
    [aEAttribute.eType.instanceClassName/] [aEAttribute.name/];
[/for]

[for (aEReference : EReference | aEClass.eAllReferences)]
    [aEReference.eReferenceType.name/] [aEReference.name/];
[/for]

[for (aEAttribute : EAttribute | aEClass.eAllAttributes)]
    public [aEAttribute.eType.instanceClassName/] get[aEAttribute.name.toUpperFirst()/] () {
        return this.[aEAttribute.name/];
    }
[/for]

[for (aEAttribute : EAttribute | aEClass.eAllAttributes)]
    public void set[aEAttribute.name.toUpperFirst()/] ([aEAttribute.eType.instanceClassName/] [aEAttribute.name/]) {
        this.[aEAttribute.name/] = [aEAttribute.name/];
    }
[/for]

[for (aEReference : EReference | aEClass.eAllReferences)]
    public [aEReference.eReferenceType.name/] get[aEReference.name.toUpperFirst()/] () {
        return this.[aEReference.name/];
    }
[/for]

[for (aEReference : EReference | aEClass.eAllReferences)]
    public void set[aEReference.name.toUpperFirst()/] ([aEReference.eReferenceType.name/] [aEReference.name/]) {
        this.[aEReference.name/] = [aEReference.name/];
    }
[/for]

[for (aEOperation : EOperation | aEClass.eAllOperations)]
    public [aEOperation.eType.instanceClassName/] [aEOperation.name/] () {
    //TODO
    }
[/for]

}
[/file]
[/template]

Si vous êtes habitués à des moteurs de template comme FreeMarker ou Apache Velocity vous ne serez pas dépaysés par cette approche. Toutefois, l'originalité d'Acceleo est de s'appuyer sur EMF pour l'extraction des données.

Configurer l'exécution du template. Notamment, choisir le modèle source (champ Model) et l'emplacement (champ Target) où seront stockées les classes générées.

Image non disponible

Ainsi, nous obtenons les classes générées dans le répertoire generated. Elles sont au nombre de trois (Course, Student et Take_Course) comme exprimées dans le modèle EMF.

Image non disponible

III. Conclusion et remerciements

Ce premier article se veut être une courte introduction des possibilités offertes par Acceleo pour la génération de code. Nous souhaitons dans un prochain article fournir une description détaillée de la syntaxe employée pour décrire un template.

Nous tenons à remercier _Max_ pour sa relecture orthographique et gueritarish pour sa relecture technique..

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 © . Aucune reproduction, même partielle, ne peut être faite de ce site ni 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.