private SubmissionResults doSubmission(FormEntrySession session, HttpServletRequest request)
      throws Exception {
    SubmissionResults results = new SubmissionResults();
    session.prepareForSubmit();
    List<FormSubmissionError> validationErrors =
        session.getSubmissionController().validateSubmission(session.getContext(), request);
    if (validationErrors != null && validationErrors.size() > 0) {
      results.setValidationErrors(validationErrors);
      return results;
    }
    session.getSubmissionController().handleFormSubmission(session, request);

    if (session.getContext().getMode() == Mode.ENTER
        && session.hasEncouterTag()
        && (session.getSubmissionActions().getEncountersToCreate() == null
            || session.getSubmissionActions().getEncountersToCreate().size() == 0))
      throw new IllegalArgumentException("This form is not going to create an encounter");
    session.applyActions();
    results.setPatient(session.getPatient());
    results.setEncounterCreated(getLastEncounter(session.getPatient()));
    return results;
  }