Skip to content
This repository has been archived by the owner on Dec 19, 2021. It is now read-only.

Commit

Permalink
Switched from FreeMarker to Handlebars
Browse files Browse the repository at this point in the history
  • Loading branch information
Heiner Peuser committed Nov 28, 2016
1 parent 4ce5549 commit ef772d6
Show file tree
Hide file tree
Showing 36 changed files with 568 additions and 153 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ A centric, extensible, template-based solution for outbound messaging (email, sm
## Enjoy a new quality of outbound communication
Tubewarder makes sending messages to your users easier than ever:
* All your outbound communication in one place
* Easy-to-use templating system based on [Apache Freemarker](http://freemarker.incubator.apache.org)
* Easy-to-use templating system based on [Handlebars](http://handlebarsjs.com/)
* Connect your applications using SOAP web services or RESTful services
* Built-in outbound connectors: Email, HTTP(S)
* Configurable, extendable outbound connectors (API available)
Expand Down
2 changes: 0 additions & 2 deletions clients/java/client.iml
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
Expand Down
2 changes: 1 addition & 1 deletion clients/java/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>net.weweave.tubewarder</groupId>
<artifactId>client</artifactId>
<version>1.0.5</version>
<version>1.0.6</version>
<packaging>jar</packaging>

<name>${project.groupId}:${project.artifactId}</name>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ public class SendRequest implements Serializable {
private String channel;
private Address recipient;
private List<KeyValue> model = new ArrayList<>();
private String modelJson;
private List<Attachment> attachments = new ArrayList<>();
private String keyword;
private String details;
Expand Down Expand Up @@ -76,6 +77,14 @@ public void setModelFromMap(Map<String, Object> map) {
}
}

public String getModelJson() {
return modelJson;
}

public void setModelJson(String modelJson) {
this.modelJson = modelJson;
}

public List<Attachment> getAttachments() {
return attachments;
}
Expand Down
6 changes: 6 additions & 0 deletions clients/nodejs/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
this.channel = '';
this.recipient = new Address('', '');
this.model = {};
this.modelJson = '';
this.attachments = [];
this.keyword = '';
this.details = '';
Expand All @@ -41,6 +42,10 @@
addModelParam(k, v) {
this.model[k] = v;
}

setModelJsonFromObject(o) {
this.modelJson = JSON.stringify(o);
}

createAttachment(filename) {
var a = new Attachment(filename);
Expand Down Expand Up @@ -79,6 +84,7 @@
channel: this.channel,
recipient: this.recipient.getAsObject(),
model: this.getKeyValueModel(),
modelJson: this.modelJson,
attachments: this.getAttachmentsAsObjectArray(),
keyword: this.keyword,
details: this.details,
Expand Down
2 changes: 1 addition & 1 deletion clients/nodejs/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "tubewarder-client",
"version": "1.0.4",
"version": "1.0.5",
"description": "NodeJS Client for the Tubewarder Central Messaging Gateway",
"main": "index.js",
"scripts": {
Expand Down
2 changes: 1 addition & 1 deletion clients/php/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>net.weweave.tubewarder.clients</groupId>
<artifactId>php</artifactId>
<version>1.0.0</version>
<version>1.0.1</version>

<build>
<finalName>tubewarder-php-client-${project.version}</finalName>
Expand Down
2 changes: 2 additions & 0 deletions clients/php/src/SendRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ class SendRequest {
private $channel;
private $recipient;
private $model = array();
private $modelJson;
private $attachments = array();
private $keyword;
private $details;
Expand Down Expand Up @@ -164,6 +165,7 @@ public function getObject() {
'channel' => $this->getChannel(),
'recipient' => $this->getRecipient()->getObject(),
'model' => $modelArray,
'modelJson' => $modelJson,
'attachments' => $attachmentsArray,
'keyword' => $this->getKeyword(),
'details' => $this->getDetails(),
Expand Down
13 changes: 8 additions & 5 deletions core/core.iml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,11 @@
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" scope="PROVIDED" name="Maven: javax:javaee-web-api:7.0" level="project" />
<orderEntry type="library" name="Maven: javax.mail:javax.mail-api:1.5.5" level="project" />
<orderEntry type="library" name="Maven: org.freemarker:freemarker-gae:2.3.23" level="project" />
<orderEntry type="library" name="Maven: com.github.jknack:handlebars:4.0.6" level="project" />
<orderEntry type="library" name="Maven: org.antlr:antlr4-runtime:4.5.1-1" level="project" />
<orderEntry type="library" name="Maven: org.mozilla:rhino:1.7R4" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.6.4" level="project" />
<orderEntry type="library" name="Maven: com.github.jknack:handlebars-jackson2:4.0.6" level="project" />
<orderEntry type="library" name="Maven: commons-validator:commons-validator:1.5.0" level="project" />
<orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.2" level="project" />
<orderEntry type="library" name="Maven: commons-digester:commons-digester:1.8.1" level="project" />
Expand Down Expand Up @@ -49,6 +53,7 @@
<orderEntry type="library" scope="TEST" name="Maven: org.jboss.arquillian.container:arquillian-container-test-impl-base:1.1.10.Final" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.jboss.shrinkwrap:shrinkwrap-impl-base:1.2.6" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.jboss.shrinkwrap:shrinkwrap-spi:1.2.6" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.apache.commons:commons-lang3:3.5" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: com.jayway.restassured:rest-assured:2.8.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.codehaus.groovy:groovy:2.4.4" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.codehaus.groovy:groovy-xml:2.4.4" level="project" />
Expand All @@ -62,14 +67,13 @@
<orderEntry type="library" scope="TEST" name="Maven: org.codehaus.groovy:groovy-json:2.4.4" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: com.jayway.restassured:rest-assured-common:2.8.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: com.jayway.restassured:xml-path:2.8.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.apache.commons:commons-lang3:3.3.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.hibernate:hibernate-entitymanager:5.0.7.Final" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.jboss.logging:jboss-logging:3.3.0.Final" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.hibernate:hibernate-core:5.0.7.Final" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: antlr:antlr:2.7.7" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.jboss:jandex:2.0.0.Final" level="project" />
<orderEntry type="library" name="Maven: dom4j:dom4j:1.6.1" level="project" />
<orderEntry type="library" name="Maven: xml-apis:xml-apis:1.0.b2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: dom4j:dom4j:1.6.1" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: xml-apis:xml-apis:1.0.b2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.hibernate.common:hibernate-commons-annotations:5.0.1.Final" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.0.Final" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.apache.geronimo.specs:geronimo-jta_1.1_spec:1.1.1" level="project" />
Expand All @@ -88,7 +92,6 @@
<orderEntry type="library" scope="TEST" name="Maven: org.jboss.shrinkwrap.descriptors:shrinkwrap-descriptors-api-base:2.0.0-alpha-9" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.apache.tomee:javaee-api:7.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.apache.tomee:arquillian-tomee-common:7.0.1" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.slf4j:slf4j-api:1.7.21" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.apache.tomee:arquillian-common:7.0.1" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.codehaus.swizzle:swizzle-stream:1.6.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.apache.tomee:tomee-embedded:7.0.1" level="project" />
Expand Down
19 changes: 15 additions & 4 deletions core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<parent>
<groupId>net.weweave.tubewarder</groupId>
<artifactId>parent</artifactId>
<version>1.2</version>
<version>1.3</version>
<relativePath>../</relativePath>
</parent>

Expand All @@ -27,9 +27,14 @@
<version>1.5.5</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker-gae</artifactId>
<version>2.3.23</version>
<groupId>com.github.jknack</groupId>
<artifactId>handlebars</artifactId>
<version>4.0.6</version>
</dependency>
<dependency>
<groupId>com.github.jknack</groupId>
<artifactId>handlebars-jackson2</artifactId>
<version>4.0.6</version>
</dependency>
<dependency>
<groupId>commons-validator</groupId>
Expand Down Expand Up @@ -90,6 +95,12 @@
<version>1.1.10.Final</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.jayway.restassured</groupId>
<artifactId>rest-assured</artifactId>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package net.weweave.tubewarder.service.common;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import net.weweave.tubewarder.dao.*;
import net.weweave.tubewarder.domain.*;
import net.weweave.tubewarder.exception.*;
Expand All @@ -21,7 +24,9 @@

import javax.ejb.Stateless;
import javax.inject.Inject;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.lang.System;
import java.net.URLEncoder;
import java.util.*;
import java.util.logging.Logger;
Expand Down Expand Up @@ -107,7 +112,8 @@ private void renderAndSend(SendModel sendModel, SendServiceResponse response) th
Channel channel = channelTemplate.getChannel();

// Render subject and content
Map<String, Object> model = convertDataModelToMap(sendModel.model == null ? new ArrayList<>() : sendModel.model);
//Map<String, Object> model = convertDataModelToMap(sendModel.model == null ? new ArrayList<>() : sendModel.model);
JsonNode model = getJsonModelFromRequest(sendModel);
String subject = getTemplateRenderer().render(channelTemplate.getSubject(), model);
String content = getTemplateRenderer().render(channelTemplate.getContent(), model);

Expand Down Expand Up @@ -157,6 +163,29 @@ private void renderAndSend(SendModel sendModel, SendServiceResponse response) th
getSendQueueScheduler().addSendQueueItem(sendQueueItem.getId());
}

private JsonNode getJsonModelFromRequest(SendModel sendModel) throws TemplateModelException {
JsonNode result;
if (!GenericValidator.isBlankOrNull(sendModel.modelJson)) {
result = stringToJsoNode(sendModel.modelJson);
} else if (sendModel.model != null) {
Map<String, Object> map = convertDataModelToMap(sendModel.model);
result = mapToJsonNode(map);
} else {
Map<String, Object> map = new HashMap<>();
result = mapToJsonNode(map);
}
return result;
}

private JsonNode stringToJsoNode(String s) throws TemplateModelException {
ObjectMapper mapper = new ObjectMapper();
try {
return mapper.readValue(s, JsonNode.class);
} catch (IOException e) {
throw new TemplateModelException();
}
}

private void updateLogWithQueueId(Log log, SendQueueItem sendQueueItem) {
log.setQueueId(sendQueueItem.getExposableId());
getLogDao().update(log);
Expand Down Expand Up @@ -205,14 +234,14 @@ private SendQueueItem createSendQueueItem(ChannelTemplate channelTemplate, Addre
return item;
}

private void rewriteConfig(IOutputHandler outputHandler, Config config, Map<String, Object> model, Rewrites rewrites) throws TemplateCorruptException, TemplateModelException {
Map<String, Object> newModel = new HashMap<>(model);
private void rewriteConfig(IOutputHandler outputHandler, Config config, JsonNode model, Rewrites rewrites) throws TemplateCorruptException, TemplateModelException {
ObjectNode newModel = cloneJsonNodeToObjectNode(model);
newModel.put("recipientName", rewrites.recipientName);
newModel.put("recipientAddress", rewrites.recipientAddress);
newModel.put("subject", rewrites.subject);
newModel.put("content", rewrites.content);

Map<String, Object> uriEncodedModel = getUriEncodedModel(newModel);
ObjectNode uriEncodedModel = getUriEncodedModel(newModel);

List<OutputHandlerConfigOption> configOptions = outputHandler.getConfigOptions();

Expand All @@ -229,19 +258,21 @@ private void rewriteConfig(IOutputHandler outputHandler, Config config, Map<Stri
}
}

private Map<String, Object> getUriEncodedModel(Map<String, Object> model) {
Map<String, Object> result = new HashMap<>();
for (Map.Entry<String, Object> entry : model.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
if (value instanceof String) {
private ObjectNode cloneJsonNodeToObjectNode(JsonNode node) {
return (ObjectNode)node.deepCopy();
}

private ObjectNode getUriEncodedModel(ObjectNode model) {
ObjectNode result = cloneJsonNodeToObjectNode(model);
for (Iterator<String> i = result.fieldNames(); i.hasNext(); ) {
String key = i.next();
JsonNode value = model.get(key);
if (value.isTextual()) {
try {
result.put(key, URLEncoder.encode((String) value, "UTF-8"));
result.put(key, URLEncoder.encode(value.asText(), "UTF-8"));
} catch (UnsupportedEncodingException e) {
result.put(key, "");
}
} else {
result.put(key, value);
}
}
return result;
Expand Down Expand Up @@ -272,6 +303,12 @@ private void rewrite(Rewrites rewrites, Channel channel) throws TemplateCorruptE
rewrites.content = getTemplateRenderer().render(channel.getRewriteContent(), model);
}

private JsonNode mapToJsonNode(Map<String, Object> map) {
ObjectMapper mapper = new ObjectMapper();
JsonNode result = mapper.convertValue(map, JsonNode.class);
return result;
}

private Map<String, Object> convertDataModelToMap(List<KeyValueModel> dataModel) {
Map<String, Object> result = new HashMap<>();
for (KeyValueModel entry : dataModel) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,10 @@ public static ChannelModel factory(Channel channel, OutputHandlerFactory factory
model.id = channel.getExposableId();
model.name = channel.getName();
model.group = (channel.getUserGroup() == null) ? null : UserGroupModel.factorySmall(channel.getUserGroup());
model.rewriteRecipientName = (GenericValidator.isBlankOrNull(channel.getRewriteRecipientName()) ? "${recipientName}" : channel.getRewriteRecipientName());
model.rewriteRecipientAddress = (GenericValidator.isBlankOrNull(channel.getRewriteRecipientAddress()) ? "${recipientAddress}" : channel.getRewriteRecipientAddress());
model.rewriteSubject = (GenericValidator.isBlankOrNull(channel.getRewriteSubject()) ? "${subject}" : channel.getRewriteSubject());
model.rewriteContent = (GenericValidator.isBlankOrNull(channel.getRewriteContent()) ? "${content}" : channel.getRewriteContent());
model.rewriteRecipientName = (GenericValidator.isBlankOrNull(channel.getRewriteRecipientName()) ? "{{recipientName}}" : channel.getRewriteRecipientName());
model.rewriteRecipientAddress = (GenericValidator.isBlankOrNull(channel.getRewriteRecipientAddress()) ? "{{recipientAddress}}" : channel.getRewriteRecipientAddress());
model.rewriteSubject = (GenericValidator.isBlankOrNull(channel.getRewriteSubject()) ? "{{subject}}" : channel.getRewriteSubject());
model.rewriteContent = (GenericValidator.isBlankOrNull(channel.getRewriteContent()) ? "{{content}}" : channel.getRewriteContent());
model.config = OutputHandlerConfigUtil.configJsonStringToMap(channel.getConfigJson());
model.outputHandlerReadableName = factory.getNameForId(model.config.getString("id"));
return model;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ public class SendModel {
@XmlElement(required = true)
public AddressModel recipient;
public List<KeyValueModel> model;
public String modelJson;
public List<AttachmentModel> attachments;
public String keyword;
public String details;
Expand Down
Loading

0 comments on commit ef772d6

Please sign in to comment.