Whitespace Handling in FreshMarker (2)
Im ersten Beitrag zum Whitespace Handling wurde eine einfache Implementierung vorgestellt, die überflüssige Whitespaces entfernt. In diesem Beitrag soll die Implementierung verbessert werden.
Thoughts on agile software development
Im ersten Beitrag zum Whitespace Handling wurde eine einfache Implementierung vorgestellt, die überflüssige Whitespaces entfernt. In diesem Beitrag soll die Implementierung verbessert werden.
Bei der Entwicklung des EnumConverterProcessor wurde der Quellcode mit Hilfe der Template-Engine FreeMarker geschrieben. Daher war die Neugierde groß, ob der Quellcode auch mit FreshMarker erfolgreich erzeugt werden kann. Dabei zeigte sich jedoch, das der Umgang mit Whitespaces in der neuen Template-Engine noch nicht ganz ausgereift war. Genaugenommen produzierte die Template-Engine zu viele Leerzeichen und Zeilenumbrüche.
Im vorherigen Beitrag wurde ein Annotation Processor vorgestellt, mit dem AttributeConverter für Enum Klassen automatisch generiert werden können. Kaum war dieser fertig gestellt, bahnten sich schon die ersten Änderungen an. Die WithEnumConverter Annotation erhält die neuen Attribute ordinal, nullKeyForbidden, exceptionIfMissing und verliert das Attribut representation
In diesem Beitrag finden zwei meiner Steckenpferde hier im Blog zusammen. Es sind die Annotation Processors und die Enums. Beide gemeinsam können ein schon lange bestehendes Problem der Enums auf recht elegante Weise lösen.
Die Klasse MessageFormat ist ein Urgestein der Java API und schon seit der Version 1.1 mit an Bord. Die Klasse ist ein nützlicher Helfer, wurde aber in den letzten Versionen der API stark vernachlässigt. Nicht nur in der Java API wurde sie längere Zeit nicht beachtet, auch manches Projekt hat diese Klasse unnötigerweise gemieden.
Im vorherigen Beitrag wurde ein einfache Lösung für REST Endpunkte mit Filtern vorgestellt. Ein Kritikpunkt an der vorgestellten Implementierung ist die starke Kopplung zwischen dem JPA Repository und dem Filterable. In diesem Bitrag werden wir diesen Ansatz mit dem EntityManager entkoppeln.
Neben dem Sortieren und Paginieren ist das Filtern eine recht häufige Aktion auf REST Endpunkten. Im Gegensatz zu den beiden erstgenannten gibt es aber für das Filtern keine adäquate Lösung im Spring Boot Framework. Mit geringen Aufwand kann dies aber elegant mit den Spring Boot Hilfsmitteln ergänzt werden.
Im ersten Teil zum Thema User Directives wurde erläutert, wie diese in die FreshMarker Engine eingefügt sind und wie eigene Java Directives erstellt werden können. In diesem Teil werden die User Directives um FreshMarker Macros erweitert.
Zur Vereinfachung der FreshMarker Templates sollen wiederkehrende Teile als Funktionen und Macros formulierbar sein. Statt immer wieder ähnliche Teile im Template einzufügen, sollen diese durch parametrisierbare Aufrufe ersetzt werden. Wie in FreeMarker soll dies in FreshMarker über User Directives realisiert werden.
Zu den ersten Komponenten der FreshMarker Template-Engine gehörte ein einfaches Plug-In System. Durch diese Komponente wurde die Ergänzung um neue Built-Ins, Formatter und Mapper vereinfacht. Zwei neue Plug-Ins zeigen dabei Stärken und Schwächen des bisherigen Ansatzes.