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(a)list.nuiton.org ou eugene-users(a)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