Mustache template engine или как создавать кастомные репорты. Part 2

В продолжение темы репортов, в частности - ReportNG via Velocity, хотелось бы поделиться обзорным примером одного интересного template движка - Mustache. Сразу оговорюсь, что более детальный гайд можно найти в моем блоге.

Mustache еще называют logic-less движком, ввиду отсутствия всяческих упоминаний о циклах / любого рода стейтментов. Т.е. по сути писать шаблон для будущего репорта становится еще проще для восприятия. Достаточно лишь изучить синтаксис описания объектов внутри темплейтов. Так, к примеру, выглядит простая ссылка на java объект:

Хотя технически, в данном случае reportTitle - это лишь имя ключа замапленного объекта.
Чтобы описать коллекцию объектов, достаточно воспользоваться не менее простой конструкцией.

Где suites / testResults представляют собой List кастомных объектов. При этом, если мы задаем переменную внутри коллекции (к примеру, {{name}}), движок Mustache автоматически будет искать соответствующий геттер внутри объекта текущей итерации.

Из примера выше также можно заметить использование зарезервированного под Mustache-функции синтаксиса. В данном случае translate замаплен под коллекцию Resource Bundle.

Как видите, читать ресурсы локализации стало еще проще при помощи встроенных API.

Само преобразование шаблона в html документ осуществляется двумя простыми командами: compile / execute:

Где getScope возвращает Map объектов, которые мы хотим поместить в контекст темплейта.
Собственно движок Mustache поддерживает также и рефлективный способ задания объектов. Тут уж, какой захотите, такой и используйте.

Одним из основных преимуществ, помимо простоты описания самого шаблона и набора полезных API, является наличие производных на множестве языков программирования. Для данного примера была использована библиотека Mustache.java.

Исходники создания мини-репорта на базе TestNG можно найти в местном GitHub.

Сам шаблон был создан по примеру overview frame всем известного ReportNG.