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); } } }