Author: simonetripodi Date: Thu Feb 3 15:11:18 2011 New Revision: 1066826 URL: http://svn.apache.org/viewvc?rev=1066826&view=rev Log: first checkin of Digester instances creation methods Modified: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/DigesterLoader.java Modified: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/DigesterLoader.java URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/DigesterLoader.java?rev=1066826&r1=1066825&r2=1066826&view=diff ============================================================================== --- commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/DigesterLoader.java (original) +++ commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/DigesterLoader.java Thu Feb 3 15:11:18 2011 @@ -25,10 +25,16 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import javax.xml.validation.Schema; +import org.apache.commons.digester3.rules.BaseRules; +import org.apache.commons.digester3.spi.Rules; import org.apache.commons.digester3.spi.Substitutor; +import org.xml.sax.SAXException; +import org.xml.sax.XMLReader; /** * This class manages the creation of Digester instances from digester rules modules. @@ -235,4 +241,100 @@ public final class DigesterLoader { return Collections.unmodifiableMap(this.entityValidator); } + /** + * Creates a new {@link Digester} instance that relies on the default {@link Rules} implementation. + * + * @return a new {@link Digester} instance + */ + public Digester newDigester() { + return this.newDigester(new BaseRules()); + } + + /** + * Creates a new {@link Digester} instance that relies on the custom user define {@link Rules} implementation + * + * @param rules The custom user define {@link Rules} implementation + * @return a new {@link Digester} instance + */ + public Digester newDigester(Rules rules) { + try { + return this.newDigester(this.factory.newSAXParser(), rules); + } catch (ParserConfigurationException e) { + throw new DigesterLoadingException("SAX Parser misconfigured", e); + } catch (SAXException e) { + throw new DigesterLoadingException("An error occurred while initializing the SAX Parser", e); + } + } + + /** + * Creates a new {@link Digester} instance that relies on the given {@code SAXParser} + * and the default {@link Rules} implementation. + * + * @param parser the user defined {@code SAXParser} + * @return a new {@link Digester} instance + */ + public Digester newDigester(SAXParser parser) { + return this.newDigester(parser, new BaseRules()); + } + + /** + * Creates a new {@link Digester} instance that relies on the given {@code SAXParser} + * and custom user define {@link Rules} implementation. + * + * @param parser The user defined {@code SAXParser} + * @param rules The custom user define {@link Rules} implementation + * @return a new {@link Digester} instance + */ + public Digester newDigester(SAXParser parser, Rules rules) { + if (parser == null) { + throw new DigesterLoadingException("SAXParser must be not null"); + } + + try { + return this.newDigester(parser.getXMLReader(), rules); + } catch (SAXException e) { + throw new DigesterLoadingException("An error occurred while creating the XML Reader", e); + } + } + + /** + * Creates a new {@link XMLReader} instance that relies on the given {@code XMLReader} + * and the default {@link Rules} implementation. + * + * @param reader The user defined {@code XMLReader} + * @return a new {@link Digester} instance + */ + public Digester newDigester(XMLReader reader) { + return this.newDigester(reader, new BaseRules()); + } + + /** + * Creates a new {@link XMLReader} instance that relies on the given {@code XMLReader} + * and custom user define {@link Rules} implementation. + * + * @param reader The user defined {@code XMLReader} + * @param rules The custom user define {@link Rules} implementation + * @return a new {@link Digester} instance + */ + public Digester newDigester(XMLReader reader, Rules rules) { + if (reader == null) { + throw new DigesterLoadingException("XMLReader must be not null"); + } + if (rules == null) { + throw new DigesterLoadingException("Impossible to create a new Digester with null Rules"); + } + + ClassLoader classLoader = this.classLoader != null ? this.classLoader : + (this.useContextClassLoader ? Thread.currentThread().getContextClassLoader() : this.getClass().getClassLoader()); + + // check if there were errors while binding rules + if (this.rulesBinder.containsErrors()) { + throw new DigesterLoadingException(this.rulesBinder.getErrors()); + } + + this.rulesBinder.populateRules(rules); + + return new DigesterImpl(reader, rules, classLoader, this.substitutor, this.entityValidator); + } + }