Exemple de Template Simples

 
Que fait cet exemple ?
Les fichiers détaillés ci-dessous démontrent comment créer et utiliser ses propres fichiers de templates *.xdt avec XDoclet pour générer du code (ou du texte) personnalisé. Le lancement avec Ant du fichier build.xml va générer :
  1. Un seul fichier sommaire.txt qui contiendra les informations rassemblées à partir de tous les fichiers *.java.
  2. Un fichier 'nom_classe'.txt pour chaque fichier java.
Pour exécuter cet  exemple :
  1. Installer Ant et XDoclet.
  2. Télécharger l'archive extemplate.zip (contenant les fichiers de l'exemple) en cliquant sur l'image : .
  3. Décompresser cette archive.
  4. Modifier le fichier build.xml pour qu'il contienne les chemins appropriés à votre système.
  5. Lancer Ant (commande 'ant') dans le répertoire contenant le fichier build.xml.
  6. Regarder les fichiers générés dans le répertoire 'dest'.

Présentation des différents fichiers

Liste des fichiers et explication

Dans cet exemple nous n'avons défini que 2 balises spécifiques :

./src/paquetage1/MaClasse.java

 package paquetage1;

/**
 * C'est une classe
 * @test.importance MAJEUR
 */

public class MaClasse
{
    /**
     * Une méthode.
     *           
     * @test.autre CECI EST LA VALEUR DU TAG test.autre
     */

    String Bonjour()
    {
        return "Bonjour";
    }
}

Ce fichier correspond à une classe appelée MaClasse située dans le paquetage paquetage1. Cette classe contient une balise de niveau classe @test.importance et une balise de niveau méthode @test.autre
./src/paquetage1/MonAutreClasse.java

package paquetage1;

/**
 * C'est une autre classe
 * @test.importance MINEURE
 */
public class MonAutreClasse
{

}

Ce fichier correspond à une classe appelée MonAutreClasse située dans le paquetage paquetage1. Cette classe contient uniquement la balise de niveau classe @test.importance
./src/paquetage2/MaClasse.java

package paquetage2;

/**
 * C'est une autre classe 
 * @test.importance MINEURE
 */
public class MaClasse
{

}

Ce fichier correspond à une classe appelée MaClasse située dans le paquetage paquetage2. Cette classe contient uniquement une balise de niveau classe @test.importance.
./sommaire.xdt

- Liste pour toutes les classes

<XDtClass:forAllClasses>

   - <XDtClass:className/>, dans le paquetage '<XDtPackage:packageNameAsPath/>'

	<XDtClass:ifHasClassTag tagName="test.importance">
   	   <XDtClass:ifClassTagValueEquals value="MAJEUR" tagName="test.importance">
	      ******************************************
	      <XDtClass:classTagValue tagName="test.importance"/>
	      ******************************************
	   </XDtClass:ifClassTagValueEquals>

   	   importance : <XDtClass:classTagValue tagName="test.importance"/>

	</XDtClass:ifHasClassTag>

    <XDtMethod:forAllMethods>
      - <XDtMethod:methodName/>()
    </XDtMethod:forAllMethods>

</XDtClass:forAllClasses>


Ce fichier correspond au template qui servira à générer le fichier unique sommaire.txt.
Expliquons ce fichier :
Tout le texte fixe (texte hors balises) écrit dans ce fichier sera réécrit dans le fichier de destination sommaire.txt. Pour la génération de texte variable, il faut indiquer des opérations spécifiques à l'aide de balises XDoclet qui seront interprétées. Pour plus de détail sur les différentes balises interprétables existantes et comment coder son template, référez-vous au manuel de XDoclet ou au site.

Dans notre exemple, XDoclet va parcourir toutes les classes (forAllClasses) et pour chacune indiquer son nom (className)et son paquetage.
    Ensuite on teste si une classe contient la balise test.importance
   
si c'est le cas, on teste si cette balise a pour valeur MAJEUR 
            si oui on affiche la valeur de la balise entouré par des étoiles.
            Ensuite on affiche la valeur de la balise test.importance.
        On parcourt ensuite toutes les méthodes (forAllMethods) de chaque classe et on affiche leur nom (methodName).

./each-class.xdt

Classe <XDtClass:className/>, dans le paquetage '<XDtPackage:packageNameAsPath/>'
<XDtMethod:forAllMethods>
    - <XDtMethod:methodName/>()
    <XDtMethod:ifHasMethodTag tagName="test.autre">
        - <XDtMethod:methodTagValue tagName="test.autre" />
    </XDtMethod:ifHasMethodTag>
</XDtMethod:forAllMethods>

Ce fichier correspond au template qui servira à générer les fichiers de description pour chaque classe nom_classe.txt.
Dans notre exemple, XDoclet va indiquer le nom de la classe et son paquetage, puis parcourir toutes les méthodes (forAllMethods) de cette classe. Il ajoute alors dans le fichier le nom de la méthode et éventuellement la valeur de la balise test.autre si elle est présente
./build.xml
<project default="generation">

<!-- INITIALISATION DES VARIABLES -->
  <target name="initialisation">
    <path id="class.path">
<!-- ADAPTER CE PATH A VOTRE SYSTEME-->    
        <fileset dir="c:/xdoclet/lib" includes="*.jar"/>
    </path>
   </target>

<!-- CREATION DU REPERTOIRE DE SORTIE -->
  <target name="repertoire" depends="initialisation">
      <mkdir dir="dest" />
   </target>


<!--  GENERATION DES FICHIERS -->

    <target name="generation" depends="repertoire">

	<taskdef name="doclet" classname="xdoclet.DocletTask"
	  classpathref="class.path" />

        <!-- UN SEUL FICHIER -->
        <doclet destdir="./dest" sourcePath="./src">
            <fileset dir="src" includes="**\*.java"/>
            <template templateFile="sommaire.xdt"
		 destinationfile="sommaire.txt" />
        </doclet>

        <!-- FICHIERS POUR CHAQUE CLASSE -->
        <doclet destdir="dest" sourcePath="./src">
            <fileset dir="src">
                <include name="**/*.java"/>
            </fileset>
            <template
                templateFile="each-class.xdt"
                destinationfile="{0}.txt">
            </template>
        </doclet>

    </target>
</project>

Ceci est le fichier de génération utilisé par Ant. 3 tâches distinctes ont été définies :  

Fichiers générés :


Télécharger l'archive extemplate.zip contenant les fichiers de l'exemple en cliquant sur l'image : .