package wyklad_pl;
/*
 * Created on 2004-11-29
 */
import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.DOMException;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.xml.sax.SAXException;

/** Przyklad zastosowania DOM.
 * @author Patryk Czarnik
 */
public class LiczbyDOM {
  public static void main(String[] args) {
    if(args.length < 1) {
      System.out.println("Za malo parametrow");
      return;
    }

    int result = 0;
    try {
      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
      factory.setValidating(true);
      DocumentBuilder builder = factory.newDocumentBuilder();
      Document doc = builder.parse(args[0]);
      Node cur = doc.getFirstChild();
      while(cur.getNodeType() != Node.ELEMENT_NODE)
        cur = cur.getNextSibling();
      cur = cur.getFirstChild();
      while(cur != null) {
        if(cur.getNodeType() == Node.ELEMENT_NODE) {
          Node attr = cur.getAttributes().getNamedItem("wazne");
          if(attr != null && "tak".equals(attr.getNodeValue())) {
            result += processGroup(cur);
          }
        }
        cur = cur.getNextSibling();
      }
    } catch (DOMException e) {
      e.printStackTrace();
    } catch (FactoryConfigurationError e) {
      e.printStackTrace();
    } catch (ParserConfigurationException e) {
      e.printStackTrace();
    } catch (SAXException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
    System.out.println("Result: "+result);
  }
  
  private static int processGroup(Node group) {
    int result = 0;
    
    Node cur = group.getFirstChild();
    while(cur != null) {
      if(cur.getNodeType() == Node.ELEMENT_NODE
          && "l".equals(cur.getNodeName())) {
        StringBuffer buf = new StringBuffer();
        Node child = cur.getFirstChild();
        while(child != null) {
          if(child.getNodeType() == Node.TEXT_NODE)
            buf.append(child.getNodeValue());
          child = child.getNextSibling();
        }
        try {
          result += Integer.parseInt(buf.toString());;
        } catch (NumberFormatException e) {
        }
      }
      cur = cur.getNextSibling();
    }
    return result;
  }
}
