This commit is contained in:
Looly
2022-09-23 23:45:59 +08:00
parent 62c80a2184
commit 1f554b7759
22 changed files with 314 additions and 134 deletions

View File

@@ -1,36 +0,0 @@
package cn.hutool.extra.template;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.StringWriter;
import java.util.Map;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.IoUtil;
/**
* 抽象模板,提供将模板融合后写出到文件、返回字符串等方法
*
* @author looly
*
*/
public abstract class AbstractTemplate implements Template{
@Override
public void render(final Map<?, ?> bindingMap, final File file) {
BufferedOutputStream out = null;
try {
out = FileUtil.getOutputStream(file);
this.render(bindingMap, out);
} finally {
IoUtil.close(out);
}
}
@Override
public String render(final Map<?, ?> bindingMap) {
final StringWriter writer = new StringWriter();
render(bindingMap, writer);
return writer.toString();
}
}

View File

@@ -1,46 +1,63 @@
package cn.hutool.extra.template;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.IoUtil;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.OutputStream;
import java.io.StringWriter;
import java.io.Writer;
import java.util.Map;
/**
* 抽象模板接口
*
* @author looly
*
* @author looly
*/
public interface Template {
/**
* 将模板与绑定参数融合后输出到Writer
*
*
* @param bindingMap 绑定的参数此Map中的参数会替换模板中的变量
* @param writer 输出
* @param writer 输出
*/
void render(Map<?, ?> bindingMap, Writer writer);
/**
* 将模板与绑定参数融合后输出到流
*
*
* @param bindingMap 绑定的参数此Map中的参数会替换模板中的变量
* @param out 输出
* @param out 输出
*/
void render(Map<?, ?> bindingMap, OutputStream out);
/**
* 写出到文件
*
* @param bindingMap 绑定的参数此Map中的参数会替换模板中的变量
* @param file 输出到的文件
* @param file 输出到的文件
*/
void render(Map<?, ?> bindingMap, File file);
default void render(final Map<?, ?> bindingMap, final File file) {
BufferedOutputStream out = null;
try {
out = FileUtil.getOutputStream(file);
this.render(bindingMap, out);
} finally {
IoUtil.close(out);
}
}
/**
* 将模板与绑定参数融合后返回为字符串
*
*
* @param bindingMap 绑定的参数此Map中的参数会替换模板中的变量
* @return 融合后的内容
*/
String render(Map<?, ?> bindingMap);
default String render(final Map<?, ?> bindingMap) {
final StringWriter writer = new StringWriter();
render(bindingMap, writer);
return writer.toString();
}
}

View File

@@ -1,6 +1,6 @@
package cn.hutool.extra.template.engine.beetl;
import cn.hutool.extra.template.AbstractTemplate;
import cn.hutool.extra.template.Template;
import java.io.OutputStream;
import java.io.Serializable;
@@ -12,7 +12,7 @@ import java.util.Map;
*
* @author looly
*/
public class BeetlTemplate extends AbstractTemplate implements Serializable{
public class BeetlTemplate implements Template, Serializable{
private static final long serialVersionUID = -8157926902932567280L;
private final org.beetl.core.Template rawTemplate;

View File

@@ -1,6 +1,6 @@
package cn.hutool.extra.template.engine.enjoy;
import cn.hutool.extra.template.AbstractTemplate;
import cn.hutool.extra.template.Template;
import java.io.OutputStream;
import java.io.Serializable;
@@ -13,7 +13,7 @@ import java.util.Map;
* @author looly
* @since 4.1.9
*/
public class EnjoyTemplate extends AbstractTemplate implements Serializable {
public class EnjoyTemplate implements Template, Serializable {
private static final long serialVersionUID = 1L;
private final com.jfinal.template.Template rawTemplate;
@@ -22,7 +22,7 @@ public class EnjoyTemplate extends AbstractTemplate implements Serializable {
* 包装Enjoy模板
*
* @param EnjoyTemplate Enjoy的模板对象 {@link com.jfinal.template.Template}
* @return {@link EnjoyTemplate}
* @return {@code EnjoyTemplate}
*/
public static EnjoyTemplate wrap(final com.jfinal.template.Template EnjoyTemplate) {
return (null == EnjoyTemplate) ? null : new EnjoyTemplate(EnjoyTemplate);

View File

@@ -2,7 +2,7 @@ package cn.hutool.extra.template.engine.freemarker;
import cn.hutool.core.io.IORuntimeException;
import cn.hutool.core.io.IoUtil;
import cn.hutool.extra.template.AbstractTemplate;
import cn.hutool.extra.template.Template;
import cn.hutool.extra.template.TemplateException;
import java.io.IOException;
@@ -17,7 +17,7 @@ import java.util.Map;
*
* @author looly
*/
public class FreemarkerTemplate extends AbstractTemplate implements Serializable{
public class FreemarkerTemplate implements Template, Serializable{
private static final long serialVersionUID = -8157926902932567280L;
freemarker.template.Template rawTemplate;

View File

@@ -2,7 +2,7 @@ package cn.hutool.extra.template.engine.jetbrick;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.reflect.TypeReference;
import cn.hutool.extra.template.AbstractTemplate;
import cn.hutool.extra.template.Template;
import jetbrick.template.JetTemplate;
import java.io.OutputStream;
@@ -17,7 +17,7 @@ import java.util.Map;
* @author looly
* @since 5.7.21
*/
public class JetbrickTemplate extends AbstractTemplate implements Serializable{
public class JetbrickTemplate implements Template, Serializable{
private static final long serialVersionUID = 1L;
private final JetTemplate rawTemplate;

View File

@@ -2,7 +2,7 @@ package cn.hutool.extra.template.engine.rythm;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.reflect.TypeReference;
import cn.hutool.extra.template.AbstractTemplate;
import cn.hutool.extra.template.Template;
import java.io.OutputStream;
import java.io.Serializable;
@@ -15,7 +15,7 @@ import java.util.Map;
* @author looly
*
*/
public class RythmTemplate extends AbstractTemplate implements Serializable {
public class RythmTemplate implements Template, Serializable {
private static final long serialVersionUID = -132774960373894911L;
private final org.rythmengine.template.ITemplate rawTemplate;
@@ -24,7 +24,7 @@ public class RythmTemplate extends AbstractTemplate implements Serializable {
* 包装Rythm模板
*
* @param template Rythm的模板对象 {@link org.rythmengine.template.ITemplate}
* @return {@link RythmTemplate}
* @return {@code RythmTemplate}
*/
public static RythmTemplate wrap(final org.rythmengine.template.ITemplate template) {
return (null == template) ? null : new RythmTemplate(template);

View File

@@ -5,7 +5,7 @@ import cn.hutool.core.io.IoUtil;
import cn.hutool.core.reflect.TypeReference;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.ObjUtil;
import cn.hutool.extra.template.AbstractTemplate;
import cn.hutool.extra.template.Template;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
@@ -22,7 +22,7 @@ import java.util.Map;
* @author looly
* @since 4.1.11
*/
public class ThymeleafTemplate extends AbstractTemplate implements Serializable {
public class ThymeleafTemplate implements Template, Serializable {
private static final long serialVersionUID = 781284916568562509L;
private final TemplateEngine engine;
@@ -35,7 +35,7 @@ public class ThymeleafTemplate extends AbstractTemplate implements Serializable
* @param engine Thymeleaf的模板引擎对象 {@link TemplateEngine}
* @param template 模板路径或模板内容
* @param charset 编码
* @return {@link ThymeleafTemplate}
* @return {@code ThymeleafTemplate}
*/
public static ThymeleafTemplate wrap(final TemplateEngine engine, final String template, final Charset charset) {
return (null == engine) ? null : new ThymeleafTemplate(engine, template, charset);

View File

@@ -3,9 +3,9 @@ package cn.hutool.extra.template.engine.velocity;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.reflect.TypeReference;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.text.StrUtil;
import cn.hutool.extra.template.AbstractTemplate;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.extra.template.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
@@ -20,7 +20,7 @@ import java.util.Map;
* @author looly
*
*/
public class VelocityTemplate extends AbstractTemplate implements Serializable {
public class VelocityTemplate implements Template, Serializable {
private static final long serialVersionUID = -132774960373894911L;
private final org.apache.velocity.Template rawTemplate;

View File

@@ -2,7 +2,6 @@ package cn.hutool.extra.template.engine.wit;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.reflect.TypeReference;
import cn.hutool.extra.template.AbstractTemplate;
import org.febit.wit.Template;
import java.io.OutputStream;
@@ -15,7 +14,7 @@ import java.util.Map;
*
* @author looly
*/
public class WitTemplate extends AbstractTemplate implements Serializable{
public class WitTemplate implements cn.hutool.extra.template.Template, Serializable{
private static final long serialVersionUID = 1L;
private final Template rawTemplate;