package li.template;
import java.io.File;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import li.template.compiler.DefaultCompiler;
import li.util.IOUtil;
/**
* @author li
*/
public class Engine {
private Map<String, Template> templates = new ConcurrentHashMap<String, Template>();
private Map<Object, Object> config = new ConcurrentHashMap<Object, Object>();
public static synchronized Engine getIntense(Map<Object, Object> config) {
Engine engine = new Engine();
engine.config.putAll(config);
return engine;
}
public Template getTemplate(String name) {
Template template = templates.get(name);
if (null == template) {
template = parseTemplate(name, IOUtil.read(new File(config.get("TEMPLATE_DIRECTORY") + name)));
templates.put(name, template);
}
return template;
}
public Template parseTemplate(String name, String content) {
Parser parser = new Parser();
parser.setName(name);
parser.setContent(content);
parser.parse();
return bornTemplate(compileTemplate(parser.getName(), parser.getSource()));
}
public Class<? extends Template> compileTemplate(String name, String source) {
try {
return (Class<? extends Template>) new DefaultCompiler().doCompile(name, source);
} catch (Exception e) {
throw new RuntimeException(e + " ", e);
}
}
public Template bornTemplate(Class<? extends Template> type) {
try {
return (Template) type.newInstance();
} catch (Exception e) {
throw new RuntimeException(e + " ", e);
}
}
}