package com.norteksoft.product.util.freemarker;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.StringWriter;
import java.util.Locale;
import java.util.Map;
import org.apache.commons.io.FileUtils;
import com.norteksoft.product.util.ZipUtils;
import freemarker.template.Configuration;
import freemarker.template.SimpleHash;
import freemarker.template.Template;
public class TemplateRender{
private static final String TEMPLATE_DIR="template/";
public static final String GENERATE_DIR="generateDir/";
private static Configuration config = null;
public static TemplateRender getInstance() {
return new TemplateRender();
}
public TemplateRender() {
if (config == null) {
config = new Configuration();
config.setTemplateLoader(new StringTemplateLoader());
try {
config.setSetting("datetime_format", "yyyy-MM-dd HH:mm:ss");
config.setLocale(Locale.CHINA);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
@SuppressWarnings("unchecked")
public String render(Map dataModel, String fileName) throws Exception {
String ret = null;
BufferedReader reader=null;
StringWriter stringWriter=null;
BufferedWriter writer=null;
try {
reader=new BufferedReader(new InputStreamReader(TemplateRender.class.getClassLoader().getResourceAsStream(TemplateRender.TEMPLATE_DIR+fileName),"UTF-8"));
Template template = new Template(null, reader, config, "UTF-8");
SimpleHash root = new SimpleHash();
root.putAll(dataModel);
stringWriter= new StringWriter();
writer = new BufferedWriter(stringWriter);
template.process(root, writer);
writer.flush();
ret = stringWriter.toString();
} catch (Exception ex) {
ex.printStackTrace();
ret = null;
}finally{
reader.close();
stringWriter.close();
writer.close();
}
return ret;
}
@SuppressWarnings("unchecked")
public void generateFile(Map dataModel,String dirPath,String fileName,String templateName){
BufferedReader reader=null;
try {
reader=new BufferedReader(new InputStreamReader(TemplateRender.class.getClassLoader().getResourceAsStream(TemplateRender.TEMPLATE_DIR+"generate/"+templateName),"UTF-8"));
Template template = new Template(null, reader, config, "UTF-8");
File afile = new File(GENERATE_DIR+dirPath);
if(!afile.exists()){
afile.mkdirs();
}
File file = new File(GENERATE_DIR+dirPath+"/"+fileName);
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file)));
template.process(dataModel, writer);
writer.flush();
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}