package de.neuland.jade4j; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; import java.io.StringWriter; import java.io.Writer; import java.net.URL; import java.util.Map; import de.neuland.jade4j.exceptions.JadeCompilerException; import de.neuland.jade4j.expression.ExpressionHandler; import de.neuland.jade4j.expression.JexlExpressionHandler; import de.neuland.jade4j.model.JadeModel; import de.neuland.jade4j.parser.Parser; import de.neuland.jade4j.parser.node.Node; import de.neuland.jade4j.template.FileTemplateLoader; import de.neuland.jade4j.template.JadeTemplate; import de.neuland.jade4j.template.ReaderTemplateLoader; import de.neuland.jade4j.template.TemplateLoader; public class Jade4J { public enum Mode { HTML, XML, XHTML } public static String render(String filename, Map<String, Object> model) throws IOException, JadeCompilerException { return render(filename, model, false); } public static String render(String filename, Map<String, Object> model, boolean pretty) throws IOException, JadeCompilerException { JadeTemplate template = getTemplate(filename); template.setPrettyPrint(pretty); return templateToString(template, model); } public static void render(String filename, Map<String, Object> model, Writer writer) throws IOException, JadeCompilerException { render(filename, model, writer, false); } public static void render(String filename, Map<String, Object> model, Writer writer, boolean pretty) throws IOException, JadeCompilerException { JadeTemplate template = getTemplate(filename); template.setPrettyPrint(pretty); template.process(new JadeModel(model), writer); } public static String render(JadeTemplate template, Map<String, Object> model) throws JadeCompilerException { return render(template, model, false); } public static String render(JadeTemplate template, Map<String, Object> model, boolean pretty) throws JadeCompilerException { template.setPrettyPrint(pretty); return templateToString(template, model); } public static void render(JadeTemplate template, Map<String, Object> model, Writer writer) throws JadeCompilerException { render(template, model, writer, false); } public static void render(JadeTemplate template, Map<String, Object> model, Writer writer, boolean pretty) throws JadeCompilerException { template.setPrettyPrint(pretty); template.process(new JadeModel(model), writer); } public static String render(URL url, Map<String, Object> model) throws IOException, JadeCompilerException { return render(url, model, false); } public static String render(URL url, Map<String, Object> model, boolean pretty) throws IOException, JadeCompilerException { BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream())); JadeTemplate template = getTemplate(reader, url.getPath()); return render(template, model, pretty); } public static String render(Reader reader, String filename, Map<String, Object> model) throws IOException, JadeCompilerException { return render(reader, filename, model, false); } public static String render(Reader reader, String filename, Map<String, Object> model, boolean pretty) throws IOException, JadeCompilerException { JadeTemplate template = getTemplate(reader, filename); return render(template, model, pretty); } public static JadeTemplate getTemplate(String filename) throws IOException { return createTemplate(filename,"", new FileTemplateLoader("", "UTF-8"), new JexlExpressionHandler()); } private static JadeTemplate getTemplate(Reader reader, String name) throws IOException { return createTemplate(name, "",new ReaderTemplateLoader(reader, name), new JexlExpressionHandler()); } private static JadeTemplate createTemplate(String filename, String basePath, TemplateLoader loader, ExpressionHandler expressionHandler) throws IOException { Parser parser = new Parser(filename, basePath, loader, expressionHandler); Node root = parser.parse(); JadeTemplate template = new JadeTemplate(); template.setExpressionHandler(expressionHandler); template.setTemplateLoader(loader); template.setRootNode(root); return template; } private static String templateToString(JadeTemplate template, Map<String, Object> model) throws JadeCompilerException { JadeModel jadeModel = new JadeModel(model); StringWriter writer = new StringWriter(); template.process(jadeModel, writer); return writer.toString(); } }