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

import javax.xml.stream.FactoryConfigurationError;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;

/**
 * @author Patryk Czarnik
 */
public class LiczbyStream {
  private static XMLStreamReader fReader;

  public static void main(String[] args) {
    LiczbyStream instancja = new LiczbyStream();
    instancja.run(args);
  }
  
  public void run(String[] args) {
    if(args.length < 1) {
      System.out.println("Za malo parametrow");
      return;
    }
    
    int result = 0;
    
    try {
      XMLInputFactory factory = XMLInputFactory.newInstance();
      if(factory.isPropertySupported("javax.xml.stream.isValidating"))
        factory.setProperty("javax.xml.stream.isValidating", Boolean.FALSE);
      else
        System.out.println("walidacja nieobslugiwana");
      fReader = factory.createXMLStreamReader(new FileInputStream(args[0]));
      
      while(fReader.hasNext()) {
        int eventType = fReader.next();
        if(eventType == XMLStreamConstants.START_ELEMENT) {
          if("grupa".equals(fReader.getLocalName())) {
            String attrVal = fReader.getAttributeValue(null,"wazne");
            if("tak".equals(attrVal)) {
              result += this.processGroup();
            }
          }
        }
      }
      fReader.close();
    } catch (IllegalArgumentException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (FileNotFoundException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (FactoryConfigurationError e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (XMLStreamException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    System.out.println("Result: "+result);
  }

  private int processGroup() throws XMLStreamException {
	int result = 0;
	
    while(fReader.hasNext()) {
      int eventType = fReader.next();
      switch(eventType) {
      case XMLStreamConstants.START_ELEMENT :
        if("l".equals(fReader.getLocalName())) {
         String val = fReader.getElementText();
            try {
              result += Integer.parseInt(val);
            } catch (NumberFormatException e) {
            }
          }
      break;
      case XMLStreamConstants.END_ELEMENT :
        if("grupa".equals(fReader.getLocalName())) {
        	return result;
        }
      break;
      }
    }
    return result;
  }
}
