private ActionMessages processForm(
      User user, Server server, DynaActionForm f, HttpServletRequest request) {
    if (log.isDebugEnabled()) {
      log.debug("Processing form.");
    }

    // scheduleScriptRun takes a list of servers
    List servers = new ArrayList();
    servers.add(server);

    ActionMessages msgs = new ActionMessages();

    Boolean submitted = (Boolean) f.get("submitted");
    String runBefore = (String) f.get("run_script");
    String username = (String) f.get("username");
    String group = (String) f.get("group");
    Long timeout = (Long) f.get("timeout");
    String script = (String) f.get("script");
    String sessionSetLabel = (String) f.get("session_set_label");
    String mode = (String) f.get("mode");

    if (log.isDebugEnabled()) {
      log.debug("submitted [" + submitted + "]");
      log.debug("runBefore [" + runBefore + "]");
      log.debug("username [" + username + "]");
      log.debug("group [" + group + "]");
      log.debug("timeout [" + timeout + "]");
      log.debug("script [" + script + "]");
      log.debug("mode [" + mode + "]");
    }

    // The earliest time to perform the action.
    Date earliest = getStrutsDelegate().readDatePicker(f, "date", DatePicker.YEAR_RANGE_POSITIVE);

    if (BEFORE.equals(runBefore)) {
      ScriptActionDetails sad = ActionManager.createScript(username, group, timeout, script);
      ScriptRunAction sra = ActionManager.scheduleScriptRun(user, servers, "", sad, earliest);
      List<Map<String, Long>> packs = getPackages(user, request, sessionSetLabel);
      int numPackages = packs.size();
      PackageAction pa = schedulePackageAction(user, server, packs, mode, earliest);
      pa.setPrerequisite(sra);
      ActionManager.storeAction(pa);
      showMessages(msgs, pa, server, numPackages, mode);
      showRemoteCommandMsg(msgs, true, mode);
    } else {
      List<Map<String, Long>> packs = getPackages(user, request, sessionSetLabel);
      int numPackages = packs.size();
      PackageAction pa = schedulePackageAction(user, server, packs, mode, earliest);
      ScriptActionDetails sad = ActionManager.createScript(username, group, timeout, script);
      ScriptRunAction sra = ActionManager.scheduleScriptRun(user, servers, "", sad, earliest);
      sra.setPrerequisite(pa);
      ActionManager.storeAction(sra);
      showMessages(msgs, sra, server, numPackages, mode);
      showRemoteCommandMsg(msgs, false, mode);
    }
    SessionSetHelper.obliterate(request, sessionSetLabel);
    return msgs;
  }