package fajlkezeles;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

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

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import com.sun.xml.internal.txw2.IllegalAnnotationException;

public class Fajlkezelo {


	private String path;
	private Document gameDoc;
	private boolean valid;
	private String welcomeLabel,jatek0001Example,jatek0002Example;
	private String jatek0003Example,szakdolgozatText;
	

	public Fajlkezelo(String p) {
		this.valid=true;
		this.path=p;
		this.gameDoc=acceptFile(path);
	}
	public Fajlkezelo(InputStream file) {
		try {
			Properties props = new Properties();
	    	props.load(file);
	    	this.welcomeLabel = props.getProperty("szakdolgozat.welcomeLabel");
	       	this.jatek0001Example=props.getProperty("szakdolgozat.jatek0001Example");
	       	this.jatek0002Example=props.getProperty("szakdolgozat.jatek0002Example");
	       	this.jatek0003Example=props.getProperty("szakdolgozat.jatek0003Example");
	       	this.szakdolgozatText=props.getProperty("szakdolgozat.szakdolgozatText");
    	}catch(IOException e) {
    		System.out.println("Hiba: nem lehet betölteni a konfigurációs állományt!");
    		e.printStackTrace();   		
    	}

	}

	private Document acceptFile(String x){
		Document d = null;
		try {
			
			DocumentBuilderFactory f = DocumentBuilderFactory.newInstance();
	        f.setValidating(true); // Default is false
	        DocumentBuilder b = f.newDocumentBuilder();
	        ErrorHandler h = new XMLErrorHandler();
	        b.setErrorHandler(new XMLErrorHandler());
	        d = b.parse(x);
		     } catch (ParserConfigurationException e) {
		        //System.out.println(e.toString());  
		        this.valid=false;
		     } catch (SAXException e) {
		        //System.out.println(e.toString());
		        this.valid=false;
		     } catch (IOException e) {
		    	 //System.out.println(e.toString());
		    	 this.valid=false;
		    	 
		     }
		   return d;
	}
	
	private class XMLErrorHandler implements ErrorHandler {
	      public void warning(SAXParseException e) throws SAXException {
	         //System.out.println("Figyelmeztetés: "); 
	    	  notValid(e);
	      }
	      public void error(SAXParseException e) throws SAXException {
	         //System.out.println("HIBA: "); 
	    	  notValid(e);
	      }
	      public void fatalError(SAXParseException e) throws SAXException {
	         //System.out.println("Végzetes hiba: "); 
	    	  notValid(e);
	      }
	      private void notValid(SAXParseException e) {
	      	 //System.out.println("   Public ID: "+e.getPublicId());
	      	 //System.out.println("   System ID: "+e.getSystemId());
	    	 //System.out.println("   Sorszám: "+e.getLineNumber());
	    	 //System.out.println("   Oszlop szám: "+e.getColumnNumber());
	    	 //System.out.println("   Üzenet: "+e.getMessage());
	      	 valid=false;
	      }
	      public void error(IllegalAnnotationException arg0) {
			valid=false;
			
	      }
	}
	public Document getGameDoc() {
		return gameDoc;
	}

	public boolean isValid() {
		return valid;
	}

	public String getCode(Document d) {
		Element root = d.getDocumentElement();
		Element gameElement=null;
		NodeList children=null;
		children = root.getElementsByTagName("information");
		gameElement = (Element)children.item(0);
		return gameElement.getAttribute("code");
	}
	public String getWelcomeLabel() {
		return welcomeLabel;
	}
	public void setWelcomeLabel(String welcomeLabel) {
		this.welcomeLabel = welcomeLabel;
	}
	public String getJatek0001Example() {
		return jatek0001Example;
	}
	public void setJatek0001Example(String jatek0001Example) {
		this.jatek0001Example = jatek0001Example;
	}
	public String getJatek0002Example() {
		return jatek0002Example;
	}
	public void setJatek0002Example(String jatek0002Example) {
		this.jatek0002Example = jatek0002Example;
	}
	public String getJatek0003Example() {
		return jatek0003Example;
	}
	public void setJatek0003Example(String jatek0003Example) {
		this.jatek0003Example = jatek0003Example;
	}
	public String getSzakdolgozatText() {
		return szakdolgozatText;
	}
	public void setSzakdolgozatText(String szakdolgozatText) {
		this.szakdolgozatText = szakdolgozatText;
	}
	

}
