Return-Path: Delivered-To: apmail-commons-commits-archive@minotaur.apache.org Received: (qmail 97044 invoked from network); 3 Feb 2011 15:11:47 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 3 Feb 2011 15:11:47 -0000 Received: (qmail 53311 invoked by uid 500); 3 Feb 2011 15:11:46 -0000 Delivered-To: apmail-commons-commits-archive@commons.apache.org Received: (qmail 53025 invoked by uid 500); 3 Feb 2011 15:11:44 -0000 Mailing-List: contact commits-help@commons.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@commons.apache.org Delivered-To: mailing list commits@commons.apache.org Received: (qmail 53018 invoked by uid 99); 3 Feb 2011 15:11:43 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 03 Feb 2011 15:11:43 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 03 Feb 2011 15:11:40 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 3D2592388A64; Thu, 3 Feb 2011 15:11:19 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1066826 - /commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/DigesterLoader.java Date: Thu, 03 Feb 2011 15:11:19 -0000 To: commits@commons.apache.org From: simonetripodi@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20110203151119.3D2592388A64@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org 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); + } + }