mwomack 2002/12/09 23:01:21 Modified: src/java/org/apache/log4j/xml DOMConfigurator.java Log: Added code to parse plugin elements and start the resulting plugin object. Added code to fire a configuration changed event on the repository being configured. Revision Changes Path 1.52 +47 -4 jakarta-log4j/src/java/org/apache/log4j/xml/DOMConfigurator.java Index: DOMConfigurator.java =================================================================== RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/xml/DOMConfigurator.java,v retrieving revision 1.51 retrieving revision 1.52 diff -u -r1.51 -r1.52 --- DOMConfigurator.java 16 Oct 2002 13:48:31 -0000 1.51 +++ DOMConfigurator.java 10 Dec 2002 07:01:21 -0000 1.52 @@ -87,6 +87,7 @@ static final String INTERNAL_DEBUG_ATTR = "debug"; static final String RENDERING_CLASS_ATTR = "renderingClass"; static final String RENDERED_CLASS_ATTR = "renderedClass"; + static final String PLUGIN_TAG = "plugin"; static final String EMPTY_STR = ""; static final Class[] ONE_STRING_PARAM = new Class[] {String.class}; @@ -526,6 +527,40 @@ LogLog.debug(catName + " level set to " + logger.getLevel()); } + protected Plugin parsePlugin(Element pluginElement) { + String className = subst(pluginElement.getAttribute(CLASS_ATTR)); + LogLog.debug("Creating plugin: [" + className+']'); + try { + Plugin plugin = (Plugin)Loader.loadClass(className).newInstance(); + PropertySetter propSetter = new PropertySetter(plugin); + + plugin.setName(subst(pluginElement.getAttribute(NAME_ATTR))); + + NodeList children = pluginElement.getChildNodes(); + final int length = children.getLength(); + for (int loop = 0; loop < length; loop++) { + Node currentNode = children.item(loop); + + /* We're only interested in Elements */ + if (!isElement(currentNode)) { + continue; + } + + Element currentElement = (Element)currentNode; + + // Parse appender parameters + if (currentElement.getTagName().equals(PARAM_TAG)) { + setParameter(currentElement, propSetter); + } + } + return plugin; + } catch (Exception e) { + LogLog.error("Could not create plugin. Reported error follows.", + e); + return null; + } + } + protected void setParameter(Element elem, PropertySetter propSetter) { String name = subst(elem.getAttribute(NAME_ATTR)); String value = (elem.getAttribute(VALUE_ATTR)); @@ -759,19 +794,27 @@ for (int loop = 0; loop < length; loop++) { currentNode = children.item(loop); if (!isElement(currentNode)) { - continue; + continue; } currentElement = (Element) currentNode; tagName = currentElement.getTagName(); if (tagName.equals(CATEGORY) || tagName.equals(LOGGER)) { - parseCategory(currentElement); + parseCategory(currentElement); } else if (tagName.equals(ROOT_TAG)) { - parseRoot(currentElement); + parseRoot(currentElement); } else if(tagName.equals(RENDERER_TAG)) { - parseRenderer(currentElement); + parseRenderer(currentElement); + } else if (tagName.equals(PLUGIN_TAG)) { + Plugin plugin = parsePlugin(currentElement); + if (plugin != null) { + PluginRegistry.startPlugin(plugin, repository); + } } } + + // let listeners know the configuration just changed + repository.fireConfigurationChangedEvent(); }
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>