/*
* Copyright (c) 2008-2016 Computer Network Information Center (CNIC), Chinese Academy of Sciences.
*
* This file is part of Duckling project.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package cn.vlabs.umt.common.mail;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.UnsupportedEncodingException;
import java.util.Enumeration;
import java.util.Locale;
import java.util.Properties;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import cn.vlabs.umt.common.util.CommonUtils;
public class MessageFormatter {
public MessageFormatter(String path){
this.path=path;
}
public String getContent(Locale locale, String templateName, Properties props) throws TemplateNotFound {
String all = getFormattedMessage(locale, templateName, props);
String content = "";
if(all == null || "".equals(all.trim())) {
return content;
}
int index = all.indexOf(EmailTemplate.SIGN_CONTENT);
if(index > 0) {
content = all.substring(index + EmailTemplate.SIGN_CONTENT.length());
}
return CommonUtils.trim(content);
}
public String getTitle(Locale locale, String templateName, Properties props) throws TemplateNotFound {
String all = getFormattedMessage(locale, templateName, props);
String title = "";
if(all == null || "".equals(all.trim())) {
return title;
}
int indexBegin = all.indexOf(EmailTemplate.SIGN_TITLE);
int indexEnd = all.indexOf(EmailTemplate.SIGN_CONTENT);
if(indexBegin >= 0) {
if(indexEnd > indexBegin) {
title = all.substring(indexBegin + EmailTemplate.SIGN_TITLE.length(), indexEnd);
} else {
title = all.substring(indexBegin + EmailTemplate.SIGN_TITLE.length());
}
}
return CommonUtils.trim(title);
}
public String getFormattedMessage(Locale locale, String emailTemplateTarget, Properties prop) throws TemplateNotFound {
String content = readTemplate(locale, emailTemplateTarget);
if (prop!=null){
Enumeration<Object> iter = prop.keys();
while (iter.hasMoreElements()){
String key = (String) iter.nextElement();
String value= prop.getProperty(key);
if (value==null)
{
value="";
}
content = StringUtils.replace(content, "%"+key+"%", value);
}
}
return CommonUtils.trim(content);
}
private String readTemplate(Locale locale, String templateName) throws TemplateNotFound {
StringBuffer content = new StringBuffer();
Reader reader = null;
String templateFileDir = path;
try {
templateFileDir = path + "/" + locale.toString();
File f = new File(templateFileDir);
if (!f.exists()){
templateFileDir = path + "/en_US";
}
templateFileDir = templateFileDir + "/" + templateName;
reader = new InputStreamReader(new FileInputStream(templateFileDir), "UTF-8");
int num=0;
while ((num=reader.read(buff)) != -1){
content.append(buff, 0, num);
}
} catch (FileNotFoundException e) {
throw new TemplateNotFound(templateFileDir);
} catch (UnsupportedEncodingException e) {
log.error("从操作系统读取模板文件时发生错误。");
log.debug("详细信息",e);
} catch (IOException e) {
log.error("从操作系统读取模板文件时发生错误。");
log.debug("详细信息",e);
} finally {
if (reader != null){
try {
reader.close();
} catch (IOException e) {
log.debug("关闭模板文件时发生错误。");
}
}
}
return content.toString();
}
private static Logger log = Logger.getLogger(MessageFormatter.class);
private String path;
private char[] buff=new char[1024];
}