package hall;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

/** 
 *  Part of tutorial on servlets and JSP that appears at
 *  http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/
 *  1999 Marty Hall; may be freely used or adapted.
 */

public class PrimeNumbers extends HttpServlet {
  private static PrimeList primeList;
  
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
      throws ServletException, IOException {
    log("Entered PrimeNumbers!");
    int numPrimes =
      ServletUtilities.getIntParameter(request, "numPrimes", 50);
    int numDigits =
      ServletUtilities.getIntParameter(request, "numDigits", 120);
    int numPrimesPrinted =
      ServletUtilities.getIntParameter(request, "numPrimesPrinted", -1);
    if (numPrimesPrinted > numPrimes)
      numPrimesPrinted = 0;
    if ((numPrimesPrinted == -1) || (primeList == null)) {
      primeList = new PrimeList(numPrimes, numDigits, true);
    }
    Vector currentPrimes = primeList.getPrimes();
    int numCurrentPrimes = currentPrimes.size();
    // TO DO: How to build URL to self? 
    if (numPrimes > numPrimesPrinted) {
      response.setHeader("Refresh",
                         "5; URL=http://hallmr1/servlet/hall.PrimeNumbers?" +
                           "numPrimes=" + numPrimes +
                           "&numDigits=" + numDigits +
                           "&numPrimesPrinted=" + currentPrimes.size());
    }
    if (numPrimesPrinted < numCurrentPrimes)
      buildPrimeTable(response, numPrimes, numDigits,
                      currentPrimes, numCurrentPrimes);
    else
      response.setStatus(response.SC_NO_CONTENT);
  }

  public void buildPrimeTable(HttpServletResponse response,
                              int numPrimes,
                              int numDigits,
                              Vector currentPrimes,
                              int numCurrentPrimes)
      throws IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    String title = "Some " + numDigits + "-Digit Prime Numbers";
    out.println(ServletUtilities.headWithTitle(title) +
                "<BODY BGCOLOR=\"#FDF5E6\">\n" +
                "<H2 ALIGN=CENTER>" + title + "</H1>\n" +
                "<H3>Found " + numCurrentPrimes +
                " prime numbers with " + numDigits +
                " or more digits.</H3>");
    int numPrimesRemaining = numPrimes - numCurrentPrimes;
    if (numPrimesRemaining == 0)
      out.println("<B>Done searching.</B>");
    else
      out.println("<B>Still looking for " + numPrimesRemaining +
                  " more<BLINK>...</BLINK></B>");
    out.println("<OL>");
    for(int i=0; i<numCurrentPrimes; i++) {
      out.println("  <LI>" + currentPrimes.elementAt(i));
    }
    out.println("</OL>");
    out.println("</BODY></HTML>");
  }

  public void doPost(HttpServletRequest request,
                     HttpServletResponse response)
      throws ServletException, IOException {
    doGet(request, response);
  }
}
