package com.ilink.whlsl;
/**
 * 
Web based interface to the Wholesale system.
 * The WhlslServlet needs to receive the XML document stream as an HTTP POST where the xml document is the only piece of the POST
 * Copyright:   Copyright (c) 2001
 * Company:     I-Link Incorporated
 * @author John Muhlestein
 * @version 1.0
 */
 import javax.servlet.*;
 import javax.servlet.http.*;
 import javax.servlet.ServletConfig;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.ServletException;
 import java.io.*;
 import java.util.*;
 import org.xml.sax.SAXException;
 import java.sql.SQLException;
 import org.jdom.Document;
 import org.jdom.input.SAXBuilder;
 import org.jdom.Element;
 import org.jdom.Namespace;
 import org.jdom.output.XMLOutputter;
 import org.jdom.JDOMException;
public class WhlslServlet extends HttpServlet {
  private static final String CONTENT_TYPE = "text/xml";
  private WhlslXMLProcessor whlslProcessor;
  private Namespace ns = Namespace.getNamespace("ilink", "http://www.i-link.net");
  private PrintWriter output;
  /**Initialize global variables*/
  public void init(ServletConfig config) throws ServletException {
    super.init(config);
  }
  /*Process HTTP Get requests -- this is for testing*/
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html");
    output = response.getWriter();
    output.println("You Found it.");
    output.println("You Found It!
");
  }
  /**Process the HTTP Post request*/
  public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType(CONTENT_TYPE);
    output = response.getWriter();
    char[] buf = new char[request.getContentLength()];
    BufferedReader br = new BufferedReader(request.getReader());
    br.read(buf);
    StringReader sr = new StringReader(String.valueOf(buf));
    try {
    SAXBuilder builder = new SAXBuilder(true);
    WhlslXMLProcessor.errorDump("building the document");
    Document doc = builder.build(sr);
    WhlslXMLProcessor.errorDump("Document built");
//      whlslProcessor = new WhlslXMLProcessor(doc);
//      whlslProcessor.process();
//      Document retDoc = whlslProcessor.buildReturnXML();
//      printResults(retDoc);
      printResults(String.valueOf(buf));
//    }
/*    catch (WhlslException we) {
      gracefulExit(we);
    } catch (SQLException sqle) {
      gracefulExit(sqle);   */
    } catch (Exception e) {
      WhlslXMLProcessor.errorDump("servlet Exception");
      gracefulExit(e);
    }
  }
   private void gracefulExit(Exception e) {
    //generate the message to send to the client
    WhlslXMLProcessor.errorDump("gracefulExit");
    Document doc = new Document(new Element("results", ns));
    doc.getRootElement()
      .addContent(new Element("status", ns)
        .setText("Unable to complete transaction"))
      .addContent(new Element("errormessage", ns)
        .setText(e.getMessage() ));
    try {
      WhlslXMLProcessor.errorDump("try to printResults");
      printResults(doc);
    } catch (Exception ioe) {
      String ios = e.toString();
    }
    //close any database connections that may be open
//    whlslProcessor.closeDBConnection();
    //exit the program
    System.exit(-1);
  }
  private void printResults() throws IOException {
    output.println("No parameter passed. New account made.");
    output.flush();
  }
  private void printResults(String s) throws IOException {
    output.println(s);
    output.flush();
  }
  private void printResults(Document doc) {
  try{
    XMLOutputter fmt = new XMLOutputter("  ", true);
//    fmt.output(doc, output);
    output.print(fmt.outputString(doc));
    output.flush();
    }
    catch(Exception e)
    {
//      WhlslXMLProcessor.errorDump("just plain exception\n"+e.toString());
      System.out.println(e.getMessage());
    }
  }
}