Author: fdesbois Date: 2010-02-25 19:28:22 +0100 (Thu, 25 Feb 2010) New Revision: 826 Modified: trunk/src/site/fr/rst/06-fonctionnalites-avancees.rst Log: Add documentation : advanced features chapter (missing some explanations about Writer and maven integration) Modified: trunk/src/site/fr/rst/06-fonctionnalites-avancees.rst =================================================================== --- trunk/src/site/fr/rst/06-fonctionnalites-avancees.rst 2010-02-24 18:09:06 UTC (rev 825) +++ trunk/src/site/fr/rst/06-fonctionnalites-avancees.rst 2010-02-25 18:28:22 UTC (rev 826) @@ -0,0 +1,103 @@ +Fonctionnalités avancées +======================== + +:Author: Florian Desbois +:Contact: eugene-devel@list.nuiton.org ou eugene-users@list.nuiton.org +:Revision: $Revision$ +:Date: $Date$ + +Ce chapitre concerne les fonctionnalités avancées d'EUGene, c'est à dire, +comment étendre EUGene pour l'adapter à un autre modèle que l'ObjectModel +ou comment étendre ce dernier par le biais des extensions. + +EUGene peut être étendu sur les quatres notions de base : + +- `Writer`_ : conversion fichiers vers fichiers +- `Reader`_ : conversion fichiers vers modèle +- Transformer : conversion modèle vers modèle (voir `Templates`_ ) +- Generator : conversion modèle vers fichiers (voir `Templates`_ ) + +Les `extensions`_ permettent également d'enrichir le modèle de base d'EUGene : +l'ObjectModel. + +.. _Templates: 04-templates.html + +.. _Writer: 06-fonctionnalites-avancees.html#Writer + +.. _Reader: 06-fonctionnalites-avancees.html#Reader + +.. _extensions: 06-fonctionnalites-avancees.html#Extension + +Writer +------ + +EUGene gère par défaut les formats de fichiers d'entrée suivants : + +- xmi : fichier standard pour le langage de modélisation UML. Les versions + 1.2 et 2.1 du xmi sont supportés par EUGene +- zargo : fichier `ArgoUML`_ (xmi 1.2) +- zuml : fichier `TopCased`_ (xmi 2.1 voir 3.0) +- objectmodel : version simplifié du xmi pour générer de l'ObjectModel +- statemodel : version simplifié du xmi pour générer du StateModel + +TODO : explication chainage + +Reader +------ + +Le Reader permet de charger un Model à partir de fichiers. Il sert à l'execution +d'EUGene pour lire certains fichiers d'entrée et remplir le modèle correspondant. +Les deux Reader disponibles sont : + +- ObjectModelReader : utilisation de digester pour lire les fichiers + **objectmodel**. +- StateModelReader : utilisation de digester pour lire les fichiers + **statemodel**. + +Il est possible de gérer un autre format de fichier en entrée et de le manipuler +via un nouveau Reader que vous devrez créer en héritant du Reader de base. Il +est également possible de gérer un autre type de Model et de créer un Reader +qui se chargera de le remplir. + +TODO : intégration reader dans maven + +Extension +--------- + +EUGene manipule majoritairement l'ObjectModel. Ce modèle fourni à 90% l'ensemble +des fonctionnalités nécessaires à la génération de nombreux fichiers de sorties +quelque soit le langage de programmation. Cependant certaines spécifités propres +à ces langages bloquent l'utilisation de l'ObjectModel et mènerait le développeur +à créer un nouveau modèle finalement très proche de l'ObjectModel existant. + +L'idée est donc d'étendre l'ObjectModel via des extensions pour ne pas perturber +son but premier : fournir un ensemble de classes représentant la norme UML. + +L'ObjectModel racine permet la récupération d'une extension avec une référence +unique. Si l'extension n'existe pas, elle sera automatiquement créer. +Il faut utiliser pour se faire la méthode :: + + <O> O getExtension(String reference, Class<O> extensionClass) + throws ClassCastException, IllegalArgumentException; + +Il vous suffit donc d'attacher n'importe quelle classe au modèle pour pouvoir +la manipuler en tant qu'extension. Le but étant de pouvoir la récupérer +à n'importe quel moment du processus de génération (reader, transformer, +generator). + +Pour Java, trois extensions ont été créés : + +- ImportsManagerExtension : associe un ImportsManager avec un ObjectModelClassifier. + L'ImportsManager se charge d'enregistrer tous les imports nécessaires à ce + classifier (class, interface, enum). + +- AnnotationsManagerExtension : associe un AnnotationsManager à un ObjectModelClassifier. + L'AnnotationManager se charge d'enregistrer les annotations pour un classifier + sur un ObjectModelElement (operation, parameter, attribute, classifier, ...) + +- ConstantsManagerExtension : permet de gérer un cache sur les noms des constantes + manipulés pendant une génération. TODO : more explanation about this + + + +
participants (1)
-
fdesbois@users.nuiton.org