r818 - in trunk: eugene/doc/3-v2.0/sources eugene/src/main/java/org/nuiton/eugene/models/object src/site src/site/fr/rst src/site/resources src/site/resources/binaries src/site/resources/schemas
Author: fdesbois Date: 2010-02-19 15:56:45 +0100 (Fri, 19 Feb 2010) New Revision: 818 Added: trunk/src/site/resources/ trunk/src/site/resources/binaries/ trunk/src/site/resources/binaries/EUGene-generate.vpp trunk/src/site/resources/schemas/ trunk/src/site/resources/schemas/03-generation-complete.png trunk/src/site/resources/schemas/03-generation-java.png trunk/src/site/resources/schemas/03-generation-simple.png Modified: trunk/eugene/doc/3-v2.0/sources/ trunk/eugene/doc/3-v2.0/sources/EUGene-generate.vpp trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelGenerator.java trunk/src/site/fr/rst/01-introduction.rst trunk/src/site/fr/rst/03-generation.rst trunk/src/site/fr/rst/eugene-plan.rst trunk/src/site/site_fr.xml Log: Add generation doc + menu Property changes on: trunk/eugene/doc/3-v2.0/sources ___________________________________________________________________ Modified: svn:ignore - EUGene-generate.vpp~1 + EUGene-generate.vpp~2 EUGene-generate.vpp~1 Modified: trunk/eugene/doc/3-v2.0/sources/EUGene-generate.vpp =================================================================== (Binary files differ) Modified: trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelGenerator.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelGenerator.java 2010-02-18 15:54:55 UTC (rev 817) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelGenerator.java 2010-02-19 14:56:45 UTC (rev 818) @@ -29,12 +29,6 @@ import org.apache.commons.logging.LogFactory; import org.nuiton.eugene.AbstractGenerator; import org.nuiton.eugene.MonitorWriter; -import org.nuiton.eugene.models.object.ObjectModel; -import org.nuiton.eugene.models.object.ObjectModelClass; -import org.nuiton.eugene.models.object.ObjectModelClassifier; -import org.nuiton.eugene.models.object.ObjectModelElement; -import org.nuiton.eugene.models.object.ObjectModelEnumeration; -import org.nuiton.eugene.models.object.ObjectModelInterface; /** * Pour utiliser ce type de générateur il faut implanter au moins une des trois Modified: trunk/src/site/fr/rst/01-introduction.rst =================================================================== --- trunk/src/site/fr/rst/01-introduction.rst 2010-02-18 15:54:55 UTC (rev 817) +++ trunk/src/site/fr/rst/01-introduction.rst 2010-02-19 14:56:45 UTC (rev 818) @@ -16,27 +16,27 @@ EUGene s'inscrit dans les technologies de point, et tout particulièrement dans l'approche MDA. L'approche MDA a comme principe la conception par modèle sur le développement des logiciels. Ce qui consiste à s'abstraire de la technique en -modèlisant le besoins, puis transformer ce modèle selon la plate-forme cible. -Un exemple classique d'utilisation est la génération de code java grâce un +modèlisant le besoin, puis transformer ce modèle selon la plate-forme cible. +Un exemple classique d'utilisation est la génération de code java grâce à un modèle UML. -Pour pouvoir réaliser des modèles (M1), il est nécessaire définir un langage de -modèlisation qui est appellé méta-modèle (M2). Pour pouvoir réaliser des +Pour pouvoir réaliser des modèles (M1), il est nécessaire de définir un langage +de modèlisation qui est appellé méta-modèle (M2). Pour pouvoir réaliser des transformations entre les différents languages, ils est nécessaire d'avoir un méta-language commun, qui est appellé méta-méta-modèle (M3). Pour ne pas avoir un autre language au dessus du méta-méta-modèle, celui-ci doit être -auto-descriptif c'est à dire qui est possible de réaliser un méta-modèle +auto-descriptif c'est à dire qu'il est possible de réaliser un méta-modèle représentant le méta-méta-modèle. Le dernier niveau est l'application (M0) du modèle dans le monde réel. Voici quelques exemples : -M3 MOF Méta-language UML -M2 UML Language Language spécifique d'aviation -M1 Java Phrase Définition de l'aéroport -M0 Objet Parler L'aéroport +M3 MOF Grammaire UML +M2 UML Langage Langage spécifique d'aviation +M1 Java Phrase Définition de l'aéroport +M0 Objet Parler L'aéroport Il existe deux stratégies pour la manipulation des modèles soit en définissant Modified: trunk/src/site/fr/rst/03-generation.rst =================================================================== --- trunk/src/site/fr/rst/03-generation.rst 2010-02-18 15:54:55 UTC (rev 817) +++ trunk/src/site/fr/rst/03-generation.rst 2010-02-19 14:56:45 UTC (rev 818) @@ -0,0 +1,113 @@ +Processus de génération +======================= + +:Author: Florian Desbois +:Contact: eugene-devel@list.nuiton.org ou eugene-users@list.nuiton.org +:Revision: $Revision$ +:Date: $Date: 2009-10-21 15:22:32 +0200 (Wed, 21 Oct 2009) $ + +Le principe de génération réside en trois points : + +- Fichiers d'entrée, représentant un modèle de données concret +- Moulinette de génération (templates, transformeurs de modèle) +- Fichiers de sorties pour une application finale dans le langage de + programmation souhaité. + +EUGene utilise le langage de modélisation UML (au format XMI) pour interpréter +un modèle de données, le charger en mémoire pour pouvoir le manipuler en Java +et pour finalement générer des fichiers de sorties adaptés à une technologie +ou un langage de programmation. + +Deux possibilités de génération : + +- Génération simple : template de génération +- Génération complète : lecture de modèle + transformeur de modèle + + template de génération simple (généralement unique au langage de sortie) + +Nous verrons également le cas concret de la génération de code Java. + +.. contents:: + +Génération simple +----------------- + +EUGene nécessite en entrée du processus de génération un ou plusieurs fichiers +xmi correspondants au modèle à manipuler pendant la génération. Ces fichiers +xmi seront convertis en fichiers **.objectmodel** plus simple à interpréter pour +ensuite remplir le modèle mémoire `ObjectModel`_ . Depuis les premières versions +d'EUGene il est possible d'écrire des templates de génération pour interpréter +les spécifités de l'ObjectModel obtenu suivant le résultat final escompté +(quelque soit le langage des fichiers résultants : java, xml, php, c++, ...). + +Dans ce cas de génération, le développeur a seulement besoin d'écrire un ou +plusieurs générateurs (Generator) en utilisant une `syntaxe simple`_ +interprété par `Nuiton-processor`_ . + +.. _ObjectModel: 02-objectmodel.html + +.. _Nuiton-processor: http://maven-site.nuiton.org/processor/nuiton-processor/index.html + +.. _syntaxe simple: 04-templates.html + +.. image:: ../schemas/03-generation-simple.png + +Par défaut EUGene manipule de l'ObjectModel résultants de formats de fichiers +connus comme les fichiers zargo, zuml ou xmi (voir `Writer`_ ) . + +.. _Writer: 06-fonctionnalites-avancees.html#Writer + +Génération complète +------------------- + +Il est possible d'utiliser un autre format de fichier que le xmi ou +l'objectmodel en entrée d'EUGene, dans ce cas il est nécessaire de convertir +ce format pour remplir l'ObjectModel mémoire. Il est ainsi possible d'utiliser +un `Reader`_ approprié. Il est également possible d'utiliser un autre modèle +que l'ObjectModel comme le StateModel par exemple (le Reader utilisé sera +le StateModelReader). Comme précédemment, il est possible d'écrire des +générateurs pour interprété l'ObjectModel et le convertir en fichiers. Mais il +est également possible d'utiliser un transformeur de modèle qui se comporte +de la même manière qu'un générateur ; excepté qu'il ne termine pas sur l'écriture +de fichiers mais sur la création d'un nouveau modèle prêt à être de nouveau +interprété par un générateur. Le contenu du transformeur n'est plus une template +de génération mais de la transformation de modèle : la conversion du modèle +d'entrée interprété par le Reader vers un modèle de sortie plus simple à +manipuler dans un autre générateur. Cela permet principalement de concentrer +l'interprétation du modèle dans les transformeurs et d'utiliser un générateur + basique spécifique à un langage par exemple. + +.. image:: ../schemas/03-generation-complete.png + +.. _Reader: 06-fonctionnalites-avancees.html#Reader + +L'ObjectModel est également utilisé comme résultat de la transformation +mais ne comporte plus les spécificités du modèle (norme UML) mais celles du +langage (Java par exemple). + +Génération Java +--------------- + +Nous arrivons vers le cas pratique de la génération de code Java. Ici le modèle +d'entrée utilisé est l'ObjectModel avec l'ObjectModelReader par défaut qui +va interpréter les fichiers .objectmodel pour remplir l'ObjectModel mémoire. +Le développeur aura à sa charge de créer des transformeurs qui héritent +de l'ObjectModelTransformerToJava pour ainsi interpréter le modèle d'entrée (UML) +vers un nouveau modèle proche du langage Java (également un ObjectModel). +Le générateur utilisé est toujours le même, il s'agit du JavaGenerator, qui +se chargera d'écrire simplement le contenu du modèle spécifique à Java. + +.. image:: ../schemas/03-generation-java.png + +Des outils permettent de facilement adapté l'ObjectModel au langage +souhaité, comme notamment les `extensions`_ (pour Java : +ImportsManager, AnnotationManager, ...) et le builder (pour Java : JavaBuilder). + +.. _extensions: 06-fonctionnalites-avancees.html#Extension + +Il est conseillé d'utiliser maven pour `executer`_ la génération en utilisant le +`maven-eugene-plugin`_ . La configuration du plugin permet de préciser les +différents éléments de la génération (writer, reader, model, template, ...). + +.. _executer: 05-execution.html + +.. _maven-eugene-plugin: ../maven-eugene-plugin/fr/index.html \ No newline at end of file Property changes on: trunk/src/site/fr/rst/03-generation.rst ___________________________________________________________________ Added: svn:keywords + Date, Revision Modified: trunk/src/site/fr/rst/eugene-plan.rst =================================================================== --- trunk/src/site/fr/rst/eugene-plan.rst 2010-02-18 15:54:55 UTC (rev 817) +++ trunk/src/site/fr/rst/eugene-plan.rst 2010-02-19 14:56:45 UTC (rev 818) @@ -76,7 +76,7 @@ Ressource : jruchaud? Processus de génération -~~~~~~~~~~~~~~~~~~~~~~~ +----------------------- Ressource : fdesbois Property changes on: trunk/src/site/resources/binaries ___________________________________________________________________ Added: svn:ignore + EUGene-generate.vpp~1 Added: trunk/src/site/resources/binaries/EUGene-generate.vpp =================================================================== (Binary files differ) Property changes on: trunk/src/site/resources/binaries/EUGene-generate.vpp ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/src/site/resources/schemas/03-generation-complete.png =================================================================== (Binary files differ) Property changes on: trunk/src/site/resources/schemas/03-generation-complete.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/src/site/resources/schemas/03-generation-java.png =================================================================== (Binary files differ) Property changes on: trunk/src/site/resources/schemas/03-generation-java.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/src/site/resources/schemas/03-generation-simple.png =================================================================== (Binary files differ) Property changes on: trunk/src/site/resources/schemas/03-generation-simple.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Modified: trunk/src/site/site_fr.xml =================================================================== --- trunk/src/site/site_fr.xml 2010-02-18 15:54:55 UTC (rev 817) +++ trunk/src/site/site_fr.xml 2010-02-19 14:56:45 UTC (rev 818) @@ -22,11 +22,31 @@ <item name="Libre-Entreprise" href="http://www.libre-entreprise.org/"/> </links> - <menu name="Utilisateur"> + <menu name="Documentation"> + <item name="English version" href="../index.html" /> <item name="Accueil" href="index.html" /> - <item name="English version" href="../index.html" /> + <item name="Introduction" href="01-introduction.html" /> + <item name="ObjectModel" href="02-objectmodel.html" /> + <item name="Processus de génération" href="03-generation.html" /> + <item name="Templates" href="04-templates.html" /> + <item name="Execution" href="05-execution.html" /> + <item name="Fonctionnalités avancées" href="06-fonctionnalites-avancees.html" /> + <item name="Glossaire" href="07-glossaire.html" /> + <item name="FAQ" href="08-FAQ.html" /> </menu> + <menu name="Projet"> + <item name="Accueil" href="http://nuiton.org/projects/show/eugene" /> + <item name="Téléchargement" href="http://nuiton.org/projects/list_files/eugene" /> + <item name="Trackers" href="http://nuiton.org/projects/eugene/issues" /> + </menu> + + <menu name="Liens"> + <item name="Nuiton-processor" href="http://maven-site.nuiton.org/processor"/> + <item name="ToPIA" href="http://maven-site.nuiton.org/topia"/> + <item name="ArgoUML" href="http://argouml.tigris.org/"/> + </menu> + <!-- TC-20100117 does not works on none primary language --> <!--<menu ref="modules"/>--> <menu name="Modules">
participants (1)
-
fdesbois@users.nuiton.org