import javax.servlet.*;
import javax.servlet.http.*;
import java.text.*;
import java.io.*;
import java.util.*;
import java.net.*;
import jess.*;

public class CServlet extends HttpServlet {
   public void doPost( HttpServletRequest request, HttpServletResponse response )
      throws ServletException, IOException
   {
      response.setContentType( "text/html" );

      String root = getInitParameter("root");      // root defined in zone.properties
      String ruleName = request.getParameter("fileRB");
      String title = request.getParameter("titleRB");
      String debug = request.getParameter("debug");

      String fact_name = request.getParameter("fact_name");
      String slot_count = request.getParameter("slot_count");
      int n = Integer.parseInt(slot_count);
      String[] slot_value = new String[20];
      for (int i=1; i<=n; i++) {
        slot_value[i-1] = request.getParameter("slot_value_" + i);
        }

      PrintWriter out = response.getWriter();

      out.println("<html>");
      out.println("<meta http-equiv=\"Content-Type\" content=\"text/html\" >");
      out.println("<head><title>" + title +"</title></head>");
      out.println("<body bgcolor=\"#E3CA95\" text=\"#000000\" link=\"#800000\" vlink=\"#666633\" alink=\"#1445A1\">");
      out.println("<h2>" + title + "</h2>");
      out.println("<pre><b><font face=\"Courier, Arial, sans-serif\" size=+1>");

      Rete rete = new Rete();

      rete.addOutputRouter("t", out);
      rete.addOutputRouter("WSTDOUT", out);
      rete.addOutputRouter("WSTDERR", out);

      try {
        BufferedReader br = new BufferedReader(new FileReader(root + "/sylee/courses/jess/examples/" + ruleName + ".clp"));

        Jesp j = new Jesp(br, rete);
        try
        {
            j.parse(false);
            rete.reset();
            if ("yes".equals(debug)) rete.executeCommand("(watch all)");

            Fact f = new Fact(fact_name, rete);
            ValueVector vv = new ValueVector();
            for (int i=0; i<n; i++)
                vv.add(new Value(slot_value[i], RU.ATOM));
            f.setSlotValue("__data", new Value(vv, RU.LIST));
            rete.assertFact(f);

            if ("yes".equals(debug)) rete.executeCommand("(facts)");
            rete.run();
        }
        catch (JessException re)
        {
            re.printStackTrace(rete.getErrStream());
        }

    }catch(IOException e){}

    out.println("</font></b></pre></body></html>");
    out.close();

    }
}
