import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import com.bgsag.xml.StylesheetCache;

// Imported TraX classes
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.Templates;
import javax.xml.transform.stream.StreamSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerConfigurationException;

public class X2H5 extends HttpServlet {
private StylesheetCache cache = null;

    public void init(ServletConfig config)
        throws ServletException
    {
        super.init(config);
        cache = new StylesheetCache();
    }


    public void service (HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException
    {
        // set content type and other response header fields first
        response.setContentType("text/html; CHARSET=\"utf-8\"");

        // get the communication channel with the requesting client
        ServletOutputStream out = response.getOutputStream();


        // instantiate an XSLTProcessor.
        try {

            // create the 5 objects needed to perform the transformation.
            StreamSource xmlSource = new StreamSource(request.getParameter("xml"));
            StreamResult xmlResult = new StreamResult(out);
            Transformer transformer = null;
            String clear = request.getParameter("clear");

            if (clear!=null && clear.equals("true")) {
                cache.clearCache();
            }

            if ( request.getParameter("xslt") != null ) {
                transformer = cache.tryCache(request.getParameter("xslt"),request.getParameter("reload")).newTransformer();
            }
            else {
		TransformerFactory processor = TransformerFactory.newInstance();
		try {
	           if (processor.getAssociatedStylesheet(xmlSource,null,null,null) != null) {
                        transformer = processor.newTransformer(processor.getAssociatedStylesheet(xmlSource,null,null,null));
                        }
                   else {
                        transformer = processor.newTransformer();
                        }
		}
	        catch (TransformerConfigurationException Te) {
		    transformer = processor.newTransformer();
                    }
            }
            transformer.transform(xmlSource, xmlResult);




        } catch (Exception e) {
	out.println(e.getMessage());
        }

    }

}