/* Jug Management is a web application conceived to manage user groups or
* communities focused on a certain domain of knowledge, whose members are
* constantly sharing information and participating in social and educational
* events. Copyright (C) 2011 Ceara Java User Group - CEJUG.
*
* This application is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by the
* Free Software Foundation; either version 2.1 of the License, or (at your
* option) any later version.
*
* This application is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*
* There is a full copy of the GNU Lesser General Public License along with
* this library. Look for the file license.txt at the root level. If you do not
* find it, write to the Free Software Foundation, Inc., 59 Temple Place,
* Suite 330, Boston, MA 02111-1307 USA.
* */
package org.cejug.yougi.entity;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.persistence.*;
/**
* Message template with variables to be fulfilled with object attributes.
*
* @author Hildeberto Mendonca - http://www.hildeberto.com
*/
@Entity
@Table(name = "message_template")
public class MessageTemplate implements Serializable, Identified {
private static final String VAR_PATTERN = "\\#\\{([a-z][a-zA-Z_0-9]*(\\.)?)+\\}";
private static final long serialVersionUID = 1L;
@Id
private String id;
@Column(nullable = false)
private String title;
@Column(nullable = false)
private String body;
public MessageTemplate() {
}
public MessageTemplate(String id) {
this.id = id;
}
@Override
public String getId() {
return id;
}
@Override
public void setId(String id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public String getTruncatedBody() {
if (this.body.length() < 200) {
return this.body;
} else {
return this.body.substring(0, 200);
}
}
public EmailMessage replaceVariablesByValues(Map<String, Object> values) {
EmailMessage emailMessage = new EmailMessage();
String subject = this.title;
String message = this.body;
Pattern pattern = Pattern.compile(VAR_PATTERN);
List<String> variables = findVariables(pattern, this.getTitle());
Object value;
for(String variable: variables) {
variable = variable.substring(2, variable.length() - 1);
value = values.get(variable);
if(value != null) {
subject = subject.replace("#{" + variable + "}", values.get(variable).toString());
}
}
emailMessage.setSubject(subject);
variables = findVariables(pattern, this.getBody());
for(String variable: variables) {
variable = variable.substring(2, variable.length() - 1);
value = values.get(variable);
if(value != null) {
message = message.replace("#{" + variable + "}", values.get(variable).toString());
}
}
emailMessage.setBody(message);
return emailMessage;
}
private List<String> findVariables(Pattern pattern, CharSequence charSequence) {
Matcher m = pattern.matcher(charSequence);
List<String> matches = new ArrayList<>();
while (m.find()) {
matches.add(m.group());
}
return matches;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final MessageTemplate other = (MessageTemplate) obj;
if ((this.id == null) ? (other.id != null) : !this.id.equals(other.id)) {
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 5;
hash = 29 * hash + (this.id != null ? this.id.hashCode() : 0);
return hash;
}
@Override
public String toString() {
return this.title;
}
}