diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/ConfigurationLoader.java b/src/checkstyle/com/puppycrawl/tools/checkstyle/ConfigurationLoader.java index f6eb4d760..ab075ef4f 100644 --- a/src/checkstyle/com/puppycrawl/tools/checkstyle/ConfigurationLoader.java +++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/ConfigurationLoader.java @@ -39,13 +39,12 @@ import org.xml.sax.InputSource; import org.xml.sax.SAXException; /** - * Loads a configuration from a configuration XML file. + * Loads a configuration from a standard configuration XML file. * * @author Oliver Burn * @version 1.0 */ -public class ConfigurationLoader - extends AbstractLoader +public final class ConfigurationLoader { /** the public ID for the configuration dtd */ private static final String DTD_PUBLIC_ID = @@ -58,6 +57,82 @@ public class ConfigurationLoader /** constant to specify two kilobyte of data */ private static final int TWO_KB = 2048; + /** + * Implements the SAX document handler interfaces, so they do not + * appear in the public API of the ConfigurationLoader. + */ + private class InternalLoader extends AbstractLoader + { + /** + * Creates a new InternalLoader. + * @throws SAXException if an error occurs + * @throws ParserConfigurationException if an error occurs + */ + private InternalLoader() + throws SAXException, ParserConfigurationException + { + super(DTD_PUBLIC_ID, DTD_RESOURCE_NAME); + } + + /** @see org.xml.sax.helpers.DefaultHandler **/ + public void startElement(String aNamespaceURI, + String aLocalName, + String aQName, + Attributes aAtts) + throws SAXException + { + // TODO: debug logging for support puposes + if (aQName.equals("module")) { + //create configuration + final String name = aAtts.getValue("name"); + DefaultConfiguration conf = new DefaultConfiguration(name); + if (mConfiguration == null) { + mConfiguration = conf; + } + + //add configuration to it's parent + if (!mConfigStack.isEmpty()) { + final DefaultConfiguration top = + (DefaultConfiguration) mConfigStack.peek(); + top.addChild(conf); + } + + mConfigStack.push(conf); + } + else if (aQName.equals("property")) { + //extract name and value + final String name = aAtts.getValue("name"); + final String value; + try { + value = replaceProperties(aAtts.getValue("value"), + mOverrideProps); + } + catch (CheckstyleException ex) { + throw new SAXException(ex.getMessage()); + } + + //add to attributes of configuration + final DefaultConfiguration top = + (DefaultConfiguration) mConfigStack.peek(); + top.addAttribute(name, value); + } + } + + /** @see org.xml.sax.helpers.DefaultHandler **/ + public void endElement(String aNamespaceURI, + String aLocalName, + String aQName) + { + if (aQName.equals("module")) { + mConfigStack.pop(); + } + } + + } + + /** the SAX document handler */ + private InternalLoader mSaxHandler = null; + /** overriding properties **/ private final Properties mOverrideProps; /** the loaded configurations **/ @@ -75,7 +150,7 @@ public class ConfigurationLoader private ConfigurationLoader(Properties aOverrideProps) throws ParserConfigurationException, SAXException { - super(DTD_PUBLIC_ID, DTD_RESOURCE_NAME); + mSaxHandler = new InternalLoader(); mOverrideProps = aOverrideProps; } @@ -94,70 +169,13 @@ public class ConfigurationLoader final InputStream configStream = new BufferedInputStream(aStream, TWO_KB); final InputSource inputSource = new InputSource(configStream); - parseInputSource(inputSource); + mSaxHandler.parseInputSource(inputSource); } - /////////////////////////////////////////////////////////////////////////// - // Document handler methods - /////////////////////////////////////////////////////////////////////////// - - /** @see org.xml.sax.helpers.DefaultHandler **/ - public void startElement(String aNamespaceURI, - String aLocalName, - String aQName, - Attributes aAtts) - throws SAXException - { - // TODO: debug logging for support puposes - if (aQName.equals("module")) { - //create configuration - final String name = aAtts.getValue("name"); - final DefaultConfiguration conf = new DefaultConfiguration(name); - if (mConfiguration == null) { - mConfiguration = conf; - } - - //add configuration to it's parent - if (!mConfigStack.isEmpty()) { - final DefaultConfiguration top = - (DefaultConfiguration) mConfigStack.peek(); - top.addChild(conf); - } - - mConfigStack.push(conf); - } - else if (aQName.equals("property")) { - //extract name and value - final String name = aAtts.getValue("name"); - final String value; - try { - value = replaceProperties(aAtts.getValue("value"), - mOverrideProps); - } - catch (CheckstyleException ex) { - throw new SAXException(ex.getMessage()); - } - - //add to attributes of configuration - final DefaultConfiguration top = - (DefaultConfiguration) mConfigStack.peek(); - top.addAttribute(name, value); - } - } - - /** @see org.xml.sax.helpers.DefaultHandler **/ - public void endElement(String aNamespaceURI, - String aLocalName, - String aQName) - { - if (aQName.equals("module")) { - mConfigStack.pop(); - } - } /** - * Returns the check configurations in a specified file. - * @param aConfig name of config file + * Returns the module configurations in a specified file. + * @param aConfig location of config file, can be either a URL or a filename * @param aOverrideProps overriding properties * @return the check configurations * @throws CheckstyleException if an error occurs