content: /*******************************************************************************
   * Copyright (c) 2000, 2007 IBM Corporation and others.
   * All rights reserved. This program and the accompanying materials
   * are made available under the terms of the Eclipse Public License v1.0
   * which accompanies this distribution, and is available at
   * http://www.eclipse.org/legal/epl-v10.html
   *
   * Contributors:
   *     IBM Corporation - initial API and implementation
   *******************************************************************************/
  package org.eclipse.wst.jsdt.internal.ui.javadocexport;
  
  import java.io.BufferedInputStream;
  import java.io.IOException;
  import java.io.InputStream;
  
  import javax.xml.parsers.DocumentBuilder;
  import javax.xml.parsers.DocumentBuilderFactory;
  import javax.xml.parsers.ParserConfigurationException;
  
  import org.eclipse.core.runtime.Assert;
  import org.w3c.dom.Element;
  import org.w3c.dom.Node;
  import org.w3c.dom.NodeList;
  import org.xml.sax.InputSource;
  import org.xml.sax.SAXException;
  
  
  /**
   * Reads data from an InputStream and returns a JarPackage
   */
  public class JavadocReader extends Object {
  
  	private InputStream fInputStream;
  
  	/**
  	 * Reads a Javadoc Ant Script from the underlying stream.
  	 * It is the client's responsibility to close the stream.
  	 */
  	public JavadocReader(InputStream inputStream) {
  		Assert.isNotNull(inputStream);
  		fInputStream= new BufferedInputStream(inputStream);
  	}
  
  	/**
  	 * Closes this stream.
  	 * It is the clients responsibility to close the stream.
  	 * 
  	 * @exception IOException
  	 */
  	public void close() throws IOException {
  		if (fInputStream != null)
  			fInputStream.close();
  	}
  
  	public Element readXML() throws IOException, SAXException {
  
  		DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance();
  		factory.setValidating(false);
  		DocumentBuilder parser= null;
  		try {
  			parser= factory.newDocumentBuilder();
  		} catch (ParserConfigurationException ex) {
  			throw new IOException(ex.getMessage());
  		} finally {
  			// Note: Above code is OK since clients are responsible to close the stream
  		}
  
  		//find the project associated with the ant script
  		Element xmlJavadocDesc= parser.parse(new InputSource(fInputStream)).getDocumentElement();
  
  		NodeList targets= xmlJavadocDesc.getChildNodes();
  
  		for (int i= 0; i < targets.getLength(); i++) {
  			Node target= targets.item(i);
  
  			//look through the XML file for the javadoc task
  			if (target.getNodeName().equals("target")) { //$NON-NLS-1$
  				NodeList children= target.getChildNodes();
  				for (int j= 0; j < children.getLength(); j++) {
  					Node child= children.item(j);
  					if (child.getNodeName().equals("javadoc") && (child.getNodeType() == Node.ELEMENT_NODE)) { //$NON-NLS-1$
  						return (Element) child;
  					}
  				}
  			}
  
  		}
  		return null;
  	}
  
  }
  