Projet

Général

Profil

Actions

Feature #13791

fermé

Migrer StringTemplate de la version 3 à la version 4

Ajouté par Miguel Moquillon il y a environ un an. Mis à jour il y a 6 mois.

Statut:
Closed
Priorité:
Normal
Assigné à:
Catégorie:
-
Début:
10/10/2023
Echéance:
% réalisé:

0%

Temps estimé:
Livraison en TEST:
Livraison en PROD:

Description

En vue du passage à Jakarta EE 10, StringTemplate qui s'appuie sur Antlr nécessite d'être mise à jour à sa dernière version parce que la version d'Antlr supportée par Wildfly est désormais la version 4.

De plus, la version 4 d'Antlr et donc de StringTemplate est bien plus performant, ce qui permettra de profiter de ces gains lors de la génération de texte ou de fichier à partir de modèle StringTemplate.

Mis à jour par Miguel Moquillon il y a environ un an

  • Statut changé de New à In progress...

Compatibilité et limitation

StringTemplate 4 supporte plusieurs syntaxes de templating, dont celle de la version 3. Aussi, par soucis de compatibilité, c'est cette syntaxe qui est définie par défaut dans l'API de Silverpeas Template. Toutefois, il y a un changement par rapport aux dernières versions de StringTemplate 3 : l'indentation de code n'y est plus supporté . Ainsi, un template comme celui-ci :

RAPPEL : $contributionTitle;format="toUpperFirstChar"$ aura lieu $if(reminderContributionSeveralDays)$
$if(reminderContributionStart.timeExisting)$
du $reminderContributionStart.dayDate$ à $reminderContributionStart.dayTime$ au $reminderContributionEnd.dayDate$ à $reminderContributionEnd.dayTime$
$else$
du $reminderContributionStart.dayDate$ au $reminderContributionEnd.dayDate$
$endif$
$else$
$if(reminderContributionStart.timeExisting)$
le $reminderContributionStart.dayDate$ de $reminderContributionStart.dayTime$ à $reminderContributionEnd.dayTime$
$else$
le $reminderContributionStart.dayDate$
$endif$
$endif$
$if(reminderContributionZoneId)$
 ($reminderContributionZoneId$)
$endif$
.

produira, par exemple, avec StringTemplate 4 :
RAPPEL : L'événement <b>super test</b> aura lieu 
le 21/02/2018
 (UTC)
.

au lieu de :
RAPPEL : L'événement <b>super test</b> aura lieu le 21/02/2018 (UTC).

Dans StringTemplate 4, les espaces, tabulations, retour à la ligne, etc. sont pris comme tels dans la génération du texte à partir du modèle. Par conséquent, les templates devront être formatés comme à l'origine, sans indentation. Ce qui donne avec notre exemple :
RAPPEL : $contributionTitle;format="toUpperFirstChar"$ aura lieu $if(reminderContributionSeveralDays)$$if(reminderContributionStart.timeExisting)$du $reminderContributionStart.dayDate$ à $reminderContributionStart.dayTime$ au $reminderContributionEnd.dayDate$ à $reminderContributionEnd.dayTime$$else$du $reminderContributionStart.dayDate$ au $reminderContributionEnd.dayDate$$endif$$else$$if(reminderContributionStart.timeExisting)$le $reminderContributionStart.dayDate$ de $reminderContributionStart.dayTime$ à $reminderContributionEnd.dayTime$$else$le $reminderContributionStart.dayDate$$endif$$endif$$if(reminderContributionZoneId)$ ($reminderContributionZoneId$)$endif$.

Dans le cas de templates conséquents, pour lesquels l'indentation apporte une visibilité importante, il sera nécessaire de passer à un descripteur de template. Mais pour ce faire, il faudra alors utiliser en lieu et place de la méthode

SilverpeasTemplate#applyFileTemplate(String fileName)

utiliser la méthode
SilverpeasTemplate#applyFileTemplateDescriptor(String descriptor)

Descripteur de template

A côté de ce que StringTemplate appelle les modèles bruts ("raw template"), vue ci-dessus, la version 4 supporte une nouvelle forme de définition de template que j'ai appelé les descripteurs de templates. Un descripteur de template n'est ni plus, ni moins, une définition d'un template dans un fichier, cette définition devant respecter la grammaire suivante :

"Template Name"("Comma-Separated list of attributes") ::= << "Template body" >> | <% "Template body" %>

La liste des attributs en paramètre du template, à passer au corps de celui-ci, doivent être définis via l'appel à la méthode
SilverpeasTemplate#setAttribute(String name, Object value)

Par contre, tout ajout d'attribut dans un SilverpeasTemplate doit être déclaré parmi la liste des attributs passés en argument du template, même ceux qui ne sont pas utilisés dans le corps du template.
L'avantage du descripteur est qu'il permet d'indiquer explicitement les attributs attendus par le modèle et, via les marqueurs du corps de template <% et %> de pouvoir indenter le code du template dans son corps. Par opposition, les marqueurs << et >> signifient que les indentations doivent être traités par le générateur de texte (comme avec les modèles bruts).

Mis à jour par Miguel Moquillon il y a environ un an

  • Statut changé de In progress... à Resolved
  • Version cible changé de Version 6.5 à Version 6.4

Le POM parent de tous les projets Silverpeas

Seul le projet Silverpeas Dependencies BOM a été mis à jour avec StringTemplate 4.
Les autres projets sont proposés en PR pour que les versions entre les différents projets correspondent.

Les PR des projets à intégrer :

Silverpeas

Les PR des projets à intégrer :

Mis à jour par David Lesimple il y a environ un an

  • Version cible changé de Version 6.4 à Version 6.5

Mis à jour par David Lesimple il y a 6 mois

  • Version cible changé de Version 6.5 à Version 6.6

Mis à jour par Miguel Moquillon il y a 6 mois

  • Version cible changé de Version 6.6 à Version 6.5

Le PR est prêt. J'attendais la sortie de la 6.4 pour intégrer ce PR

Mis à jour par Miguel Moquillon il y a 6 mois

  • Statut changé de Resolved à Closed

Intégré dans master

Actions

Formats disponibles : Atom PDF