import java.io.File;
import java.io.IOException;
import java.io.InputStream;
+import java.util.Map;
+import java.util.HashMap;
import mir.generator.tal.interfaces.TALExpressionParser;
+import mir.generator.tal.template.TALTemplate;
+import mir.generator.tal.template.TALTemplateNodeLibrary;
+import mir.generator.tal.template.TALBasicTemplateNodeLibrary;
public class TALTemplateEngine {
private TALExpressionParser expressionParser;
private String basePath;
private CachingFileLoader loader;
+ private Map urlToLibrary;
+ private Map prefixToLibrary;
+
public TALTemplateEngine(TALExpressionParser anExpressionParser, String aBasePath) {
expressionParser = anExpressionParser;
basePath = aBasePath;
loader = new CachingFileLoader(100, new TemplateFactory());
+
+ urlToLibrary = new HashMap();
+ prefixToLibrary = new HashMap();
+
+ registerTemplateNodeLibrary("tal", "http://xml.zope.org/namespaces/tal", new TALBasicTemplateNodeLibrary("tal", "http://xml.zope.org/namespaces/tal"));
+ registerTemplateNodeLibrary("metal", "http://xml.zope.org/namespaces/metal",
+ new TALBasicTemplateNodeLibrary("metal", "http://xml.zope.org/namespaces/metal"));
+
+ }
+
+ public void registerTemplateNodeLibrary(String aPrefix, String aUrl, TALTemplateNodeLibrary aLibrary) {
+ urlToLibrary.put(aUrl, aLibrary);
+ prefixToLibrary.put(aPrefix, aLibrary);
}
public TALTemplate loadTemplate(String aName) throws IOException {
return (TALTemplate) loader.retrieveFile(location.getCanonicalPath());
}
+ public TALTemplateNodeLibrary getLibraryForPrefix(String aPrefix) {
+ return (TALTemplateNodeLibrary) prefixToLibrary.get(aPrefix);
+ }
+
+ public TALTemplateNodeLibrary getLibraryForUrl(String aUrl) {
+ return (TALTemplateNodeLibrary) urlToLibrary.get(aUrl);
+ }
+
private class TemplateFactory implements CachingFileLoader.CachedFileObjectFactory {
public Object constructObject(InputStream aStream) {
try {
- return TALTemplateParser.parse(aStream, expressionParser);
+ TALTemplateParser parser = new TALTemplateParser(TALTemplateEngine.this);
+
+ return parser .parse(aStream, expressionParser);
}
catch (Throwable t) {
throw new TALFailure(t);