package com.mossle.core.template;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Map;
import javax.annotation.PostConstruct;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class FreemarkerTemplateService implements TemplateService {
private static Logger logger = LoggerFactory
.getLogger(FreemarkerTemplateService.class);
private String baseDir;
private String encoding = "UTF-8";
private Configuration configuration;
@PostConstruct
public void init() throws IOException {
configuration = new Configuration(Configuration.VERSION_2_3_21);
File templateDir = new File(baseDir);
templateDir.mkdirs();
configuration.setDirectoryForTemplateLoading(templateDir);
}
public String renderText(String text, Map<String, Object> data) {
if (text == null) {
logger.warn("text is null");
return "";
}
try {
Template template = new Template(text, text, configuration);
StringWriter writer = new StringWriter();
template.process(data, writer);
return writer.toString();
} catch (TemplateException ex) {
logger.error(ex.getMessage(), ex);
} catch (IOException ex) {
logger.error(ex.getMessage(), ex);
}
return null;
}
public String render(String templatePath, Map<String, Object> data) {
try {
Template template = configuration.getTemplate(templatePath,
encoding);
StringWriter writer = new StringWriter();
template.process(data, writer);
return writer.toString();
} catch (TemplateException ex) {
logger.error(ex.getMessage(), ex);
} catch (IOException ex) {
logger.error(ex.getMessage(), ex);
}
return null;
}
public void renderTo(String templatePath, Map<String, Object> data,
File targetFile) {
try {
Template template = configuration.getTemplate(templatePath,
encoding);
PrintWriter writer = new PrintWriter(new OutputStreamWriter(
new FileOutputStream(targetFile), encoding));
template.process(data, writer);
writer.flush();
writer.close();
} catch (TemplateException ex) {
logger.error(ex.getMessage(), ex);
} catch (IOException ex) {
logger.error(ex.getMessage(), ex);
}
}
public void setBaseDir(String baseDir) {
this.baseDir = baseDir;
}
public void setEncoding(String encoding) {
this.encoding = encoding;
}
}