Scope

user generated templates


TO DISCUSS: UGD only? SMS? Future outgoing integration event REST calls? PDF??

Better defined functional use cases (incl. UI) + some example expected documents??

References

Server-side vs. Client-side

It's simpler to keep template processing on the server-side, only. For now at least.

Template Engine

User generated documents should use a template engine. Candidates to choose from include:

Server Side Engine

NameReflectionLastReleaseVersionLicenseComment 
StringTemplateyesJan 4, 20134.0.7BSD License  
FreemarkeryesFeb 29, 20122.3.19BSD-style license  
VelocityyesNov 29, 20101.7Apache License 2.0  
moustache.javayesMay 06, 20130.8.12Apache License 2.0Mustache.java is a Java 6 implementation of the mustache language used by Netflix and Twitter 
ThymeleafyesJun 09, 20132.0.17Apache License 2.0  
Jamon Dec 20, 20112.4.1Mozilla Public License  
Tea  4.1Apache License 2.0  
Xtend Jun 26, 20132.4.2Eclipse Public License  
Cambridge "upcoming"0.9 Mailinglist not active since Aug 01 2012 
MVEL Sep 18, 20122.1.3Apache License 2.0  

 

 

TODO Read up.. learn about features.. compare them (blog?)... pick one! (wink)

Services (internal)

TemplateDomainService

CRUD and persistance specific functions

TemplateMergeService

Merge data representation into template and return 



TODO Document new Java-level interfaces, packages used, utilities needed, etc. etc.

TODO Write some early code! No UI here, yet. No REST interface even. Just TDD! Goal is to illustrate templating, but accessing real entities already (including dynamic custom fields!), consider relationship traversal management, list iteration, etc.

Database Changes

First attempt for template table

CREATE TABLE `m_template` (

`id` bigint(20) NOT NULL AUTO_INCREMENT,

`name` VARCHAR(45) NOT NULL,

`text` LONGTEXT NOT NULL,

PRIMARY KEY (`id`)

)ENGINE=InnoDB DEFAULT CHARSET=utf8;


missing:

how to add metadata, in a generic way?

multitenancy, or do we need to save the creator?

REST API

@GET

/templatesgetTemplates()get all templates

@GET

/templates/{templateID}getTemplate()get specific template

@PUT

/templates/{templateID}saveTemplate()create or update template
@DELETE/templates/{templateID}deleteTemplate()delte template
@POST/templates/{templateID}mergeTemplate()send data / get template and merge them


UI Mockups

TODO Discuss & refine existing draft mockup. May be after some of above is decided?

Out of Scope

TODO Few paragraphs about what we're NOT doing? Non-HTML (e.g. PDF) ? Sophisticated DnD Report Designer?