From a0909c6c000ea133a0ed46ca1bd4139d58369e86 Mon Sep 17 00:00:00 2001 From: xueqingkun Date: Mon, 25 Mar 2024 10:18:45 +0800 Subject: [PATCH] =?UTF-8?q?freemark=20=E5=B7=A5=E5=85=B7=E5=B0=81=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../util/freemark/DatabaseTemplateLoader.java | 83 ------------------- .../freemark/FreemarkerConfiguration.java | 15 ---- .../util/freemark/StringTemplateConfig.java | 75 +++++++++++++++++ 3 files changed, 75 insertions(+), 98 deletions(-) delete mode 100644 src/main/java/com/supervision/util/freemark/DatabaseTemplateLoader.java delete mode 100644 src/main/java/com/supervision/util/freemark/FreemarkerConfiguration.java create mode 100644 src/main/java/com/supervision/util/freemark/StringTemplateConfig.java diff --git a/src/main/java/com/supervision/util/freemark/DatabaseTemplateLoader.java b/src/main/java/com/supervision/util/freemark/DatabaseTemplateLoader.java deleted file mode 100644 index af2e332..0000000 --- a/src/main/java/com/supervision/util/freemark/DatabaseTemplateLoader.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.supervision.util.freemark; - -import cn.hutool.core.util.ObjUtil; -import com.supervision.domain.IrKnowledge; -import com.supervision.service.IrKnowledgeService; -import freemarker.cache.TemplateLoader; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.io.Reader; -import java.io.StringReader; - -/** - * Created by xiaoj on 2016/9/8. - */ -@Slf4j -@Component -@RequiredArgsConstructor -public class DatabaseTemplateLoader implements TemplateLoader { - - private final IrKnowledgeService irKnowledgeService; - - @Override - public Object findTemplateSource(String templateId) { - try { - IrKnowledge irKnowledge = irKnowledgeService.getById(templateId); - long lastModified = ObjUtil.isNull(irKnowledge.getUpdateTime()) ? 0L : irKnowledge.getUpdateTime().getNano(); - return new StringTemplateSource(templateId, irKnowledge.getResultTemplate(),lastModified); - } catch (Exception e) { - return null; - } - } - - @Override - public long getLastModified(Object templateSource) { - return ((StringTemplateSource) templateSource).lastModified; - } - - @Override - public Reader getReader(Object templateSource, String encoding) { - return new StringReader(((StringTemplateSource) templateSource).source); - } - - @Override - public void closeTemplateSource(Object templateSource) { - //do nothing - } - - private static class StringTemplateSource { - private final String name; - private final String source; - private final long lastModified; - - StringTemplateSource(String name, String source, long lastModified) { - if (name == null) { - throw new IllegalArgumentException("name == null"); - } - if (source == null) { - throw new IllegalArgumentException("source == null"); - } - if (lastModified < -1L) { - throw new IllegalArgumentException("lastModified < -1L"); - } - this.name = name; - this.source = source; - this.lastModified = lastModified; - } - - public boolean equals(Object obj) { - if (obj instanceof StringTemplateSource) { - return name.equals(((StringTemplateSource) obj).name); - } - return false; - } - - public int hashCode() { - return name.hashCode(); - } - } - - -} \ No newline at end of file diff --git a/src/main/java/com/supervision/util/freemark/FreemarkerConfiguration.java b/src/main/java/com/supervision/util/freemark/FreemarkerConfiguration.java deleted file mode 100644 index b835d8f..0000000 --- a/src/main/java/com/supervision/util/freemark/FreemarkerConfiguration.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.supervision.util.freemark; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - - -@Configuration -public class FreemarkerConfiguration { - @Bean("databaseFreemarkerConfiguration") - public freemarker.template.Configuration databaseTemplateLoader(DatabaseTemplateLoader databaseTemplateLoader) { - freemarker.template.Configuration configuration = new freemarker.template.Configuration(freemarker.template.Configuration.VERSION_2_3_30); - configuration.setTemplateLoader(databaseTemplateLoader); - return configuration; - } -} diff --git a/src/main/java/com/supervision/util/freemark/StringTemplateConfig.java b/src/main/java/com/supervision/util/freemark/StringTemplateConfig.java new file mode 100644 index 0000000..3c5d6ae --- /dev/null +++ b/src/main/java/com/supervision/util/freemark/StringTemplateConfig.java @@ -0,0 +1,75 @@ +package com.supervision.util.freemark; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.digest.MD5; +import freemarker.cache.StringTemplateLoader; +import freemarker.template.Configuration; +import freemarker.template.Template; +import freemarker.template.TemplateException; + +import java.io.IOException; +import java.io.StringWriter; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +public class StringTemplateConfig { + + private final Configuration configuration; + private final StringTemplateLoader loader; + + private final Map tempMap = new HashMap<>(); + + + private static class SingletonHolder { + private static final StringTemplateConfig INSTANCE = new StringTemplateConfig(); + } + + private StringTemplateConfig() { + configuration = new Configuration(Configuration.VERSION_2_3_30); + loader = new StringTemplateLoader(); + configuration.setTemplateLoader(loader); + } + + public static StringTemplateConfig getInstance() { + return SingletonHolder.INSTANCE; + } + + public Template getTemplate(String name) throws IOException { + if (!tempMap.containsKey(name)) { + return null; + } + return this.configuration.getTemplate(name); + } + + public void putTemplate(String name, String content){ + tempMap.put(name, content); + this.loader.putTemplate(name, content); + } + + public boolean removeTemplate(String name){ + if (tempMap.remove(name) != null){ + return this.loader.removeTemplate(name); + } + return true; + } + + public String process(String content, Map data) throws IOException, TemplateException { + if (StrUtil.isEmpty(content)) { + return null; + } + String name = contentToName(content); + if (Objects.isNull(tempMap.get(name))) { + this.putTemplate(name, content); + } + Template template = this.getTemplate(name); + StringWriter out = new StringWriter(); + template.process(data, out); + return out.toString(); + + } + + public String contentToName(String content){ + return MD5.create().digestHex16(content); + } +}