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

    PrintWriter out = null;
    String statusText = "received";

    // get the gridManager and populate needed values
    GridManager gm = GridManagerFactory.getGridManager();
    String supportedAppletVersion = gm.getSupportedAppletVersion();

    if ((request.getParameter("version") != null)
        && (request.getParameter("version").equals(supportedAppletVersion))
        && (request.getParameter("nodeIdentifier") != null)) {
      gm.processHeartbeat(request);
    } else {
      statusText = "rejected";
    }

    try {
      // setup the heartbeat response
      response.setContentType("text/plain");
      out = response.getWriter();
      out.println(statusText);
      out.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    String context = "context0";
    context = ServletUtilities.getContext(request);
    Shepherd myShepherd = new Shepherd(context);
    GridManager gm = GridManagerFactory.getGridManager();
    // set up for response
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    String action = request.getParameter("action");
    System.out.println("scanTaskHandler action is: " + action);
    if (action != null) {

      if ((action.equals("removeTask")) && (request.getParameter("taskID") != null)) {
        myShepherd.beginDBTransaction();
        boolean locked = false;
        // gotta check if it's a valid scanTask to begin with!

        // check for permissions to delete this scanTask
        boolean deletePermission = false;
        deletePermission = true;

        if ((myShepherd.isScanTask(request.getParameter("taskID"))) && (deletePermission)) {
          try {

            // change
            ThreadPoolExecutor es = SharkGridThreadExecutorService.getExecutorService();

            ScanTask st = myShepherd.getScanTask(request.getParameter("taskID"));
            myShepherd.getPM().deletePersistent(st);

            myShepherd.commitDBTransaction();

            // scanTaskCleanupThread swiThread=new
            // scanTaskCleanupThread(request.getParameter("taskID"));
            es.execute(new ScanTaskCleanupThread(request.getParameter("taskID")));

          } catch (Exception e) {
            locked = true;
            System.out.println("I encounter the following error while deleting a scanTask:");
            e.printStackTrace();

            myShepherd.rollbackDBTransaction();
          }
          if (!locked) {
            // confirm success
            out.println(ServletUtilities.getHeader(request));
            out.println(
                "<strong>Success:</strong> The scanTask <i>"
                    + request.getParameter("taskID")
                    + "</i> has been removed.");
            out.println(
                "<p><a href=\"http://"
                    + CommonConfiguration.getURLLocation(request)
                    + "/appadmin/scanTaskAdmin.jsp\">Return to scanTask administration page.</a></p>\n");
            out.println(ServletUtilities.getFooter(context));
          } else {
            out.println(ServletUtilities.getHeader(request));
            out.println(
                "<strong>Error:</strong> The scanTask <i>"
                    + request.getParameter("taskID")
                    + "</i> was not removed. The task may be locked by another user or in process. Check the logs for more information.");
            out.println(
                "<p><a href=\"http://"
                    + CommonConfiguration.getURLLocation(request)
                    + "/appadmin/scanTaskAdmin.jsp\">Return to scanTask administration page.</a></p>\n");
            out.println(ServletUtilities.getFooter(context));
          }
        } else {
          myShepherd.rollbackDBTransaction();
          out.println(ServletUtilities.getHeader(request));
          out.println(
              "<strong>Error:</strong> The scanTask <i>"
                  + request.getParameter("taskID")
                  + "</i> was not identified in the database.");
          out.println(
              "<p><a href=\"http://"
                  + CommonConfiguration.getURLLocation(request)
                  + "/appadmin/scanTaskAdmin.jsp\">Return to scanTask administration page.</a></p>\n");
          out.println(ServletUtilities.getFooter(context));
        }
      } else if ((action.equals("addTask")) && (request.getParameter("encounterNumber") != null)) {

        myShepherd.getPM().setIgnoreCache(true);

        boolean locked = false;
        // String readableName="";
        boolean successfulStore = false;

        // set up our properties
        java.util.Properties props2 = new java.util.Properties();
        String secondRun = "true";
        String rightScan = "false";
        boolean isRightScan = false;
        boolean writeThis = true;
        // String uniqueNum="";
        if (request.getParameter("writeThis") == null) {
          writeThis = false;
        }
        if ((request.getParameter("rightSide") != null)
            && (request.getParameter("rightSide").equals("true"))) {
          rightScan = "true";
          isRightScan = true;
        }
        props2.setProperty("epsilon", "0.01");
        props2.setProperty("R", "8");
        props2.setProperty("Sizelim", "0.85");
        props2.setProperty("maxTriangleRotation", "10");
        props2.setProperty("C", "0.99");
        props2.setProperty("secondRun", secondRun);
        props2.setProperty("rightScan", rightScan);

        // let's check if a scanTask for this exists
        System.out.println("scanTaskHandler: Checking whether this is a new scanTask...");

        myShepherd.beginDBTransaction();

        String sideIdentifier = "L";

        if (rightScan.equals("true")) {
          sideIdentifier = "R";
          // numComparisons=myShepherd.getNumEncountersWithSpotData(true);
        } else {
          // numComparisons=myShepherd.getNumEncountersWithSpotData(false);
        }
        String taskIdentifier = "scan" + sideIdentifier + request.getParameter("encounterNumber");
        ScanTask st = new ScanTask();

        // let's do a check to see if too many scanTasks are in the queue
        int taskLimit = gm.getScanTaskLimit();
        int currentNumScanTasks = myShepherd.getNumUnfinishedScanTasks();
        myShepherd.getPM().getFetchPlan().setGroup(FetchPlan.DEFAULT);
        System.out.println("currentNumScanTasks is: " + currentNumScanTasks);
        // int currentNumScanTasks=0;
        if (currentNumScanTasks < taskLimit) {

          int numComparisons = 0;
          if (rightScan.equals("true")) {
            // sideIdentifier="R";
            numComparisons = myShepherd.getNumEncountersWithSpotData(true);
          } else {
            numComparisons = myShepherd.getNumEncountersWithSpotData(false);
          }
          myShepherd.getPM().getFetchPlan().setGroup(FetchPlan.DEFAULT);

          System.out.println(
              "scanTaskHandler: Under the limit, so proceeding to check for condiions for creating a new scanTask...");
          if ((!myShepherd.isScanTask(taskIdentifier))) {
            System.out.println("scanTaskHandler: This scanTask does not exist, so go create it...");

            // check if this encounter has the needed spots to create the task
            boolean hasNeededSpots = false;
            Encounter enc = myShepherd.getEncounter(request.getParameter("encounterNumber"));
            if ((rightScan.equals("true")) && (enc.getRightSpots() != null)) {
              hasNeededSpots = true;
            } else if (enc.getSpots() != null) {
              hasNeededSpots = true;
            }

            if (hasNeededSpots) {

              System.out.println("scanTaskHandler: I have needed spots...proceeding...");

              st =
                  new ScanTask(
                      myShepherd,
                      taskIdentifier,
                      props2,
                      request.getParameter("encounterNumber"),
                      writeThis);
              st.setNumComparisons(numComparisons - 1);
              if (request.getRemoteUser() != null) {
                st.setSubmitter(request.getRemoteUser());
              }
              System.out.println("scanTaskHandler: About to create a scanTask...");
              successfulStore = myShepherd.storeNewTask(st);
              if (!successfulStore) {

                System.out.println("scanTaskHandler: Unsuccessful store...");

                myShepherd.rollbackDBTransaction();
                myShepherd.closeDBTransaction();
                locked = true;
              } else {
                System.out.println("scanTaskHandler: Successful store...");

                myShepherd.commitDBTransaction();
                myShepherd.closeDBTransaction();
                myShepherd = new Shepherd(context);
              }
            } else {
              myShepherd.rollbackDBTransaction();
              myShepherd.closeDBTransaction();
              locked = true;
            }

          } else if (myShepherd.isScanTask(taskIdentifier)) {

            System.out.println("scanTaskHandler: This is an existing scanTask...");

            myShepherd.rollbackDBTransaction();
            myShepherd.closeDBTransaction();
            locked = true;

            String rightFilter = "";
            if ((request.getParameter("rightSide") != null)
                && (request.getParameter("rightSide").equals("true"))) {
              rightFilter = "&rightSide=true";
            }

            // if it exists already, advance to the scanTask administration page to await its
            // completion
            response.sendRedirect(
                "http://"
                    + CommonConfiguration.getURLLocation(request)
                    + "/appadmin/scanTaskAdmin.jsp");
          } else {
            myShepherd.rollbackDBTransaction();
            myShepherd.closeDBTransaction();
            locked = true;
          }
        }

        if (!locked && successfulStore) {

          try {

            ThreadPoolExecutor es = SharkGridThreadExecutorService.getExecutorService();
            es.execute(
                new ScanWorkItemCreationThread(
                    taskIdentifier,
                    isRightScan,
                    request.getParameter("encounterNumber"),
                    writeThis,
                    context));

          } catch (Exception e) {
            System.out.println("I failed while constructing the workItems for a new scanTask.");
            e.printStackTrace();
            myShepherd.rollbackDBTransaction();
            myShepherd.closeDBTransaction();
            locked = true;
          }
          if (!locked) {
            System.out.println("Trying to commit the add of the scanWorkItems");

            // myShepherd.commitDBTransaction();
            // myShepherd.closeDBTransaction();
            System.out.println("I committed the workItems!");

            String rightFilter = "L";
            String rightURL = "";
            if ((request.getParameter("rightSide") != null)
                && (request.getParameter("rightSide").equals("true"))) {
              rightFilter = "R";
              rightURL = "&rightSide=true";
            }

            // confirm success
            out.println(ServletUtilities.getHeader(request));
            out.println(
                "<strong>Success:</strong> Your scan was successfully added to the sharkGrid!");
            // out.println("<p><a
            // href=\"http://"+CommonConfiguration.getURLLocation()+"/encounters/workAppletScan.jsp?number=scan"+rightFilter+request.getParameter("encounterNumber")+rightURL+"\">Start scanning for a match.</a></p>\n");
            out.println(
                "<p><a href=\"http://"
                    + CommonConfiguration.getURLLocation(request)
                    + "/encounters/encounter.jsp?number="
                    + request.getParameter("encounterNumber")
                    + "\">Return to encounter "
                    + request.getParameter("encounterNumber")
                    + ".</a></p>\n");
            out.println(
                "<p><a href=\"http://"
                    + CommonConfiguration.getURLLocation(request)
                    + "/appadmin/scanTaskAdmin.jsp"
                    + "\">Go to sharkGrid administration to monitor for completion.</a></p>\n");
            out.println(ServletUtilities.getFooter(context));
          } else {
            out.println(ServletUtilities.getHeader(request));
            out.println(
                "<strong>Failure:</strong> The scan could not be created or was not fully created!");
            out.println(
                "<p><a href=\"http://"
                    + CommonConfiguration.getURLLocation(request)
                    + "/appadmin/scanTaskAdmin.jsp\">Go to sharkGrid administration.</a></p>\n");
            out.println(ServletUtilities.getFooter(context));
          }
        } else {
          out.println(ServletUtilities.getHeader(request));
          out.println("<strong>Failure:</strong> I have NOT added this scanTask to the queue.");
          if (currentNumScanTasks < taskLimit) {
            out.println(
                "The unfinished task limit of "
                    + taskLimit
                    + " has been filled. Please try adding the task to the queue again after existing tasks have finished.");
          }
          out.println(
              "<p><a href=\"http://"
                  + CommonConfiguration.getURLLocation(request)
                  + "/appadmin/scanTaskAdmin.jsp\">Go to sharkGrid administration.</a></p>\n");
          out.println(ServletUtilities.getFooter(context));
        }
      } else if (action.equals("addTuningTask")) {

        // myShepherd.getPM().setIgnoreCache(true);

        boolean locked = false;
        // String readableName="";
        boolean successfulStore = false;

        int maxNumWorkItems = 99999999;
        if ((request.getParameter("maxNumWorkItems") != null)
            && (!request.getParameter("maxNumWorkItems").equals(""))) {
          maxNumWorkItems = Integer.parseInt(request.getParameter("maxNumWorkItems"));
        }

        // set up our properties
        java.util.Properties props2 = new java.util.Properties();
        String secondRun = "true";
        String rightScan = "false";
        boolean isRightScan = false;
        boolean writeThis = true;
        // String uniqueNum="";
        if (request.getParameter("writeThis") == null) {
          writeThis = false;
        }
        if ((request.getParameter("rightSide") != null)
            && (request.getParameter("rightSide").equals("true"))) {
          rightScan = "true";
          isRightScan = true;
        }
        props2.setProperty("epsilon", "0.01");
        props2.setProperty("R", "8");
        props2.setProperty("Sizelim", "0.85");
        props2.setProperty("maxTriangleRotation", "10");
        props2.setProperty("C", "0.99");
        props2.setProperty("secondRun", secondRun);
        props2.setProperty("rightScan", rightScan);

        // let's check if a scanTask for this exists
        System.out.println("scanTaskHandler: Checking whether this is a new scanTask...");

        myShepherd.beginDBTransaction();

        String sideIdentifier = "L";

        if (rightScan.equals("true")) {
          sideIdentifier = "R";
          // numComparisons=myShepherd.getNumEncountersWithSpotData(true);
        } else {
          // numComparisons=myShepherd.getNumEncountersWithSpotData(false);
        }
        String taskIdentifier = "TuningTask";
        ScanTask st = new ScanTask();

        // let's do a check to see if too many scanTasks are in the queue
        int taskLimit = gm.getScanTaskLimit();
        int currentNumScanTasks = myShepherd.getNumUnfinishedScanTasks();
        myShepherd.getPM().getFetchPlan().setGroup(FetchPlan.DEFAULT);
        System.out.println("currentNumScanTasks is: " + currentNumScanTasks);
        // int currentNumScanTasks=0;
        if (currentNumScanTasks < taskLimit) {

          Vector leftSharks = myShepherd.getPossibleTrainingIndividuals();
          Vector rightSharks = myShepherd.getRightPossibleTrainingIndividuals();

          int numComparisons = 0;

          // calculate the number of comparisons that can be made
          int numLeftSharks = leftSharks.size();
          for (int i = 0; i < numLeftSharks; i++) {
            MarkedIndividual s = (MarkedIndividual) leftSharks.get(i);
            int numTrainable = s.getNumberTrainableEncounters();
            // int numCompareEncounters=s.getNumberTrainableEncounters();
            // for(int j=(numCompareEncounters-1);j>1;j--){
            //  numCompareEncounters=numCompareEncounters*j;
            // }
            // numCompareEncounters=numCompareEncounters/(2*(numTrainable-2));
            // numComparisons=numComparisons+numCompareEncounters;
            numComparisons = numComparisons + combinations(numTrainable, 2);
          }
          int numRightSharks = rightSharks.size();
          for (int i = 0; i < numRightSharks; i++) {
            MarkedIndividual s = (MarkedIndividual) rightSharks.get(i);
            int numCompareEncounters = s.getNumberRightTrainableEncounters();
            // for(int j=(numCompareEncounters-1);j>1;j--){
            // numCompareEncounters=numCompareEncounters*j;
            // }
            // numComparisons=numComparisons+numCompareEncounters;
            numComparisons = numComparisons + combinations(numCompareEncounters, 2);
          }

          System.out.println(
              "scanTaskHandler: Under the limit, so proceeding to check for condiions for creating a new scanTask...");
          if ((!myShepherd.isScanTask(taskIdentifier))) {
            // System.out.println("scanTaskHandler: This scanTask does not exist, so go create
            // it...");

            st = new ScanTask(myShepherd, taskIdentifier, props2, "TuningTask", writeThis);

            if (numComparisons < (2 * maxNumWorkItems)) {
              st.setNumComparisons(numComparisons);
            } else {
              st.setNumComparisons((2 * maxNumWorkItems));
            }

            if (request.getRemoteUser() != null) {
              st.setSubmitter(request.getRemoteUser());
            }
            System.out.println("scanTaskHandler: About to create a TuningTask...");
            successfulStore = myShepherd.storeNewTask(st);
            if (!successfulStore) {

              System.out.println("scanTaskHandler: Unsuccessful TuningTask store...");

              myShepherd.rollbackDBTransaction();
              myShepherd.closeDBTransaction();
              locked = true;
            } else {
              System.out.println("scanTaskHandler: Successful TuningTask store...");

              myShepherd.commitDBTransaction();
              myShepherd.closeDBTransaction();
              myShepherd = new Shepherd(context);
            }

          } else if (myShepherd.isScanTask(taskIdentifier)) {

            System.out.println("scanTaskHandler: This is an existing scanTask...");

            myShepherd.rollbackDBTransaction();
            myShepherd.closeDBTransaction();
            locked = true;

            String rightFilter = "";
            if ((request.getParameter("rightSide") != null)
                && (request.getParameter("rightSide").equals("true"))) {
              rightFilter = "&rightSide=true";
            }

            // if it exists already, advance to the scan page to assist it
            response.sendRedirect(
                "http://"
                    + CommonConfiguration.getURLLocation(request)
                    + "/encounters/workAppletScan.jsp?writeThis=true&number="
                    + taskIdentifier
                    + rightFilter);
          } else {
            myShepherd.rollbackDBTransaction();
            myShepherd.closeDBTransaction();
            locked = true;
          }
        }

        if (!locked && successfulStore) {

          try {

            ThreadPoolExecutor es = SharkGridThreadExecutorService.getExecutorService();
            es.execute(
                new TuningTaskCreationThread(taskIdentifier, writeThis, maxNumWorkItems, context));

          } catch (Exception e) {
            System.out.println("I failed while constructing the workItems for a new scanTask.");
            e.printStackTrace();
            myShepherd.rollbackDBTransaction();
            myShepherd.closeDBTransaction();
            locked = true;
          }
          if (!locked) {
            System.out.println("Trying to commit the add of the scanWorkItems");

            // myShepherd.commitDBTransaction();
            // myShepherd.closeDBTransaction();
            System.out.println("I committed the workItems!");

            String rightFilter = "L";
            String rightURL = "";
            if ((request.getParameter("rightSide") != null)
                && (request.getParameter("rightSide").equals("true"))) {
              rightFilter = "R";
              rightURL = "&rightSide=true";
            }

            // confirm success
            out.println(ServletUtilities.getHeader(request));
            out.println(
                "<strong>Success:</strong> Your scan was successfully added to the sharkGrid!");
            out.println(
                "<p><a href=\"http://"
                    + CommonConfiguration.getURLLocation(request)
                    + "/appadmin/scanTaskAdmin.jsp"
                    + "\">Return to sharkGrid administration.</a></p>\n");
            out.println(ServletUtilities.getFooter(context));
          } else {
            out.println(ServletUtilities.getHeader(request));
            out.println(
                "<strong>Failure:</strong> The scan could not be created or was not fully created!");
            out.println(
                "<p><a href=\"http://"
                    + CommonConfiguration.getURLLocation(request)
                    + "/appadmin/scanTaskAdmin.jsp\">Go to sharkGrid administration.</a></p>\n");
            out.println(ServletUtilities.getFooter(context));
          }
        } else {
          out.println(ServletUtilities.getHeader(request));
          out.println("<strong>Failure:</strong> I have NOT added this scanTask to the queue.");
          if (currentNumScanTasks < taskLimit) {
            out.println(
                "The unfinished task limit of "
                    + taskLimit
                    + " has been filled. Please try adding the task to the queue again after existing tasks have finished.");
          }
          out.println(
              "<p><a href=\"http://"
                  + CommonConfiguration.getURLLocation(request)
                  + "/appadmin/scanTaskAdmin.jsp\">Go to sharkGrid administration.</a></p>\n");
          out.println(ServletUtilities.getFooter(context));
        }
      } else if (action.equals("addFalseMatchTask")) {

        boolean locked = false;
        boolean successfulStore = false;

        int maxNumWorkItems = 99999999;
        if ((request.getParameter("maxNumWorkItems") != null)
            && (!request.getParameter("maxNumWorkItems").equals(""))) {
          maxNumWorkItems = Integer.parseInt(request.getParameter("maxNumWorkItems"));
        }

        // set up our properties
        java.util.Properties props2 = new java.util.Properties();
        String secondRun = "true";
        String rightScan = "false";
        boolean isRightScan = false;
        boolean writeThis = true;
        if (request.getParameter("writeThis") == null) {
          writeThis = false;
        }
        if ((request.getParameter("rightSide") != null)
            && (request.getParameter("rightSide").equals("true"))) {
          rightScan = "true";
          isRightScan = true;
        }
        props2.setProperty("epsilon", "0.01");
        props2.setProperty("R", "8");
        props2.setProperty("Sizelim", "0.85");
        props2.setProperty("maxTriangleRotation", "10");
        props2.setProperty("C", "0.99");
        props2.setProperty("secondRun", secondRun);
        props2.setProperty("rightScan", rightScan);

        // let's check if a scanTask for this exists
        System.out.println(
            "scanTaskHandler: Checking whether this is a new False Match scanTask...");

        myShepherd.beginDBTransaction();

        String sideIdentifier = "L";

        if (rightScan.equals("true")) {
          sideIdentifier = "R";
        }

        String taskIdentifier = "FalseMatchTask";
        ScanTask st = new ScanTask();

        // let's do a check to see if too many scanTasks are in the queue
        int taskLimit = gm.getScanTaskLimit();
        int currentNumScanTasks = myShepherd.getNumUnfinishedScanTasks();
        myShepherd.getPM().getFetchPlan().setGroup(FetchPlan.DEFAULT);
        System.out.println("currentNumScanTasks is: " + currentNumScanTasks);
        // int currentNumScanTasks=0;
        if (currentNumScanTasks < taskLimit) {

          // Vector leftSharks=myShepherd.getPossibleTrainingSharks();
          // Vector rightSharks=myShepherd.getRightPossibleTrainingSharks();

          int numComparisons = maxNumWorkItems * 2;

          System.out.println(
              "scanTaskHandler: Under the limit, so proceeding to check for condiions for creating a new scanTask...");
          if ((!myShepherd.isScanTask(taskIdentifier))) {
            // System.out.println("scanTaskHandler: This scanTask does not exist, so go create
            // it...");

            st = new ScanTask(myShepherd, taskIdentifier, props2, "FalseMatchTask", writeThis);
            st.setNumComparisons(numComparisons);
            if (request.getRemoteUser() != null) {
              st.setSubmitter(request.getRemoteUser());
            }
            System.out.println("scanTaskHandler: About to create a TuningTask...");
            successfulStore = myShepherd.storeNewTask(st);
            if (!successfulStore) {

              System.out.println("scanTaskHandler: Unsuccessful FalseMatchTask store...");

              myShepherd.rollbackDBTransaction();
              myShepherd.closeDBTransaction();
              locked = true;
            } else {
              System.out.println("scanTaskHandler: Successful FalseMatchTask store...");

              myShepherd.commitDBTransaction();
              myShepherd.closeDBTransaction();
              myShepherd = new Shepherd(context);
            }

          } else if (myShepherd.isScanTask(taskIdentifier)) {

            System.out.println("scanTaskHandler: This is an existing scanTask...");

            myShepherd.rollbackDBTransaction();
            myShepherd.closeDBTransaction();
            locked = true;

            String rightFilter = "";
            if ((request.getParameter("rightSide") != null)
                && (request.getParameter("rightSide").equals("true"))) {
              rightFilter = "&rightSide=true";
            }

            // if it exists already, advance to the scan page to assist it
            response.sendRedirect(
                "http://"
                    + CommonConfiguration.getURLLocation(request)
                    + "/encounters/workAppletScan.jsp?writeThis=true&number="
                    + taskIdentifier
                    + rightFilter);
          } else {
            myShepherd.rollbackDBTransaction();
            myShepherd.closeDBTransaction();
            locked = true;
          }
        }

        if (!locked && successfulStore) {

          try {

            ThreadPoolExecutor es = SharkGridThreadExecutorService.getExecutorService();
            es.execute(new FalseMatchCreationThread(maxNumWorkItems, taskIdentifier, context));

          } catch (Exception e) {
            System.out.println("I failed while constructing the workItems for a new scanTask.");
            e.printStackTrace();
            myShepherd.rollbackDBTransaction();
            myShepherd.closeDBTransaction();
            locked = true;
          }
          if (!locked) {
            System.out.println("Trying to commit the add of the scanWorkItems");

            // myShepherd.commitDBTransaction();
            // myShepherd.closeDBTransaction();
            System.out.println("I committed the workItems!");

            String rightFilter = "L";
            String rightURL = "";
            if ((request.getParameter("rightSide") != null)
                && (request.getParameter("rightSide").equals("true"))) {
              rightFilter = "R";
              rightURL = "&rightSide=true";
            }

            // confirm success
            out.println(ServletUtilities.getHeader(request));
            out.println(
                "<strong>Success:</strong> Your scan was successfully added to the sharkGrid!");
            out.println(
                "<p><a href=\"http://"
                    + CommonConfiguration.getURLLocation(request)
                    + "/appadmin/scanTaskAdmin.jsp"
                    + "\">Return to sharkGrid administration.</a></p>\n");
            out.println(ServletUtilities.getFooter(context));
          } else {
            out.println(ServletUtilities.getHeader(request));
            out.println(
                "<strong>Failure:</strong> The scan could not be created or was not fully created!");
            out.println(
                "<p><a href=\"http://"
                    + CommonConfiguration.getURLLocation(request)
                    + "/appadmin/scanTaskAdmin.jsp\">Go to sharkGrid administration.</a></p>\n");
            out.println(ServletUtilities.getFooter(context));
          }
        } else {
          out.println(ServletUtilities.getHeader(request));
          out.println("<strong>Failure:</strong> I have NOT added this scanTask to the queue.");
          if (currentNumScanTasks < taskLimit) {
            out.println(
                "The unfinished task limit of "
                    + taskLimit
                    + " has been filled. Please try adding the task to the queue again after existing tasks have finished.");
          }
          out.println(
              "<p><a href=\"http://"
                  + CommonConfiguration.getURLLocation(request)
                  + "/appadmin/scanTaskAdmin.jsp\">Go to sharkGrid administration.</a></p>\n");
          out.println(ServletUtilities.getFooter(context));
        }
      }

      // delete all scan-related items
      else if (action.equals("removeAllWorkItems")) {
        try {

          GridCleanupThread swiThread = new GridCleanupThread(context);
          gm.removeAllWorkItems();

          // confirm success
          out.println(ServletUtilities.getHeader(request));
          out.println(
              "<strong>Success:</strong> I removed all outstanding scanWorkItems from the database.<br>/<strong>Warning!</strong> <em>This may cause any outstanding scanTasks to fail!</em>");
          out.println(
              "<p><a href=\"http://"
                  + CommonConfiguration.getURLLocation(request)
                  + "/appadmin/scanTaskAdmin.jsp\">Go to sharkGrid administration.</a></p>\n");
          out.println(ServletUtilities.getFooter(context));
        } catch (Exception e) {
          e.printStackTrace();
          myShepherd.rollbackDBTransaction();
          out.println(ServletUtilities.getHeader(request));
          out.println(
              "<strong>Failure:</strong> I failed to remove all outstanding scanWorkItems from the database. Check the log for more information.");
          out.println(
              "<p><a href=\"http://"
                  + CommonConfiguration.getURLLocation(request)
                  + "/appadmin/scanTaskAdmin.jsp\">Go to sharkGrid administration.</a></p>\n");
          out.println(ServletUtilities.getFooter(context));
        }
      } else {

        out.println(ServletUtilities.getHeader(request));
        out.println(
            "<p>I did not receive enough data to process your command, or you do not have the necessary permissions to perform this operation.</p>");
        out.println(
            "<p><a href=\"http://"
                + CommonConfiguration.getURLLocation(request)
                + "/appadmin/scanTaskAdmin.jsp\">Go to sharkGrid administration.</a></p>\n");
        out.println(ServletUtilities.getFooter(context));
      }

    } else {
      out.println(ServletUtilities.getHeader(request));
      out.println(
          "<p>I did not receive enough data to process your command, or you do not have the necessary permissions to perform this operation. </p>");
      out.println("<p>Please try again or <a href=\"welcome.jsp\">login here</a>.");
      out.println(ServletUtilities.getFooter(context));
    }
    myShepherd.closeDBTransaction();
    myShepherd = null;
    out.flush();
    out.close();
  }