package jdom;

import java.io.File;
import java.io.FileReader;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.transform.sax.SAXSource;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;

public class Validator {

    static final String JAXP_SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage";
    static final String JAXP_SCHEMA_SOURCE = "http://java.sun.com/xml/jaxp/properties/schemaSource";
    static final String W3C_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";


    public static Document domParseWithXsd(String xmlFileName, String xsdFileName){

        return domParseWithXsd(xmlFileName, xsdFileName, false);

    }

    public static Document domParseWithXsd(String xmlFileName, String xsdFileName, boolean isNameSpaceAware){
        try{
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            dbFactory.setIgnoringComments(true);
            dbFactory.setNamespaceAware(isNameSpaceAware);
            dbFactory.setValidating(true);
            dbFactory.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
            dbFactory.setAttribute(JAXP_SCHEMA_SOURCE, new File(xsdFileName));

            DocumentBuilder documentBuilder = dbFactory.newDocumentBuilder();
            XmlValidHandler errorHandler = new XmlValidHandler();
            documentBuilder.setErrorHandler(errorHandler);

            SAXSource source = new SAXSource(new InputSource(new FileReader(xmlFileName)));

            SAXParserFactory parserFactory = SAXParserFactory.newInstance();
            SAXParser parser = parserFactory.newSAXParser();

            System.out.println("Start SAX parsing...");
            parser.parse(new File(xmlFileName), errorHandler);
            System.out.println("SAX parsing ended");

            Document dom = documentBuilder.parse(xmlFileName);
            return dom;
        }
        catch(Exception e){
            e.printStackTrace();            
            return null;
        }

    }

    public static void main(String[]args){
        Validator.domParseWithXsd("etudiant.xml", "etudiant.xsd");
        
    }


}
