Author: fdesbois Date: 2010-02-22 12:15:49 +0100 (Mon, 22 Feb 2010) New Revision: 820 Added: trunk/src/site/resources/binaries/eugene_v2.0.zargo trunk/src/site/resources/binaries/eugene_v2.0_simplify.zargo trunk/src/site/resources/objectmodel/ trunk/src/site/resources/objectmodel/Hotel.objectmodel.png trunk/src/site/resources/objectmodel/Hotel.png trunk/src/site/resources/objectmodel/ObjectModel.png trunk/src/site/resources/objectmodel/ObjectModel_Generator.png trunk/src/site/resources/objectmodel/ObjectModel_Interfaces.png trunk/src/site/resources/schemas/04-templates-hierarchy.png Removed: trunk/eugene/src/site/resources/images/Hotel.objectmodel.png trunk/eugene/src/site/resources/images/Hotel.png trunk/eugene/src/site/resources/images/ObjectModel.png trunk/eugene/src/site/resources/images/ObjectModel_Generator.png trunk/eugene/src/site/resources/images/ObjectModel_Interfaces.png Modified: trunk/eugene/src/main/java/org/nuiton/eugene/AbstractGenerator.java trunk/eugene/src/main/java/org/nuiton/eugene/Template.java trunk/src/site/fr/rst/01-introduction.rst trunk/src/site/fr/rst/02-objectmodel.rst trunk/src/site/fr/rst/04-templates.rst trunk/src/site/fr/rst/07-glossaire.rst trunk/src/site/fr/rst/08-FAQ.rst trunk/src/site/fr/rst/eugene-plan.rst Log: - move old objectmodel images - refactor encoding usage (seems not working before modification) - add templates doc + other minor documentation modifications Modified: trunk/eugene/src/main/java/org/nuiton/eugene/AbstractGenerator.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/AbstractGenerator.java 2010-02-21 10:26:04 UTC (rev 819) +++ trunk/eugene/src/main/java/org/nuiton/eugene/AbstractGenerator.java 2010-02-22 11:15:49 UTC (rev 820) @@ -51,7 +51,7 @@ public void setParent(AbstractGenerator<M> parent) { this.parent = parent; - setEncoding(parent.getEncoding()); + //setEncoding(parent.getEncoding()); } @Override @@ -62,6 +62,14 @@ return super.getOverwrite(); } + @Override + public String getEncoding() { + if (parent != null) { + return parent.getEncoding(); + } + return super.getEncoding(); + } + /** * Permet de recuperer la proprieté passé en argument * @@ -159,6 +167,7 @@ Writer output; + String encoding = getEncoding(); if (encoding != null) { if (log.isDebugEnabled()) { log.debug("Force encoding to " + encoding + " : " + this); Modified: trunk/eugene/src/main/java/org/nuiton/eugene/Template.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/Template.java 2010-02-21 10:26:04 UTC (rev 819) +++ trunk/eugene/src/main/java/org/nuiton/eugene/Template.java 2010-02-22 11:15:49 UTC (rev 820) @@ -68,7 +68,7 @@ */ protected List<String> generatedPackages; - protected String encoding; +// protected String encoding; /** date de derniere modification de la source la plus recente */ //protected long lastModifiedSource = 0; Deleted: trunk/eugene/src/site/resources/images/Hotel.objectmodel.png =================================================================== (Binary files differ) Deleted: trunk/eugene/src/site/resources/images/Hotel.png =================================================================== (Binary files differ) Deleted: trunk/eugene/src/site/resources/images/ObjectModel.png =================================================================== (Binary files differ) Deleted: trunk/eugene/src/site/resources/images/ObjectModel_Generator.png =================================================================== (Binary files differ) Deleted: trunk/eugene/src/site/resources/images/ObjectModel_Interfaces.png =================================================================== (Binary files differ) Modified: trunk/src/site/fr/rst/01-introduction.rst =================================================================== --- trunk/src/site/fr/rst/01-introduction.rst 2010-02-21 10:26:04 UTC (rev 819) +++ trunk/src/site/fr/rst/01-introduction.rst 2010-02-22 11:15:49 UTC (rev 820) @@ -76,6 +76,6 @@ +---------+---------------------+----------------------------+--------------+---------+-----------+ | Acceleo | Template spécifique | Lié à la pateforme Eclipse | Pas possible | Eclipse | Tout | +---------+---------------------+----------------------------+--------------+---------+-----------+ -| ATL | Tranformation de | Lié à la pateforme Eclipse | Pas possible | Eclipse | Modèle | -| | modèle en QVT | | | | | +| | Tranformation de | | | | | +| ATL | modèle en QVT | Lié à la pateforme Eclipse | Pas possible | Eclipse | Modèle | +---------+---------------------+----------------------------+--------------+---------+-----------+ Modified: trunk/src/site/fr/rst/02-objectmodel.rst =================================================================== --- trunk/src/site/fr/rst/02-objectmodel.rst 2010-02-21 10:26:04 UTC (rev 819) +++ trunk/src/site/fr/rst/02-objectmodel.rst 2010-02-22 11:15:49 UTC (rev 820) @@ -49,11 +49,11 @@ A partir du diagramme suivant : -.. image:: ../images/Hotel.png +.. image:: ../objectmodel/Hotel.png On obtient un ObjectModel tel que : -.. image:: ../images/Hotel.objectmodel.png +.. image:: ../objectmodel/Hotel.objectmodel.png Modèle mémoire @@ -64,15 +64,15 @@ Ainsi, le modèle instancié est basé sur le diagramme de classes (méta-modèle) suivant : -.. image:: ../images/ObjectModel.png +.. image:: ../objectmodel/ObjectModel.png Les interfaces disponibles pour les générateurs sont les suivantes : -.. image:: ../images/ObjectModel_Interfaces.png +.. image:: ../objectmodel/ObjectModel_Interfaces.png ObjectModelGenerator : -.. image:: ../images/ObjectModel_Generator.png +.. image:: ../objectmodel/ObjectModel_Generator.png Application des templates ========================= Modified: trunk/src/site/fr/rst/04-templates.rst =================================================================== --- trunk/src/site/fr/rst/04-templates.rst 2010-02-21 10:26:04 UTC (rev 819) +++ trunk/src/site/fr/rst/04-templates.rst 2010-02-22 11:15:49 UTC (rev 820) @@ -0,0 +1,192 @@ +Templates +========= + +:Author: Florian Desbois +:Contact: eugene-devel@list.nuiton.org ou eugene-users@list.nuiton.org +:Revision: $Revision: 818 $ +:Date: $Date$ + +Comme expliqué dans le chapitre précédent (`Processus de generation`_ ), il +y a deux possibilités pour générer des fichiers : + +- Utilisation d'un Generator (template écrite en Java avec utilisation de + Nuiton-processor) +- Utilisation d'un Transformer (transformation de modèle écrite en Java) + +.. _Processus de generation: 03-generation.html + +EUGene considère les Generator et les Transformer comme tout deux des templates +de génération avec comme point commun un modèle en entrée. La différence réside +à la sortie, le Generator aura la charge d'écrire des fichiers tandis que le +Transformer chargera un nouveau modèle de même type ou non. + +EUGene manipule principalement l'ObjectModel, il y a donc un existant abstrait +pour la manipulation de ce type de modèle : ObjectModelGenerator et +ObjectModelTransformer. + +EUGene implémente également une solution simple pour la génération de code Java. +Ainsi un générateur et un transformeur java sont disponibles : JavaGenerator et +ObjectModelTransformerToJava. + +Voici la hiérarchie qui en résulte : + +.. image:: ../schemas/04-templates-hierarchy.png + + +Nous allons commencer par décrire la syntaxe d'écriture d'un Generator avec +l'utilisation de Nuiton-processor. Ensuite nous décrirons l'utilisation +des Transformer pour finir sur la génération de code Java. + +.. contents:: + +Syntaxe d'écriture d'un Generator +--------------------------------- + +Pour créer un Generator il faut tout d'abord créer une nouvelle classe qui +hérite de l'ObjectModelGenerator pour le cas d'une génération depuis un +ObjectModel. + +TODO + +Generator disponibles +~~~~~~~~~~~~~~~~~~~~~ + +- AbstractGenerator : entrée à définir +- ObjectModelGenerator : ObjectModel en entrée +- StateModelGenerator : StateModel en entrée +- JavaGenerator : ObjectModel orienté Java (avec extensions) en entrée + +Implantation d'une transformation de modèle +------------------------------------------- + +Comme pour les Generator, les Transformer fonctionnent par héritage. Tout dépend +des types de modèle en entrée et en sortie souhaités. Pour un ObjectModel en +entrée, il faut hériter de l'ObjectModelTransformer. + +Les étapes du transformer sont les suivantes : + +- initialisation des sorties +- appel d'un transformer avant la présente transformation (utile pour certains + chaînages) +- transformation du modèle d'entrée +- appel de la template de sortie avec pour entrée le modèle de sortie + précédemment transformé. + +Entrée du transformer +~~~~~~~~~~~~~~~~~~~~~ + +L'entrée du Transformer est un Model. Généralement il s'agit d'un ObjectModel +mais il est possible de gérer d'autres types de modèle (comme StateModel par +exemple). + +Sortie du transformer +~~~~~~~~~~~~~~~~~~~~~ + +Il est nécessaire d'initialiser les sorties du Transformer : + +- Modèle de sortie : quelle est le type de modèle en sortie ? +- Template de sortie : quelle est la template qui se chargera de manipuler + le modèle de sortie ? Cela peut être soit un Generator, soit un autre + Transformer. + +ObjectModelTransformer +~~~~~~~~~~~~~~~~~~~~~~ + +L'ObjectModelTransformer propose un pattern simple pour transformer les +composantes du modèle. L'ensemble de l'ObjectModel va être parcouru et +pour chaque type d'élément (Classifier, Class, Interface, Enumeration) +une méthode associé permettra sa transformationn, le développeur aura la charge +d'écraser ces méthodes pour faciliter la transformation :: + + public void transformFromModel(ObjectModel model) { + } + + public void transformFromInterface(ObjectModelInterface interfacez) { + } + + public void transformFromClass(ObjectModelClass clazz) { + } + + public void transformFromClassifier(ObjectModelClassifier clazz) { + } + + public void transformFromEnumeration(ObjectModelEnumeration enumeration) { + } + +L'ObjectModelTransformer est abstrait et nécessite un héritage pour spécifier +le type de modèle en sortie (Pour le cas de la génération Java il s'agit +également de l'ObjectModel). + +ObjectModelBuilder +~~~~~~~~~~~~~~~~~~ + +Cet outil permet de remplir un ObjectModel directement depuis un Transformer. +Il s'agit bien évidemment du cas où le modèle de sortie du Transformer est +un ObjectModel. Cette classe permet de faciliter l'écriture de l'ObjectModel, +les interfaces de ce modèle étant dépourvus de setters. + +Exemples de méthodes disponibles : + +- createClass : création d'un ObjectModelClass +- createInterface : création d'un ObjectModelInterface +- addOperation : ajout d'une méthode à un ObjectModelClassifier + (ObjectModelClass ou ObjectModelInterface) +- addAttribute : ajout d'un attribute à un ObjectModelClassifier +- addParamater : ajout d'un paramètre à un ObjectModelOperation +- ... + +Transformer disponibles +~~~~~~~~~~~~~~~~~~~~~~~ + +- Transformer : entrée et sortie à définir +- ObjectModelTransformer : ObjectModel en entrée, sortie à définir +- ObjectModelTransformerToJava : ObjectModel en entrée, ObjectModel en sortie, + JavaGenerator en template de sortie. + +Générateur de java +------------------ + +Tous les éléments de la chaîne de génération sont disponibles pour une +génération de code Java à partir d'un modèle de données XMI (package +org.nuiton.eugene.java) : + +- Fichiers en entrée : xmi, objectmodel, zargo, zuml +- Reader : ObjectModelReader +- input Model : ObjectModel +- output Model : ObjectModel orienté Java (avec extensions) +- Transformer abstrait : ObjectModelTransformerToJava +- Generator de sortie : JavaGenerator + +Pour chaque type de génération souhaité, il suffit donc d'hérité de +ObjectModelTransformerToJava et d'utiliser les méthodes transformFrom +pour enregistrer l'ObjectModel de sortie orienté Java qui sera automatiquement +généré via le JavaGenerator. Le principe reste d'interpréter les spécificités +UML du modèle d'entrée pour les transformer en Java selon les besoins techniques +(technologie, framework, environnement, ...). + +JavaBuilder +~~~~~~~~~~~ + +Pour faciliter l'écriture de l'ObjectModel orienté Java, le JavaBuilder est +utilisé de façon transparente car l'ObjectModelTransformerToJava propose +l'ensemble de ses méthodes directement (délégation). Ainsi, la transformation +se fait via le parcours du modèle d'entrée et l'utilisation de ces méthodes +pour charger le modèle de sortie. + +Exemples de méthodes : + +- createClass : création d'un ObjectModelClass +- createInterface : création d'un ObjectModelInterface +- addImport : ajout d'un import à un ObjectModelClassifier +- addAnnotation : ajout d'une annotation à un ObjectModelElement +- setSuperClass : ajoute une superclass à un ObjectModelClassifier (extends) + avec ajout de l'import automatique sur le type de la superclass. +- addConstant : ajoute une constante (static final) à un ObjectModelClassifier +- addConstructor : ajoute un constructeur à une classe. +- ... + +Note + La gestion des imports est faite automatiquement sur les types manipulés + (type d'attribut, de paramètre, retour de méthode, interface, ...). Cette + gestion utilise l'extension ImportsManagerExtension qui gère un ImportsManager + par classifier. \ No newline at end of file Property changes on: trunk/src/site/fr/rst/04-templates.rst ___________________________________________________________________ Added: svn:keywords + Revision, Date Modified: trunk/src/site/fr/rst/07-glossaire.rst =================================================================== --- trunk/src/site/fr/rst/07-glossaire.rst 2010-02-21 10:26:04 UTC (rev 819) +++ trunk/src/site/fr/rst/07-glossaire.rst 2010-02-22 11:15:49 UTC (rev 820) @@ -0,0 +1,35 @@ +Glossaire +========= + +- MDA : + Model Driven Architecture : technique de programmation basé sur les modèles. + +- UML : + Unified Modeling Language : langage de modélisation. + +- XMI : + XML Metadata Interchange : norme XML pour le langage UML. + +- Template : + Classe permettant la génération de fichiers à partir d'un modèle de données. + +- Transformer : + Transformateur de modèle : conversion d'un modèle A en modèle B. + +- Generator : + Générateur de fichiers de sorties à partir d'un modèle d'entrée. + +- ObjectModel : + Méta-modèle objet d'EUGene avec spécificités UML (multiplicités, héritage, ...) + +- Builder : + Constructeur de modèle, permet de créer et remplir un modèle directement en + Java. + +- Extension : + Extensions de modèle, permet de rajouter des fonctionnalités spécifiques à + un modèle. Utilisé principalement dans l'ObjectModel pour y rattacher les + spécificités au langage Java non présente par défaut. + +- Nuiton-processor : + Librairie permettant d'interprété la syntaxe des templates. Modified: trunk/src/site/fr/rst/08-FAQ.rst =================================================================== --- trunk/src/site/fr/rst/08-FAQ.rst 2010-02-21 10:26:04 UTC (rev 819) +++ trunk/src/site/fr/rst/08-FAQ.rst 2010-02-22 11:15:49 UTC (rev 820) @@ -14,3 +14,28 @@ Les diagrammes ne sont pas convertie, il faut donc les recréer a partir des classes en faisant du drag&drop. + +Comment écrire le corps des méthodes dans un Transformer ? +========================================================== + +L'intérêt des Transformer est d'utiliser au minimum la syntaxe template pour +générer le code final. Cependant il est nécessaire d'utiliser cette syntaxe +pour le corps des méthodes. Nuiton-processor interprète différemment les +Transformer des Generator, il est nécessaire de rajouter en en-tête d'un +transformer la configuration suivante :: + + /*{generator option: parentheses = false}*/ + /*{generator option: writeString = +}*/ + +Il suffit ensuite d'utiliser les balises /*{ }*/ pour ajouter le corps d'une +méthode :: + + setOperationBody(setValue, "" + /*{ + this.value = value; + }*/ + ); + +Note + Il est conseillé de faire des essais pour la mise en page du fichier résultant + au même titre que pour les résultats d'un Generator. Modified: trunk/src/site/fr/rst/eugene-plan.rst =================================================================== --- trunk/src/site/fr/rst/eugene-plan.rst 2010-02-21 10:26:04 UTC (rev 819) +++ trunk/src/site/fr/rst/eugene-plan.rst 2010-02-22 11:15:49 UTC (rev 820) @@ -51,15 +51,15 @@ - FAQ -Introduction ------------- +1- Introduction +--------------- Ressource : jruchaud? - Revoir DiscussionSurTypeDeGeneration.rst -MétaModel : ObjectModel ------------------------ +2- MétaModel : ObjectModel +-------------------------- Présentation ~~~~~~~~~~~~ @@ -75,15 +75,15 @@ Ressource : jruchaud? -Processus de génération ------------------------ +3- Processus de génération +-------------------------- Ressource : fdesbois - Diagrammes d'activités : processus standard, processus avec transformer, processus java -Template --------- +4- Templates +------------ - Diagramme de classes sur l'héritage entre Template, Generator, Transformer, ... @@ -117,9 +117,26 @@ - JavaBuilder - ImportsManager -Fonctionnalités avancées ------------------------- +5- Build (Execution) +-------------------- +Ant +~~~ + +Ressource : echatellier? + +- plugin eclipse ??? + +Maven +~~~~~ + +Ressource : tchemit? + +- Documentation existante : maven-eugene-plugin + +6- Fonctionnalités avancées +--------------------------- + Writer ~~~~~~ @@ -143,40 +160,23 @@ - extension de l'ObjectModel - extensions pour Java : imports, annotations, constantes, ... -Build ------ - -Ant -~~~ - -Ressource : echatellier? - -- plugin eclipse ??? - -Maven -~~~~~ - -Ressource : tchemit? - -- Documentation existante : maven-eugene-plugin - Divers ------ -Glossaire -~~~~~~~~~ +7- Glossaire +~~~~~~~~~~~~ Ressources : tout le monde - A compléter au fur et à mesure -FAQ -~~~ +8- FAQ +~~~~~~ - Reprendre existant + compléments si besoin -Tutoriels -~~~~~~~~~ +9- Tutoriels +~~~~~~~~~~~~ - Cas concrets, en attente car très long à produire Added: trunk/src/site/resources/binaries/eugene_v2.0.zargo =================================================================== (Binary files differ) Property changes on: trunk/src/site/resources/binaries/eugene_v2.0.zargo ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/src/site/resources/binaries/eugene_v2.0_simplify.zargo =================================================================== (Binary files differ) Property changes on: trunk/src/site/resources/binaries/eugene_v2.0_simplify.zargo ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Copied: trunk/src/site/resources/objectmodel/Hotel.objectmodel.png (from rev 817, trunk/eugene/src/site/resources/images/Hotel.objectmodel.png) =================================================================== (Binary files differ) Property changes on: trunk/src/site/resources/objectmodel/Hotel.objectmodel.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: svn:mergeinfo + /branches/1.0.1-Javabuilder/eugene/src/site/resources/images/Hotel.objectmodel.png:641-651 /branches/1.1.0-Javabuilder/eugene/src/site/resources/images/Hotel.objectmodel.png:652-681 /branches/eugene-2.0/eugene/src/site/resources/images/Hotel.objectmodel.png:682-754 Copied: trunk/src/site/resources/objectmodel/Hotel.png (from rev 817, trunk/eugene/src/site/resources/images/Hotel.png) =================================================================== (Binary files differ) Property changes on: trunk/src/site/resources/objectmodel/Hotel.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: svn:mergeinfo + /branches/1.0.1-Javabuilder/eugene/src/site/resources/images/Hotel.png:641-651 /branches/1.1.0-Javabuilder/eugene/src/site/resources/images/Hotel.png:652-681 /branches/eugene-2.0/eugene/src/site/resources/images/Hotel.png:682-754 Copied: trunk/src/site/resources/objectmodel/ObjectModel.png (from rev 817, trunk/eugene/src/site/resources/images/ObjectModel.png) =================================================================== (Binary files differ) Property changes on: trunk/src/site/resources/objectmodel/ObjectModel.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: svn:mergeinfo + /branches/1.0.1-Javabuilder/eugene/src/site/resources/images/ObjectModel.png:641-651 /branches/1.1.0-Javabuilder/eugene/src/site/resources/images/ObjectModel.png:652-681 /branches/eugene-2.0/eugene/src/site/resources/images/ObjectModel.png:682-754 Copied: trunk/src/site/resources/objectmodel/ObjectModel_Generator.png (from rev 817, trunk/eugene/src/site/resources/images/ObjectModel_Generator.png) =================================================================== (Binary files differ) Property changes on: trunk/src/site/resources/objectmodel/ObjectModel_Generator.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: svn:mergeinfo + /branches/1.0.1-Javabuilder/eugene/src/site/resources/images/ObjectModel_Generator.png:641-651 /branches/1.1.0-Javabuilder/eugene/src/site/resources/images/ObjectModel_Generator.png:652-681 /branches/eugene-2.0/eugene/src/site/resources/images/ObjectModel_Generator.png:682-754 Copied: trunk/src/site/resources/objectmodel/ObjectModel_Interfaces.png (from rev 817, trunk/eugene/src/site/resources/images/ObjectModel_Interfaces.png) =================================================================== (Binary files differ) Property changes on: trunk/src/site/resources/objectmodel/ObjectModel_Interfaces.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: svn:mergeinfo + /branches/1.0.1-Javabuilder/eugene/src/site/resources/images/ObjectModel_Interfaces.png:641-651 /branches/1.1.0-Javabuilder/eugene/src/site/resources/images/ObjectModel_Interfaces.png:652-681 /branches/eugene-2.0/eugene/src/site/resources/images/ObjectModel_Interfaces.png:682-754 Added: trunk/src/site/resources/schemas/04-templates-hierarchy.png =================================================================== (Binary files differ) Property changes on: trunk/src/site/resources/schemas/04-templates-hierarchy.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream