/*
   * ############################
   * Form events
   * ############################
   */
  public void doSubmit(StaplerRequest req, StaplerResponse rsp)
      throws ServletException, IOException {
    checkPermission(PERMISSION);

    FormData formData = FormData.parse(req.getSubmittedForm());
    ParsedFormData parsedFormData = isValid(formData);
    if (parsedFormData.getStatus() == ParsedFormData.Status.OK) {
      BootstrapExecutor executor;
      executor = new BootstrapExecutor(parsedFormData);
      Log log = executor.execute();

      Flash flash = Flash.getForRequest(req);
      flash.put(FlashKeys.BOOTSTRAP_LOG, log);

      rsp.sendRedirect("/" + URL + "/" + BootstrapResultAction.URL);
    } else {
      req.setAttribute("error", true);
      formData.setFormDataAsAttributesOn(req);
      // leading and training slash as Jenkins otherwise issues an
      // HTTP status code 301 (moved permanently), which would then
      // result in the loss of the request attributes.
      req.getRequestDispatcher("/" + URL + "/").forward(req, rsp);
    }
  }