...
Create a concept for usage of the template engine.
6th. call (
...
Th.,
...
11. July 2013)
Agenda:
- Discuss usage of template API (Example with curl):
GET ALL TEMPLATES:
curl -k --user mifos -i -H "Accept: application/json" -H "Content-Type: application/json" https://localhost:8443/mifosng-provider/api/v1/templates?tenantIdentifier=default
POST (create) TEMPLATE:
curl -X POST -i -H "Accept: application/json" -H "Content-type: application/json" -k --user mifos -d '{"text":"<html><header><title>This is title</title></header><body>Hello {{world}}</body></html>","name":"foo","metadata":{"client":"client.url"}}' https://localhost:8443/mifosng-provider/api/v1/templates?tenantIdentifier=default
M> may be instead of "metadata" we could call this... I don't know, "loaders" ? "mapp(ing/ers)" ? What will {"client":"client.url"}}' actually do?
GET BY ID (insert id!):
curl -k --user mifos -i -H "Accept: application/json" -H "Content-Type: application/json" https://localhost:8443/mifosng-provider/api/v1/templates/ <ID> ?tenantIdentifier=default
M> don't you want to see "foo" (template name) in the URL for this one here somewhere? else how to know which one? and instead <ID> wouldn't it be ?id=123?
GET MERGED TEMPLATE (insert id!):
curl -k --user mifos -X POST -i -H "Accept: text/html" -H "Content-type: application/json" -d '{"world":"Template"}' https://localhost:8443/mifosng-provider/api/v1/templates/ <ID> ?tenantIdentifier=default
RETURNS:
<html><header><title>This is title</title></header><body>Hello Template</body></html>
- Have a look at the code
Querstions:
- None - just discuss status und further steps
Summery:
After Michael made some notes to my code and my proposed usage example, i made some changes and we discussed the example. I renamed 'metadata' to 'mappers' as it is more precise.
Next Michael pointed me to a mistake i made. The approach above saves a specific data, where we actually want a variable. So that we may generate a document for different instances.
More precise: insted of "metadata":{"client":"/api/v1/clients/3"} we change it to {"mappers":"/api/v1/clients/{{clentID}}"} and the user has to send the clientID
So we end up with the new approach:
POST (creates new) TEMPLATE:
curl -X POST -i -H "Accept: application/json" -H "Content-type: application/json" -k --user mifos -d '{"text":"<html><header><title>This is title</title></header><body>Hello {{client.name}}, bye {{sender}}</body></html>","name":"foo","mappers":{"client":"/api/v1/clients/{{url.clientID}}"}}' https://localhost:8443/mifosng-provider/api/v1/templates?tenantIdentifier=default
GET MERGED TEMPLATE (e.g. for template with 3313):
curl -k --user mifos -X POST -i -H "Accept: text/html" -H "Content-type: application/json" -d '{"sender":"me", "clientID": 736}' https://localhost:8443/mifosng-provider/api/v1/templates/3313&clientID=736?tenantIdentifier=default
Further thoughts (for next versions of feature):
specify in the value of the mappers not only a url, but also what it is and how to get it:
- "mapper":{"client":"GET JSON /api/v1/clients/{{url.clientID}}"
- "mapper":{"client" :"GET JSON /api/v1/clients/{{url.clientID}}", "now": "java: new java.util.Date()"}
- "mapper":{"client" :"java: getClient({{url.clientID}}) }
- "mapper": {"client":"GET JSON http://{config.crmSystemURL}/api/clients/{{request.clientID}}"}}'
ToDo:
Implement url templating (or more generic, the value of the mappers)
7th. call (Th., 18. July 2013)
Agenda:
- Clarify questions
- Discuss further steps
Querstions:
- How to avoid SSL problem when getting mappers resource?
Summery:
There are a few possibilities to implement the mapping of keywords with data. For more flexibility we decided to make http request to get the data.
Even for resources from mifos. For development purpose mifos is using a selfsigned certificate, which makes it difficult to make https request from java code.
So for development we discussed ignoring self-signed certificates.
ToDo:
Implement url templating of mappers
8th. call (Th., 29. July 2013)
Agenda:
- Clarify questions
- Discuss futher steps
Querstions:
- Basic-Authentication for mapper request?
- Talk about tests?
- Milestones for second half of gsoc (frontend development)
Summery:
After a demo of the current state, which includes the basic serverside template functionality Michael and me discussed about minor improvments.
The SSL ignore functionality for dev should be configurable and we want to give something like static methods a try. Which means u could get an
timestamp on document generation with a tag like {{NOW}}. After that we had a long talk about the usage of the overall functionallity and the start (or entry) point.
There are two basic pages needed. Something like an administration page giving the possibilty to creat templates and perhaps an extra tab at a concrete
entity to use it. For the second scenario we would have to assign a specific entity to the template. Giving that it would be nice to have all the fields of an entity.
Those metadata would help the administrator to create a template.
As for now there is no API describing the metadata of an entity, so we code it into the ui.
Note: Consider custom fields (data tables)
ToDo:
Andreas:
Prepare Demo Document
Catch mappers url and implement condition, if absolute path already exists
E-Mail to Ed regarding google hangout
Implementation of abstraction-layer for template engine to add context
Static {{NOW}} method
Ignore self-signed cert property
Michael:
E-Mail to Ed, Keith regarding information about functional requirements, usage