package com.jspxcms.common.freemarker;
import java.io.CharArrayReader;
import java.io.IOException;
import java.io.Reader;
import com.jspxcms.common.util.Strings;
import freemarker.cache.TemplateLoader;
/**
* FreeMarker模板加载类
*
* @author liufang
*
*/
public class AdapterTemplateLoader implements TemplateLoader {
private TemplateLoader templateLoader;
public AdapterTemplateLoader(TemplateLoader templateLoader) {
this.templateLoader = templateLoader;
}
public void closeTemplateSource(Object templateSource) throws IOException {
templateLoader.closeTemplateSource(templateSource);
}
public Object findTemplateSource(String name) throws IOException {
return templateLoader.findTemplateSource(name);
}
public long getLastModified(Object templateSource) {
return templateLoader.getLastModified(templateSource);
}
public Reader getReader(final Object templateSource, final String encoding)
throws IOException {
StringBuilder sb = new StringBuilder();
Reader superReader = templateLoader.getReader(templateSource, encoding);
try {
char[] buff = new char[8192];
int readed;
while ((readed = superReader.read(buff)) != -1) {
sb.append(buff, 0, readed);
}
} finally {
superReader.close();
}
Strings.replace(sb, "/_files", "${_files}");
Strings.replace(sb, "_files", "${_files}");
int len = sb.length();
char[] readerChar = new char[len];
sb.getChars(0, len, readerChar, 0);
CharArrayReader charArrayReader = new CharArrayReader(readerChar);
return charArrayReader;
}
}