TwinXeon by Renaudet
Le générateur Java Template Page

Table des matières

Introduction

J'avais développé un moteur de page JSP pour le serveur twinxeon et l'idée m'est venue d'intégrer ce moteur à Eclipse, à la manière des pages JET. Cependant, je désirais pouvoir déclencher la génération depuis un même workspace, c'est à dire sans avoir à créer un plugin spécifique. C'est comme ça que le projet du générateur à base de Java Template Page a été lancé.

Principe

Le principe des Java Template Pages est exactement le même que celui des pages JSP. On part d'un fichier quelconque que l'on souhaite utiliser comme base de génération, on ajoute des tags JTP ou des scriptlets JTP et on renomme le fichier en utilisant l'extension .jtp. Le runtime JTP va compiler le template sous forme d'une classe Java qui sera ré-intégrée dynamiquement par le runtime pour servir de générateur. Le contexte de génération peut alors être fourni au générateur interactivement par analyse des meta-informations contenues dans le template, ou via un template parent.

Exemple

Nous allons générer un fichier XML contenant une fiche de définition de client en nous servant d'un fichier existant comme modèle. La première étape est de renommer le fichier avec l'extension '.jtp' et de rajouter les balises spécifiques au runtime JTP afin de lui enseigner à générer ce type de fichier. Le fichier XML est épuré de ses données pour ne conserver que la structure du document.
[source initial]
Le document XML initial : customer.xml
[source enrichit]
Notre nouveau template JTP : customerTemplate.jtp
A ce stade, il est possible d'utiliser le template pour générer un squelette de fichier XML, ce qui peut déjà sembler pratique. Il suffit de sélectionner le template et d'utiliser le menu popup Java Template Page / Generate from template. Une boîte de dialogue dynamique s'ouvre après pré-analyse du template pour demander le répertoire cible de génération, qui est par défaut le projet Eclipse de base contenant le template, et la base du nom de fichier à générer, l'extension étant précisée dans le template.

C'est là l'une des différence essentielle entre le runtime JTP et le framework JET : l'utilisation du template est immédiate.
[generation1]
La boîte de dialogue de génération à partir du template
Le générateur créé un nouveau projet de type Java dans le Workspace. Il s'agit d'un projet caché configuré de sorte que la racine des packages soit le dossier du projet lui-même. Dans ce projet, le générateur va compiler le template sous la forme d'une classe Java implémentant l'interface TemplatePage. Il s'agit grosso-modo d'une page JSP qui lit le template en s'initialisant et 'écrit' les portions de base du template lors de la génération. Le code source de cette page est disponible ici.

Cette classe est ensuite chargée dynamiquement par le runtime et invoquée de manière à générer le contenu du fichier cible.
[generation2]
Le source XML généré
[errorLog1]
Traces du générateur dans la vue Error
Pour rendre ce template vraiment utile, ajoutons quelques balises et une ou deux scriptlets :
[source enrichit 2]
Le template enrichit de code dynamique
[generation3]
La boîte de dialogue prend en compte les méta-données de génération
[generation4]
Le fichier XML généré
[errorLog2]
Les traces du générateur indiquent une réconciliation
Comme le montrent les traces du générateur, il y a bien eu réconciliation entre le fichier issue de la génération précédente et le contenu nouvellement généré. Cette fonctionnalité du runtime JTP permet de définir des zones utilisateur qui ne seront pas modifiées à l'issue de la génération. La seule contrainte est que le nombre de ces zones doit être le même entre un template et un fichier généré sur lequel la réconciliation s'opère. Si la réconciliation s'avère impossible, le fichier anciennement généré est conservé pour réconciliation manuelle, le contenu utilisateur étant considéré comme très important.
Un exemple de Template JTP assez élaboré est présenté en section A Propos... du site (voir la section A propos du design de TwinXeon)

(Les plugins du moteur Java Template Page pour Eclipse sont disponibles en section Téléchargement du site)

(Vous avez aimé cet article, vous souhaitez faire un commentaire, merci de m'en faire part en remplissant ce formulaire)

Site optimisé pour un affichage en 800x600 sous Firefox 8.x - ©Copyright 2011-2012 by Nicolas Renaudet