package com.whump.course.realworld;

import java.util.*;
import java.io.*;
import java.net.URL;
import java.net.URLEncoder;
import javax.servlet.*;
import javax.servlet.http.*;
import com.oreilly.servlet.ParameterParser;
import com.oreilly.servlet.ParameterNotFoundException;

/** egroupsRequest
 * <p>Implements the eGroups RSS API in a Java Servlet
 * the servlet may be called via either POST or GET it accepts
 * as a parameter the name of the group.
 * 
 * <p>So it would be invoked via:
 * <pre>http://hostname/servlet/egroupsRequest?<em>group</em>
 * </p>
 *
 * <p>The servlet returns a RSS 0.91 document 
 * with the responses from the eGroups server
 *
 * @author Bill Humphries
 */
public class egroupsRequest extends HttpServlet
{
    
    private String request;
    
    // These are read from servlet initialization parameters
    private String requestURL;  // the URL of the server
    private String args;
    private String sheet;       // the style sheet
    private boolean debug;
    
    private transformer transform;
    
    private void setRequest(String group)
    {   
        this.request = "http://" + requestURL + "/" + URLEncoder.encode(group)
        				+ "?" + args;
    }
    
    private String getRequest()
    {
        return this.request;
    }
    
	public void init(ServletConfig config) throws ServletException
	{
		super.init(config);

		String host     = "www.egroups.com";
		String path     = "/messages";
	
		args	= "rss=1&viscount=10";
		
		requestURL = host + path;
		sheet   = "http://www.whump.com/moreLikeThis/weblogRSS91.xsl";
		
        	String strdebug = "true";
        	if (strdebug.equals("true"))
        	{ 
        	    debug = true;   
        	}
        	else
        	{
        	    debug = false;   
        	}
        
        if (debug)
      	  {
      	      System.out.println("Initialization Parameters");
      	      Enumeration enum = getInitParameterNames();
            	while (enum.hasMoreElements())
            	{
                	String name = (String) enum.nextElement();
 					System.out.println(name + ": " + getInitParameter(name));
            	}
               
        	   }
        
	}

	public void doGet(HttpServletRequest req, HttpServletResponse resp)
	throws ServletException, IOException
	{
		// setup writing output
		resp.setContentType("text/html");
		PrintWriter out = resp.getWriter();
		
		// get the arguments from the request
		
		String itemnum;
		
		ParameterParser parser = new ParameterParser(req);
		try 
		{
		    itemnum = parser.getStringParameter("group"); 
		}
		catch (ParameterNotFoundException e)
		{
		    itemnum = "syndication";  
		}
		
		// generate the request
		
		setRequest(itemnum);
        
        // print debuggy stuff to the server log
        if (debug)
        {
            System.out.println("Making Request:");
            System.out.println(getRequest());
            System.out.flush();
        }
        
	    URL url = new URL(getRequest());
       
        // set up the transformer

        try
        {
            transform = new transformer(sheet);
        }
        catch (org.xml.sax.SAXException e)
        {
            System.out.println(e.toString());
        }
        
        transform.setSource(new InputStreamReader(url.openStream()));
        transform.setTarget(out);
        
        try 
        {
            transform.process();
        }
        catch (org.xml.sax.SAXException e)
        {
            System.out.println(e.toString());
        }
	}

	public void doPost(HttpServletRequest req, HttpServletResponse resp)
	throws ServletException, IOException
	{
		this.doGet(req, resp);

	}

}
