package org.xmx0632.deliciousfruit.utilities.sms;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.mail.MessagingException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
@Component
public class SmsService {
private static Logger log = LoggerFactory.getLogger(SmsService.class);
private static final String DEFAULT_ENCODING = "utf-8";
private SmsSender smsSender;
private Template resetPasswordTemplate;
private Template dynamicPasswordTemplate;
public boolean sendResetPassword(String userName, String mobileNo,
String password) {
log.debug("userName:{},mobileNo:{},password:{}", userName, mobileNo,
password);
try {
String message = generateResetPasswordContent(userName, password);
log.debug("message:{}", message);
return smsSender.send(message, mobileNo);
} catch (MessagingException e) {
log.error(e.getMessage(), e);
}
return false;
}
public void setFreemarkerConfiguration(Configuration freemarkerConfiguration)
throws IOException {
resetPasswordTemplate = freemarkerConfiguration.getTemplate(
"resetPasswordTemplate.ftl", DEFAULT_ENCODING);
dynamicPasswordTemplate = freemarkerConfiguration.getTemplate(
"dynamicPasswordTemplate.ftl", DEFAULT_ENCODING);
}
public void setSmsSender(SmsSender smsSender) {
this.smsSender = smsSender;
}
public boolean sendDynamicPassword(String mobileNo, String password) {
log.debug("mobileNo:{},password:{}", mobileNo, password);
try {
String message = generateDynamicPasswordContent(password);
log.debug("message:{}", message);
return smsSender.send(message, mobileNo);
} catch (MessagingException e) {
log.error(e.getMessage(), e);
}
return false;
}
private String generateDynamicPasswordContent(String password)
throws MessagingException {
Map<String, String> context = new HashMap<String, String>();
context.put("password", password);
return generateContent(context, dynamicPasswordTemplate);
}
private String generateResetPasswordContent(String userName, String password)
throws MessagingException {
Map<String, String> context = new HashMap<String, String>();
context.put("userName", userName);
context.put("password", password);
return generateContent(context, resetPasswordTemplate);
}
private String generateContent(Map<String, String> context,
Template template) throws MessagingException {
try {
return FreeMarkerTemplateUtils.processTemplateIntoString(template,
context);
} catch (IOException e) {
log.error(
"generate sms content error, FreeMarker template not exist",
e);
throw new MessagingException("FreeMarker template not exist", e);
} catch (TemplateException e) {
log.error("generate sms content error, FreeMarker process error", e);
throw new MessagingException("FreeMarker process error", e);
}
}
}