package net.ihe.xcpd.resp.tools;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.StringReader;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Element;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

/**
 * 
 * @author abderrazek boufahja
 *
 */
public class ElementString {
    
    static DocumentBuilder docBuilder;
    
    static void initBuilder() {
        try {
            DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
            docBuilderFactory.setNamespaceAware(true);
            docBuilder = docBuilderFactory.newDocumentBuilder();
        } catch (ParserConfigurationException ex) {
            throw new RuntimeException(ex);
        }
    }
    
    public static Element string2Element0 (String str)
        throws SAXException, IOException {
        if (str==null) return null;
        return string2Element(str);
    }
    
    public static Element string2Element (String str)
        throws SAXException, IOException{
        if (docBuilder == null) initBuilder();
        return docBuilder.parse(new InputSource(new StringReader(str))).getDocumentElement();
    }
    
    public static String printAssertion(Element assertion) throws Exception {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        TransformerFactory tranFactory = TransformerFactory.newInstance();
        Transformer aTransformer = tranFactory.newTransformer();
        Source src = new DOMSource(assertion);
        Result dest = new StreamResult(baos);
        aTransformer.transform(src, dest);
        String res = baos.toString();
        int i = res.indexOf("?>");
        if (i>0) {
            res = res.substring(i+2);
        }
        return res;
    }
    
    public static String getRealElementString(String el){
        String res = new String(el);
        int i = res.indexOf("?>");
        if (i>0) {
            res = res.substring(i+2);
        }
        return res;
    }

}
