package util;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.StringWriter;
import java.io.Writer;
import java.util.Map;
import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.TemplateExceptionHandler;
/**
* function:The used for loading templates to generate data
* author:shaojiang
* date:2011.7.20
*/
public class TemplateEngine {
private static Configuration cfg = null;//Template engine configuration information
private static Template temp = null;//Template engine object
static{
cfg = new Configuration();
cfg.setObjectWrapper(new DefaultObjectWrapper());//Set of packaging
cfg.setCacheStorage(new freemarker.cache.MruCacheStorage(0,250));//Set template cache
cfg.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);//Set the exception handler
}
/**
* load template
* @param templateDir
* @param fileName
*/
public static void load(String templateDir,String fileName){
try {
cfg.setDirectoryForTemplateLoading(new File(templateDir));//Set the directory template
temp = cfg.getTemplate(fileName);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* Analytical template
* @param rootMap
* @return
*/
private static void analysis(@SuppressWarnings("rawtypes") Map rootMap,Writer out){
try {
temp.process(rootMap, out);
} catch (TemplateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* Generation template contents
* @return
*/
public static String generate(@SuppressWarnings("rawtypes") Map rootMap){
StringWriter out = new StringWriter();
analysis(rootMap,out);
return out.toString();
}
/**
* Will the results be born documents
* @param rootMap
* @param filePath
*/
public static void generateFile(@SuppressWarnings("rawtypes") Map rootMap,String filePath){
try {
String content = generate(rootMap);//Get content
File file = new File(filePath);//Create file
/**
* Through the files output stream will be content to the output file
*/
OutputStreamWriter outputStream = new OutputStreamWriter(
new FileOutputStream(file), "UTF-8");
outputStream.write(content);
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}