Pebble Template ou Twig pour Java

Pebble est un moteur de templates inspiré par la syntaxe de Twig. J'ai eu l'opportunité de m'en servir dans un contexte d'envoi de mail customisé pour les utilisateurs.

Un poids plume

Comparé à ses concurrents directs que sont Freemarker et Velocity, Pebble est de loin le plus léger au regard de la taille de sa dépendance.

Pebble

2.4.0

Freemarker

2.3.26-incubating

Velocity

1.7

167 KB 1.4 MB 503 KB

Un ensemble complet de fonctionnalités

Tout comme ses concurrents plus anciens Pebble couvre un ensemble large de fonctionnalités tels que :

  • L'inclusions d'autres templates
  • La gestion de l'i18n
  • L'intégration de macros
  • La création de filtres et fonctions personnalisées
  • L'échappement de caractères en fonction du contexte , des stratégies d'échappement existent déjà(css, html, html_attr, js et url_param)

Twig pour Java

Pebble reprend la syntaxe de Java pour les opérations simples telles que les opérations mathématiques (+, -, /,%, x),les comparaisons (!=,==,...)  ainsi que pour l'opérateur ternaire ( est Vrai ? "oui": "non").

Une différence se fait sur les opérateurs logiques ( && et ||  deviennent respectivement "and" et "or").

Pour commencer

Il vous suffira d'intégrer à votre gestionnaire de dépendance favoris la dépendance de Pebble. Je prendrais comme exemple le pom.xml de maven.

<dependency>
	<groupId>com.mitchellbosecke</groupId>
	<artifactId>pebble</artifactId>
	<version>2.4.0</version>
</dependency>

Exemple d'utilisation

Un  exemple est plus parlant qu'un long discours voici donc un exemple d'affichage de données personnalisées pour un utilisateur.

On commence par la création de l'objet utilisateur, notez bien le choix de l'utilisation de java.util.Date. En effet Pebble ne gère pas encore les formats java.time de Java 8 cf issue #244. Ceux-ci sont prévus pour la version 3.0.

import java.util.Date;

public class User{
	
	private String firstName;
	
	private Date birthDate;
	
	public void setFirstName(final String firstName) {
        this.firstName = firstName;
    }
	
	public String getFirstName() {
        return firstName;
    }
		
	public void setBirthDate(final Date birthDate) {
        this.birthDate = birthDate;
    }
	
	public Date getBirthDate() {
        return birthDate;
    }
}
User.java

Puis la classe de test

public class TemplateTest {

    @Test
    public void test() throws PebbleException, IOException {

        User user = new User();
        user.setFirstName("John");
        user.setBirthDate(new Date(100, 0, 1)); // 1 janvier 2000

        final StringLoader stringLoader = new StringLoader();
        PebbleEngine pebbleEngine = new PebbleEngine.Builder().loader(stringLoader).build();
		Writer writer = new StringWriter();
        final Map<String, Object> context = new HashMap<>();
        context.put("user", user);
		
		String template = "Bonjour {{user.firstName}}, né le {{user.birthDate | date(\"dd/MM/yyyy\") }}";
		
        PebbleTemplate pebbleTemplate = pebbleEngine.getTemplate(template);

        pebbleTemplate.evaluate(writer, context);

        Assert.assertEquals("Bonjour John, né le 01/01/2000", writer.toString());
    }
}
TemplateTest.java

Conclusion

En somme, un poids léger, une syntaxe facile d'accès, peu de lignes de codes Java nécessaires et  des possibilités de customisations. Je vous souhaite autant de plaisir que j'ai à l'utiliser.

Sources:

Site officiel de Pebble

2 commentaires

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *