Author: mnuttall
Date: Tue Dec  8 14:41:30 2009
New Revision: 888411

URL: http://svn.apache.org/viewvc?rev=888411&view=rev
Log:
ARIES-74: Extend Parser and ParserService to also accept an InputStream

Modified:
    
incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ParserService.java
    
incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/Parser.java
    
incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/ParserServiceImpl.java

Modified: 
incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ParserService.java
URL: 
http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ParserService.java?rev=888411&r1=888410&r2=888411&view=diff
==============================================================================
--- 
incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ParserService.java
 (original)
+++ 
incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ParserService.java
 Tue Dec  8 14:41:30 2009
@@ -17,15 +17,71 @@
 
 package org.apache.aries.blueprint;
 
+import java.io.InputStream;
 import java.net.URL;
 import java.util.List;
 
 import org.osgi.framework.Bundle;
 
 public interface ParserService {
-
+  
+  /**
+   * Parse a single InputStream containing blueprint xml. No validation will 
be performed. The caller
+   * is responsible for closing the InputStream afterwards.  
+   * @param is           InputStream containing blueprint xml. 
+   * @param clientBundle The client's bundle 
+   * @return             ComponentDefinitionRegistry containing metadata 
generated by the parser. 
+   * @throws Exception
+   */
+  ComponentDefinitionRegistry parse (InputStream is, Bundle clientBundle) 
throws Exception;
+  
+  /**
+   * Parse a single InputStream containing blueprint xml. The caller is 
responsible for 
+   * closing the InputStream afterwards.  
+   * @param is           Input stream containing blueprint xml
+   * @param clientBundle The client's bundle 
+   * @param validate     Indicates whether or not to validate the blueprint xml
+   * @return             ComponentDefinitionRegistry containing metadata 
generated by the parser. 
+   * @throws Exception
+   */
+  ComponentDefinitionRegistry parse (InputStream is, Bundle clientBundle, 
boolean validate) throws Exception;
+  
+  /**
+   * Parse blueprint xml referred to by a single URL. No validation will be 
performed. 
+   * @param url          URL reference to the blueprint xml to parse
+   * @param clientBundle The client's bundle
+   * @return             ComponentDefinitionRegistry containing metadata 
generated by the parser.
+   * @throws Exception
+   */
+  ComponentDefinitionRegistry parse (URL url, Bundle clientBundle) throws 
Exception;
+  
+  /**
+   * Parse blueprint xml referred to by a single URL.
+   * @param url          URL reference to the blueprint xml to parse
+   * @param clientBundle The client's bundle
+   * @param validate     Indicates whether or not to validate the blueprint xml
+   * @return             ComponentDefinitionRegistry containing metadata 
generated by the parser.
+   * @throws Exception
+   */
+  ComponentDefinitionRegistry parse (URL url, Bundle clientBundle, boolean 
validate) throws Exception;
+  
+  /**
+   * Parse blueprint xml referred to by a list of URLs. No validation will be 
performed. 
+   * @param urls         URL reference to the blueprint xml to parse
+   * @param clientBundle The client's bundle
+   * @return             ComponentDefinitionRegistry containing metadata 
generated by the parser.
+   * @throws Exception
+   */
        ComponentDefinitionRegistry parse (List<URL> urls, Bundle clientBundle) 
throws Exception;
        
+  /**
+   * Parse blueprint xml referred to by a list of URLs.
+   * @param urls         URL reference to the blueprint xml to parse
+   * @param clientBundle The client's bundle
+   * @param validate     Indicates whether or not to validate the blueprint xml
+   * @return             ComponentDefinitionRegistry containing metadata 
generated by the parser.
+   * @throws Exception
+   */
        ComponentDefinitionRegistry parse (List<URL> urls, Bundle clientBundle, 
boolean validate) throws Exception;
        
 }

Modified: 
incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/Parser.java
URL: 
http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/Parser.java?rev=888411&r1=888410&r2=888411&view=diff
==============================================================================
--- 
incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/Parser.java
 (original)
+++ 
incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/Parser.java
 Tue Dec  8 14:41:30 2009
@@ -181,7 +181,7 @@
 
     private static DocumentBuilderFactory documentBuilderFactory;
 
-    private List<Document> documents;
+    private List<Document> documents = new ArrayList<Document>();
     private ComponentDefinitionRegistry registry;
     private NamespaceHandlerRegistry.NamespaceHandlerSet handlers;
     private String idPrefix = "component-";
@@ -199,22 +199,34 @@
         this.idPrefix = idPrefix;
     }
 
+    /**
+     * Parse an input stream for blueprint xml. 
+     * @param inputStream The data to parse. The caller is responsible for 
closing the stream afterwards. 
+     * @throws Exception
+     */
+    public void parse(InputStream inputStream) throws Exception { 
+      InputSource inputSource = new InputSource(inputStream);
+      DocumentBuilder builder = 
getDocumentBuilderFactory().newDocumentBuilder();
+      Document doc = builder.parse(inputSource);
+      documents.add(doc);
+    }
+    
+    /**
+     * Parse blueprint xml referred to by a list of URLs
+     * @param urls URLs to blueprint xml to parse
+     * @throws Exception
+     */
     public void parse(List<URL> urls) throws Exception {
-        List<Document> documents = new ArrayList<Document>();
         // Create document builder factory
         // Load documents
         for (URL url : urls) {
             InputStream inputStream = url.openStream();
             try {
-                InputSource inputSource = new InputSource(inputStream);
-                DocumentBuilder builder = 
getDocumentBuilderFactory().newDocumentBuilder();
-                Document doc = builder.parse(inputSource);
-                documents.add(doc);
+                parse (inputStream);
             } finally {
                 inputStream.close();
             }
         }
-        this.documents = documents;
     }
 
     public Set<URI> getNamespaces() {

Modified: 
incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/ParserServiceImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/ParserServiceImpl.java?rev=888411&r1=888410&r2=888411&view=diff
==============================================================================
--- 
incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/ParserServiceImpl.java
 (original)
+++ 
incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/ParserServiceImpl.java
 Tue Dec  8 14:41:30 2009
@@ -1,7 +1,10 @@
 package org.apache.aries.blueprint.container;
 
+import java.io.IOException;
+import java.io.InputStream;
 import java.net.URI;
 import java.net.URL;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
 
@@ -10,6 +13,7 @@
 import 
org.apache.aries.blueprint.container.NamespaceHandlerRegistry.NamespaceHandlerSet;
 import org.apache.aries.blueprint.namespace.ComponentDefinitionRegistryImpl;
 import org.osgi.framework.Bundle;
+import org.xml.sax.SAXException;
 
 public class ParserServiceImpl implements ParserService {
 
@@ -18,20 +22,48 @@
        public ParserServiceImpl (NamespaceHandlerRegistry nhr) { 
                _namespaceHandlerRegistry = nhr;
        }
-       public ComponentDefinitionRegistry parse(List<URL> urls, Bundle 
clientBundle) throws Exception {
-               return parse(urls, clientBundle, false);
-       }
        
+       public ComponentDefinitionRegistry parse(URL url, Bundle clientBundle) 
throws Exception {
+    return parse (url, clientBundle, false);
+  }
+
+  public ComponentDefinitionRegistry parse(URL url, Bundle clientBundle, 
boolean validate)
+      throws Exception {
+    List<URL> urls = new ArrayList<URL>();
+    urls.add(url);
+    return parse (urls, clientBundle, validate);
+  }
+  
+  public ComponentDefinitionRegistry parse(List<URL> urls, Bundle 
clientBundle) throws Exception {
+    return parse(urls, clientBundle, false);
+  }
+  
        public ComponentDefinitionRegistry parse(List<URL> urls, Bundle 
clientBundle, boolean validate) throws Exception {
-               Parser parser = new Parser();   
-               parser.parse(urls);
-               Set<URI> nsuris = parser.getNamespaces();
-               NamespaceHandlerSet nshandlers = 
_namespaceHandlerRegistry.getNamespaceHandlers(nsuris, clientBundle);
-               if (validate) { 
-                 parser.validate( nshandlers.getSchema());
-               }
-               ComponentDefinitionRegistry cdr = new 
ComponentDefinitionRegistryImpl();
-               parser.populate(nshandlers, cdr);
-               return cdr;             
+         Parser parser = new Parser();   
+         parser.parse(urls);
+         return validateAndPopulate (parser, clientBundle, validate);
        }
+       
+  public ComponentDefinitionRegistry parse(InputStream is, Bundle 
clientBundle) throws Exception {
+    return parse (is, clientBundle, false);
+  }
+  
+  public ComponentDefinitionRegistry parse(InputStream is, Bundle 
clientBundle, boolean validate) throws Exception {
+    Parser parser = new Parser();
+    parser.parse(is);
+    return validateAndPopulate (parser, clientBundle, validate);
+  }
+    
+  private ComponentDefinitionRegistry validateAndPopulate (Parser parser, 
Bundle clientBundle, boolean validate) 
+  throws IOException, SAXException { 
+    Set<URI> nsuris = parser.getNamespaces();
+    NamespaceHandlerSet nshandlers = 
_namespaceHandlerRegistry.getNamespaceHandlers(nsuris, clientBundle);
+    if (validate) { 
+      parser.validate( nshandlers.getSchema());
+    }
+    ComponentDefinitionRegistry cdr = new ComponentDefinitionRegistryImpl();
+    parser.populate(nshandlers, cdr);
+    return cdr;   
+  }
+
 }


Reply via email to