logo MagicDraw
Version 17.0

Le besoin est de pouvoir créer de nouveaux templates car ceux présents par défaut dans MagicDraw ne correspondent généralement pas aux documents que l’on souhaite générer.

Création d’un template

1. Prérequis

logo Velocity

Les templates reposent sur le moteur de templates d’Apache : Velocity. Ce moteur fournit un langage simple et puissant d’objet référencé défini en Java.

Il est donc nécessaire d’avoir:

2. Fonctionnement

Fonctionnement de la génération de document
Fonctionnement de la génération de document
  1. Créer un nouveau fichier template
    Voici les types de fichiers supportés : .txt, .html, .rtf, .docx (depuis les versions de MagicDraw)
    Les styles définis dans les documents .rtf ou .docx sont conservés
  2. Déclarer le nouveau template dans MagicDraw
  3. Lancer la génération sur les données du projet
Déclaration d'un nouveau teamplate dans MagicDraw
Déclaration d’un nouveau teamplate dans MagicDraw

3. Développement

La documentation fournie par MagicDraw est assez complète et répond à une majorité de questions que l’on peut se poser lors de l’implémentation d’un template. Nous allons quand même voir quelques bouts de code (assez basiques) intéressants pour débuter.

Récupérer tous les diagrammes du projet
On boucle ici sur tous les diagrammes en affichant leur nom, leur documentation et leur image:
#foreach($diagram in $Diagram)
$diagram.name
$diagram.documentation
$diagram.image
#end

$Diagram est une variable qui contient tous les diagrammes du scope
$UseCase qui contient tous les Use Cases du scope
$Class qui contient toutes les Classes du scope

Récupérer tous les éléments d’un diagramme
#set($diagramElements = $report.getDiagramElements($diagram))
Filtrer les elements
Parmi les éléments du diagramme on retrouvera aussi les associations (qu’on ne souhaite souvent pas récupérer). Le code suivant permet de filtrer une collection d’éléments:
#set($diagramClasses = $report.filterElement($report.getDiagramElements($diagram), ["Class"]))

Récupérer les éléments « fils » d’un élément
Cela peut être très utile pour récupérer tous les éléments d’un package par exemple:
#set ($children = $element.ownedElement)

Récupérer une propriété d’un élément
#set ($description = $report.getDSLProperty($element, "Description"))

Inclure une partie d’un autre fichier
Il est commun d’ajouter du contenu dans un document que l’on vient de générer, le problème est que lors de la génération suivante il faudra faire des copier/coller de tout le contenu qui a été ajouté (pire, si le document généré écrase l’ancien, le contenu ajouté est perdu). Inclure du texte d’un autre document peut donc s’avérer très utile. Le contenu à ajouter est découpé dans plusieurs sections d’un document indépendant qui seront incluses dans le rapport à chaque génération.

Voici la ligne qui permet d’inclure la section nommée « sectionOne » du fichier sections.rtf :
#includeSection("sections.rtf", "sectionOne")

Le fichier sections.rtf :
#sectionBegin ("sectionOne")
Contenu de ma première section à inclure
#sectionEnd
#sectionBegin ("sectionTwo")
Contenu de ma seconde section à inclure
#sectionEnd

Afin de faciliter la mise en place de templates complexes il est possible d’implémenter un « helper » en Java. Il s’agit d’une sorte de plugin MagicDraw qui pourra être interrogé directement en velocity.

A vous de jouer!

Publicités