Implementovaný parser na šablony e-mailů. Rozchozeny unit testy.

This commit is contained in:
2014-07-06 17:40:45 +02:00
parent 9905cc769d
commit a04de6d928
11 changed files with 149 additions and 1 deletions
@@ -0,0 +1,59 @@
package info.bukova.isspst.mail;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.beanutils.BeanUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class EntityMessageBuilder implements MessageBuilder {
private final static Logger logger = LoggerFactory.getLogger(EntityMessageBuilder.class);
@Override
public MailMessage buildMessage(MailMessage template, Object data) {
MailMessage msg = new MailMessage(template);
msg.setSubject(replacaProperties(msg.getSubject(), data));
msg.setText(replacaProperties(msg.getText(), data));
return msg;
}
private String replacaProperties(String src, Object data) {
int current = 0;
List<String> properties = new ArrayList<String>();
boolean found = false;
String ret = src;
do {
int openIndex = src.indexOf("[", current);
int closeIndex = src.indexOf("]", current);
if (openIndex != -1) {
String property = src.substring(openIndex + 1, closeIndex);
if (!properties.contains(property)) {
properties.add(property);
}
found = true;
} else {
found = false;
}
current = closeIndex + 1;
} while (found);
for (String p : properties) {
try {
ret = ret.replaceAll("\\[" + p + "\\]", BeanUtils.getProperty(data, p));
} catch (IllegalAccessException e) {
logger.error(e.getMessage());
} catch (InvocationTargetException e) {
logger.error(e.getMessage());
} catch (NoSuchMethodException e) {
logger.error(e.getMessage());
}
}
return ret;
}
}
@@ -14,6 +14,18 @@ public class MailMessage extends SimpleMailMessage {
private byte[] attachementData;
private String contentType;
public MailMessage() {
super();
}
public MailMessage(MailMessage message) {
super(message);
this.html = message.isHtml();
this.attachementName = message.getAttachementName();
this.attachementData = message.getAttachementData();
this.contentType = message.getContentType();
}
public boolean isHtml() {
return html;
}
@@ -0,0 +1,8 @@
package info.bukova.isspst.mail;
public interface MessageBuilder {
MailMessage buildMessage(MailMessage template, Object data);
}
@@ -54,7 +54,7 @@ public class GlobalSettingsVM {
@Command
@NotifyChange("settings")
public void insertField(@BindingParam("field") String field, @BindingParam("message") MailMessage message) {
message.setText(message.getText() + ":" + field + ":");
message.setText(message.getText() + "[" + field + "]");
}
}
@@ -27,6 +27,8 @@
<property name="from" value="${mail.from}"/>
</bean>
<bean id="messageBuilder" class="info.bukova.isspst.mail.EntityMessageBuilder"/>
<!-- <bean id="mailer" class="info.bukova.rsfaktura.services.mail.ThreadMailer"> -->
<!-- <constructor-arg ref="attachementMailer"/> -->
<!-- </bean> -->