package com.xiaoleilu.hutool.extra;
import java.io.Writer;
import java.util.Map;
import org.beetl.core.Configuration;
import org.beetl.core.GroupTemplate;
import org.beetl.core.ResourceLoader;
import org.beetl.core.Template;
import org.beetl.core.resource.CompositeResourceLoader;
import org.beetl.core.resource.Matcher;
/**
* Beetl模板引擎工具类<br>
* http://git.oschina.net/xiandafu/beetl2.0
* 文档:http://ibeetl.com/guide/beetl.html
*
* @author Looly
*/
public final class BeetlUtil {
private BeetlUtil() {}
/**
* 创建默认 {@link GroupTemplate}
* @return {@link GroupTemplate}
*/
public static GroupTemplate createGroupTemplate(){
return new GroupTemplate();
}
/**
* 创建自定义的 {@link GroupTemplate}
* @param loader {@link ResourceLoader},资源加载器
* @param conf {@link Configuration} 配置文件
* @return {@link GroupTemplate}
*/
public static GroupTemplate createGroupTemplate(ResourceLoader loader, Configuration conf){
return new GroupTemplate(loader, conf);
}
/**
* 获得模板
* @param groupTemplate {@link GroupTemplate}
* @param source 模板资源,根据不同的 {@link ResourceLoader} 加载不同的模板资源
* @return {@link Template}
*/
public static Template getTemplate(GroupTemplate groupTemplate, String source){
return groupTemplate.getTemplate(source);
}
/**
* 渲染模板
* @param template {@link Template}
* @param bindingMap 绑定参数
* @return 渲染后的内容
*/
public static String render(Template template, Map<String, Object> bindingMap){
template.binding(bindingMap);
return template.render();
}
/**
* 渲染模板
* @param template {@link Template}
* @param bindingMap 绑定参数
* @param writer {@link Writer} 渲染后写入的目标Writer
* @return {@link Writer}
*/
public static Writer render(Template template, Map<String, Object> bindingMap, Writer writer){
template.binding(bindingMap);
template.renderTo(writer);
return writer;
}
/**
* 开始构建 {@link ResourceLoaderBuilder},调用{@link ResourceLoaderBuilder#build()}完成构建
* @return {@link ResourceLoaderBuilder}
*/
public static ResourceLoaderBuilder resourceLoaderBuilder(){
return new ResourceLoaderBuilder();
}
/**
* ResourceLoader构建器
* @author Looly
*
*/
public static class ResourceLoaderBuilder{
private CompositeResourceLoader compositeResourceLoader = new CompositeResourceLoader();
/**
* 创建
* @return {@link ResourceLoaderBuilder}
*/
public static ResourceLoaderBuilder create(){
return new ResourceLoaderBuilder();
}
/**
* 添加一个资源加载器
* @param matcher {@link Matcher} 匹配器
* @param resourceLoader {@link ResourceLoader} 匹配时对应的资源加载器
* @return {@link ResourceLoaderBuilder}
*/
public ResourceLoaderBuilder add(Matcher matcher, ResourceLoader resourceLoader){
compositeResourceLoader.addResourceLoader(matcher, resourceLoader);
return this;
}
/**
* 构建
* @return {@link ResourceLoader} 资源加载器
*/
public ResourceLoader build(){
return compositeResourceLoader;
}
}
}