UGD_TechnicalDesign

UGD_TechnicalDesign

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

Name

Reflection

LastRelease

Version

License

Comment

 

Name

Reflection

LastRelease

Version

License

Comment

 

StringTemplate

yes

Jan 4, 2013

4.0.7

BSD License

 

 

Freemarker

yes

Feb 29, 2012

2.3.19

BSD-style license

 

 

Velocity

yes

Nov 29, 2010

1.7

Apache License 2.0

 

 

moustache.java

yes

May 06, 2013

0.8.12

Apache License 2.0

Mustache.java is a Java 6 implementation of the mustache language used by Netflix and Twitter

 

Thymeleaf

yes

Jun 09, 2013

2.0.17

Apache License 2.0

 

 

Jamon

 

Dec 20, 2011

2.4.1

Mozilla Public License

 

 

Tea

 

 

4.1

Apache License 2.0

 

 

Xtend

 

Jun 26, 2013

2.4.2

Eclipse Public License

 

 

Cambridge

 

"upcoming"

0.9

 

Mailinglist not active since Aug 01 2012

 

MVEL

 

Sep 18, 2012

2.1.3

Apache License 2.0

 

 

 

 

  • Velocity

    • the most well known one, but there is probably better / more up-to-date meanwhile

  • FreeMarker

    • may be the 2nd most well known one?

  • StringTemplate

  • Xtend Template Expressions 

    • I know it looks static / compile-time, but Michael should be able to put together an example using this in "interpreted" mode, if interested

    • very very strong static typing Eclipse tooling - but that's not our use case

  • Jamon

    • ?

  • Google Closure Templates (Soy)

    • could run client-side (JS) - although not sure it make sense to exploit this in Mifos

    • Eclipse Editor available - not our use case, just sayin'

  • Cambridge

    • HTML specific? It "supports Servlets, JAX-RS, Play (Spring later)" - unclear - what does that have to do with templating?

  • duel

    • could run client-side (JS) - although not sure it make sense to exploit this in Mifos

    • probably  similar to Closure? Better pick a more well known one? It is interesting, double check project background/activity

  • jsilver

    • dead?

  • Other ones? List above is just compiled from stuff Michael bookmarked on delicious over the years.. may be I missed the one best for us.

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

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

/templates

getTemplates()

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?