//
//  DOMParser.java
//  XMLPerfTest
//
//  Created by Xose Manoel Ramos on 16/12/05.
//  Copyright 2005 __MyCompanyName__. All rights reserved.
//

import org.w3c.dom.*;
import javax.xml.parsers.*;    
import java.io.*;
import org.xml.sax.*;
import org.apache.xpath.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.*;
import javax.xml.transform.stream.*;

public class DOMParser {  

   private Document sourceDocument = null;

   public void loadDocument(String document)
   {
		// XML objects 
		 DocumentBuilder docBuilder;

		 NodeList nodeList;
		 DOMImplementation dom;
		 
		 //Create Document Builder  
		 try {
			 docBuilder = DocumentBuilderFactory
								.newInstance()
								.newDocumentBuilder();
			dom = docBuilder.getDOMImplementation();
			}
			catch (Exception e)
			{
				e.printStackTrace();
				return;
			}


			try {
			 // Document for the new file
			 sourceDocument = docBuilder.parse(document);
			}
			catch (Exception e)
			{
					e.printStackTrace();
					return;
			}

   }
   
   	public void getLinks()
	{
		if (sourceDocument == null)
		{
			return;
		}
		
		NodeList nodelist = sourceDocument.getElementsByTagName("link");
		
		//System.out.println("Number of Links : " + nodelist.getLength() );
	}
	
   	public void getSpanishLinks()
	{
		if (sourceDocument == null)
		{
			return;
		}
		
		NodeList nodelist = sourceDocument.getElementsByTagName("link");
		
		int links = 0;
		
		for (int i=0; i<nodelist.getLength() ; i++)
		{
			if ( isInSpanish(nodelist.item(i) ) )
			{
			  links++;
			}
		}
		//System.out.println("Number of Links : " + links );
	}
	
	private boolean isInSpanish(Node node)
	{
		String element = "weblog";
		String attribute = "lang";
		String lang = "es";
		if ( element.equals(node.getParentNode().getNodeName()) )
		{
			if ( lang.equals(node.getParentNode().getAttributes().getNamedItem(attribute).getNodeValue() ) )
			{
				return true;
			}
			else
			{
				return false;
			}
		}
		else if (node.getParentNode() != null)
		{
			return isInSpanish(node.getParentNode());
		}
		else
		{
			return false;
		}
	}
}
