User: rinkrank Date: 02/05/23 17:59:35 Modified: core/src/xdoclet/template Tag: MODULE_REFACTORING_BRANCH TemplateEngine.java TemplateParser.java Log: changes required for refactored document task Revision Changes Path No revision No revision 1.26.2.6 +56 -45 xdoclet/core/src/xdoclet/template/TemplateEngine.java Index: TemplateEngine.java =================================================================== RCS file: /cvsroot/xdoclet/xdoclet/core/src/xdoclet/template/TemplateEngine.java,v retrieving revision 1.26.2.5 retrieving revision 1.26.2.6 diff -u -w -r1.26.2.5 -r1.26.2.6 --- TemplateEngine.java 19 May 2002 15:29:08 -0000 1.26.2.5 +++ TemplateEngine.java 24 May 2002 00:59:35 -0000 1.26.2.6 @@ -14,10 +14,13 @@ import java.net.URL; import java.util.HashMap; import java.util.Iterator; +import java.util.List; import java.util.Map; import java.util.Properties; +import java.util.Set; import org.apache.commons.logging.Log; +import xdoclet.loader.*; import xdoclet.util.FileManager; import xdoclet.util.LogUtil; @@ -32,7 +35,7 @@ * @author Ara Abrahamian ([EMAIL PROTECTED]) * @author Dmitri Colebatch ([EMAIL PROTECTED]) * @created July 14, 2001 - * @version $Revision: 1.26.2.5 $ + * @version $Revision: 1.26.2.6 $ * @see #generate(java.lang.String) */ public class TemplateEngine @@ -81,52 +84,9 @@ XDOCLET_TAIL_LEN = XDOCLET_TAIL.length(); } - /** - * Initialize the Template Engine. Reads the XDoclet properties file, and loads any tag handler classes specified. - */ protected TemplateEngine() { - Log log = LogUtil.getLog(TemplateEngine.class, "TemplateEngine"); - - try { - Properties tagHandlerMappings = new Properties(); - - tagHandlerMappings.load(getClass().getResourceAsStream(TAG_MAPPINGS_FILE)); - - Iterator tagHandlerMappingNames = tagHandlerMappings.keySet().iterator(); - - while (tagHandlerMappingNames.hasNext()) { - String prefix = (String) tagHandlerMappingNames.next(); - String className = (String) tagHandlerMappings.get(prefix); - - try { - TemplateTagHandler tagHandler = (TemplateTagHandler) Class.forName(className).newInstance(); - - tagHandler.setEngine(this); - - if (this instanceof TemplateParser) { - tagHandler.setParser((TemplateParser) this); - } - // tagHandler.setContext( context ); - tagMappings.put(prefix, tagHandler); - } - catch (NoClassDefFoundError e) { - log.warn(Translator.getString("template_noclassdeffounderror", new String[]{className, e.getMessage()})); - } - catch (ClassNotFoundException e) { - log.warn(Translator.getString("template_classnotfoundexception", new String[]{className, e.getMessage()})); - } - catch (InstantiationException e) { - log.warn(Translator.getString("template_instantiationexception", new String[]{className, e.getMessage()})); - } - catch (IllegalAccessException e) { - log.warn(Translator.getString("template_illegalaccessexception", new String[]{className, e.getMessage()})); - } - } - } - catch (IOException ioe) { - throw new RuntimeException(Translator.getString("template_ioexception", new String[]{ioe.getMessage()})); - } + registerTagHandlers(); } /** @@ -244,6 +204,16 @@ } /** + * Returns a Set of Strings that represent the registered namespaces + * + * @return + */ + public Set getNamespaces() + { + return tagMappings.keySet(); + } + + /** * Sets the Writer attribute of the TemplateEngine object * * @param out The new Writer value @@ -612,6 +582,47 @@ throws InvocationTargetException, IllegalAccessException, TemplateException { return m.invoke(cmdImplProvider, params1); + } + + private void registerTagHandlers() + { + Log log = LogUtil.getLog(TemplateEngine.class, "registerTagHandlers"); + List modules = ModuleFinder.findModules(); + Iterator i = modules.iterator(); + + while (i.hasNext()) { + XDocletModule module = (XDocletModule) i.next(); + + log.debug("Registering module " + module); + + // Register tag handlers defined in the module + List tagHandlerDefinitions = module.getTagHandlerDefinitions(); + Iterator k = tagHandlerDefinitions.iterator(); + + while (k.hasNext()) { + TagHandlerDefinition thd = (TagHandlerDefinition) k.next(); + + log.debug("Registering tag handler " + thd.namespace); + + try { + TemplateTagHandler handler = (TemplateTagHandler) Class.forName(thd.className).newInstance(); + + // get ANOTHER instance for template parser. So it would not overwrite + // template engine settings. +// TemplateTagHandler handlerForParser = (TemplateTagHandler) Class.forName(thd.className).newInstance(); + + log.debug("Add tagHandler " + thd.namespace + " (" + thd.className + ')'); + setTagHandlerFor(thd.namespace, handler); + // add it also to template parser, or it will barf + // while ettempting to parse files... + //TemplateParser.getParserInstance().setTagHandlerFor(thd.namespace, handlerForParser); + + } + catch (Exception e) { + log.error("Couldn't instantiate " + thd.className + " taghandler ", e); + } + } + } } /** 1.10.2.4 +6 -1 xdoclet/core/src/xdoclet/template/TemplateParser.java Index: TemplateParser.java =================================================================== RCS file: /cvsroot/xdoclet/xdoclet/core/src/xdoclet/template/TemplateParser.java,v retrieving revision 1.10.2.3 retrieving revision 1.10.2.4 diff -u -w -r1.10.2.3 -r1.10.2.4 --- TemplateParser.java 22 May 2002 20:08:06 -0000 1.10.2.3 +++ TemplateParser.java 24 May 2002 00:59:35 -0000 1.10.2.4 @@ -24,7 +24,7 @@ * * @author Vincent Harcq ([EMAIL PROTECTED]) * @created December 27, 2001 - * @version $Revision: 1.10.2.3 $ + * @version $Revision: 1.10.2.4 $ */ public class TemplateParser extends TemplateEngine { @@ -49,6 +49,11 @@ public static TemplateParser getParserInstance() { return instance; + } + + public TemplateTagHandler getTagHandlerFor(String prefix) throws TemplateException + { + return TemplateEngine.getEngineInstance().getTagHandlerFor(prefix); } /**
_______________________________________________________________ Don't miss the 2002 Sprint PCS Application Developer's Conference August 25-28 in Las Vegas -- http://devcon.sprintpcs.com/adp/index.cfm _______________________________________________ Xdoclet-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/xdoclet-devel