package org.wikbook.template.freemarker; import freemarker.template.Configuration; import freemarker.template.DefaultObjectWrapper; import freemarker.template.Template; import freemarker.template.TemplateException; import org.wikbook.template.processing.metamodel.MetaModel; import org.wikbook.template.processing.metamodel.TemplateElement; import javax.annotation.processing.Filer; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.util.Map; /** * @author <a href="mailto:alain.defrance@exoplatform.com">Alain Defrance</a> * @version $Revision$ */ public class FreemarkerRenderer { private FreemarkerModelBuilder builder; public FreemarkerRenderer() { builder = new FreemarkerModelBuilder(); } public void render(MetaModel model, String templateName, TemplateElement element, OutputStream os, Filer filer) throws IOException { Map<String, ? extends Object> data = builder.build(model, element); render(data, templateName, os, filer); } public void render(MetaModel model, String templateName, OutputStream os, Filer filer) throws IOException { Map<String, ? extends Object> data = builder.build(model); render(data, templateName, os, filer); } private void render(Map<String, ? extends Object> data, String templateName, OutputStream os, Filer filer) throws IOException { Configuration cfg = new Configuration(); try { cfg.setTemplateLoader(new FilerTemplateLoader(filer)); cfg.setObjectWrapper(new DefaultObjectWrapper()); Template temp = cfg.getTemplate(templateName); OutputStreamWriter osw = new OutputStreamWriter(os); temp.process(data, osw); osw.flush(); osw.close(); } catch (TemplateException e) { throw new RuntimeException(e); } } }