import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

import java.util.List;

import CLIPSJNI.*;

public class Zebra 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 fileRB = request.getParameter("fileRB");
      PrintWriter out = response.getWriter();

      out.println("<html>");
      out.println("<meta http-equiv=\"Content-Type\" content=\"text/html\" >");
      out.println("<head><title>Zebra Puzzle</title></head>");
      out.println("<body bgcolor=\"#E3CA95\" text=\"#000000\" link=\"#800000\" vlink=\"#666633\" alink=\"#1445A1\">");
      out.println("<h2>Zebra Puzzle</h2>");
      out.println("<pre><b><font face=\"Courier, Arial, sans-serif\" size=+1>");

      System.load("c:/clips/CLIPSJNI/CLIPSJNI.dll");

      Environment clips = new Environment();
      clips.load(root + "/sylee/courses/clips/clipsjni/examples/zebra/" + fileRB + ".clp");

      clips.reset();

      clips.run();

      String evalStr = "(find-all-facts ((?f output)) TRUE)";
      MultifieldValue pv = (MultifieldValue) clips.eval(evalStr);
      int tNum = pv.listValue().size();
      if (tNum == 0) return;
      List theList = pv.listValue();
      FactAddressValue fv;

      out.println("<font +1><Table border=\"1\" width=\"72%\" bgcolor=\"#E0FFFF\">");
      out.println("<tr><td>"+"House"+"</td>"+"<td>"+"Nationality"+"</td>"+"<td>"+"Color"+"</td>"+"<td>"+"Pet"+"</td>"+"<td>"+"Drink"+"</td>"+"<td>"+"Smokes"+"</td></tr>");

      for (int i=0; i<tNum; i++)
        {
         fv = (FactAddressValue) pv.listValue().get(i);
         MultifieldValue values = (MultifieldValue) fv.getFactSlot("values");
         List vlist = values.listValue();
         tableRow(vlist, out);
        }
      out.println("</Table></font>");

    out.println("</font></b></pre></body></html>");
    out.close();
    }

    public void tableRow(List list, PrintWriter out) {
        int n = list.size();
        out.println("<tr>");
        for (int i=0; i<n; i++){
            out.println("<td>" + list.get(i) + "</td>");
        }
        out.println("</tr>");
    }
}
