12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- package com.udapsoft.modular.web.template;
- import java.io.OutputStream;
- import java.io.OutputStreamWriter;
- import java.io.Writer;
- import java.util.Map;
- import org.springframework.core.io.Resource;
- import org.springframework.util.StringUtils;
- import com.udapsoft.modular.core.context.ApplicationContextAwareImpl;
- import freemarker.cache.ClassTemplateLoader;
- import freemarker.cache.FileTemplateLoader;
- import freemarker.template.Configuration;
- import freemarker.template.Template;
- public class TemplateUtils {
- private static final String DEFAULT_ENCODING = "UTF-8";
- public static void generate(String templatePath, Class<?> loaderClass,
- Map model, OutputStream out) {
- try {
- generate(templatePath, loaderClass, model, new OutputStreamWriter(
- out));
- } catch (Exception e) {
- throw new TemplateGenerateException(e);
- }
- }
- public static void generate(String templatePath, Class loaderClass,
- Map model, Writer out) {
- if (!StringUtils.hasText(templatePath)) {
- throw new IllegalArgumentException("템플릿의 클래스 경로가 필요합니다. - "
- + templatePath);
- }
- if (model == null) {
- throw new IllegalArgumentException("템플릿을 생성하기 위해서는 모델이 필요합니다.");
- }
- if (out == null) {
- throw new IllegalArgumentException("템플릿을 생성할 스트림이 필요합니다.");
- }
- String PATH = "/";
- try {
- Configuration cfg = new Configuration();
- cfg.setDefaultEncoding("UTF-8");
- cfg.setNumberFormat("0.######");
- int idx = templatePath.lastIndexOf("/");
- String prefix = templatePath.substring(0, idx);
- String templateFile = templatePath.substring(idx + 1);
- Template template = null;
- if ((templatePath.startsWith("file:"))
- || (templatePath.startsWith("url:"))
- || (templatePath.startsWith("classpath:"))) {
- Resource resource = ApplicationContextAwareImpl.getApplicationContext().getResource(prefix);
- FileTemplateLoader ftl = new FileTemplateLoader(
- resource.getFile());
- cfg.setTemplateLoader(ftl);
- template = cfg.getTemplate(templateFile);
- } else {
- Class<?> lc = null;
- if (templatePath.startsWith("/")) {
- lc = loaderClass == null ? TemplateUtils.class
- : loaderClass;
- } else {
- if (loaderClass == null) {
- throw new IllegalArgumentException(
- "템플릿의 클래스 경로가 상대경로일 경우에는 loaderClass가 필요합니다.");
- }
- lc = loaderClass;
- }
- ClassTemplateLoader ctl = new ClassTemplateLoader(lc, prefix);
- cfg.setTemplateLoader(ctl);
- template = cfg.getTemplate(templateFile);
- }
- template.process(model, out);
- } catch (Exception e) {
- throw new TemplateGenerateException(e);
- }
- }
- }
|