protected void doGet(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException {
    String oper = req.getParameter("oper");
    if (log.isDebugEnabled()) {
      log.debug("oper=" + oper);
    }

    AbstractPolicyDesignHandler handler = getPolicyHandler(req);
    req.setAttribute("handler", handler);

    if ("return".equals(oper)) {
      String gotoPage = handler.getManagePage();

      // remove handler from session
      req.getSession().removeAttribute(getPolicyHandlerAttributeKey(req));

      // goto manage page
      resp.sendRedirect(gotoPage);
      return;
    } else {
      // prepare test
      QueryManager queryMng = WebUtil.getQueryManager(req);
      handler.prepareTest(queryMng);

      WebUtil.forward(req, resp, handler.getTestMainPage());
    }
  }
  protected void doPost(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException {
    String oper = req.getParameter("oper");
    if (log.isDebugEnabled()) {
      log.debug("oper=" + oper);
    }

    AbstractPolicyDesignHandler handler = getPolicyHandler(req);
    req.setAttribute("handler", handler);

    if ("runTest".equals(oper)) {
      boolean testUserNeeded = handler.isTestUserNeeded();
      String[] testBusinessDataFields = handler.getTestBusinessDataFields();
      String[] testContextFields = handler.getTestContextFields();

      User testUser = buildTestUser(req, testUserNeeded);

      Object testBdData = null;
      Map testCtx = null;
      try {
        testBdData = buildTestBusinessData(req, testBusinessDataFields);
        testCtx = buildTestContext(req, testContextFields);
      } catch (Exception e) {
        PrintWriter writer = resp.getWriter();
        writer.write("<font color='red'><pre>");
        e.printStackTrace(writer);
        writer.write("</pre></font>");
        return;
      }

      ScriptTestResult testResult = handler.run(testUser, testBdData, testCtx);
      req.setAttribute("testResult", testResult);

      WebUtil.forward(req, resp, handler.getShowTestResultPage());
    } else if ("save".equals(oper)) {
      // remove handler from session
      req.getSession().removeAttribute(getPolicyHandlerAttributeKey(req));

      int id = WebUtil.getIntParameter(req, "id", -23);
      try {
        handler.save(id);
      } catch (EntityExistException e) {
        log.error("", e);
        throw new ServletException(e);
      }

      return;
    } else if ("setBusinessDataClass".equals(oper)) {
      String bdClass = req.getParameter("businessDataClass");
      handler.setBusinessDataClass(bdClass);

      req.setAttribute("testBusinessDataFields", handler.getTestBusinessDataFields());
      req.setAttribute("testBusinessDataFieldTypes", handler.getTestBusinessDataFieldTypes());
      req.setAttribute("bdClass", bdClass);

      WebUtil.forward(req, resp, "/ralasafe/common/inputTestBusinessData.jsp");
      return;
    }
  }