/**
   * This method is for adding AwardSpecialReview to the list.
   *
   * @param mapping
   * @param form
   * @param request
   * @param response
   * @return ActionForward
   * @throws Exception
   */
  public ActionForward addSpecialReview(
      ActionMapping mapping,
      ActionForm form,
      HttpServletRequest request,
      HttpServletResponse response)
      throws Exception {
    InstitutionalProposalForm institutionalProposalForm = (InstitutionalProposalForm) form;
    InstitutionalProposalDocument document =
        institutionalProposalForm.getInstitutionalProposalDocument();
    InstitutionalProposalSpecialReview specialReview =
        institutionalProposalForm.getSpecialReviewHelper().getNewSpecialReview();
    List<InstitutionalProposalSpecialReview> specialReviews =
        document.getInstitutionalProposal().getSpecialReviews();
    boolean isProtocolLinkingEnabled = false;
    if (SpecialReviewType.HUMAN_SUBJECTS.equals(specialReview.getSpecialReviewTypeCode())) {
      isProtocolLinkingEnabled =
          institutionalProposalForm.getSpecialReviewHelper().getIsIrbProtocolLinkingEnabled();
    } else if (SpecialReviewType.ANIMAL_USAGE.equals(specialReview.getSpecialReviewTypeCode())) {
      isProtocolLinkingEnabled =
          institutionalProposalForm.getSpecialReviewHelper().getIsIacucProtocolLinkingEnabled();
    }

    institutionalProposalForm.getSpecialReviewHelper().prepareProtocolLinkViewFields(specialReview);

    ActionForward forward = mapping.findForward(Constants.MAPPING_AWARD_BASIC);
    if (applyRules(
        new AddSpecialReviewEvent<InstitutionalProposalSpecialReview>(
            document, specialReview, specialReviews, isProtocolLinkingEnabled))) {
      specialReview.setSpecialReviewNumber(
          document.getDocumentNextValue(Constants.SPECIAL_REVIEW_NUMBER));
      document.getInstitutionalProposal().getSpecialReviews().add(specialReview);
      institutionalProposalForm
          .getSpecialReviewHelper()
          .setNewSpecialReview(new InstitutionalProposalSpecialReview());
      if (specialReview.getSpecialReviewType() == null) {
        specialReview.refreshReferenceObject("specialReviewType");
      }
      if (StringUtils.equals(
          specialReview.getSpecialReviewType().getSpecialReviewTypeCode(),
          SpecialReviewType.HUMAN_SUBJECTS)) {
        InstitutionalProposalNotificationContext context =
            new InstitutionalProposalNotificationContext(
                document.getInstitutionalProposal(),
                "552",
                "Special Review Inserted",
                Constants.MAPPING_INSTITUTIONAL_PROPOSAL_SPECIAL_REVIEW_PAGE);
        if (institutionalProposalForm
            .getNotificationHelper()
            .getPromptUserForNotificationEditor(context)) {
          institutionalProposalForm.getNotificationHelper().initializeDefaultValues(context);
          forward = mapping.findForward("notificationEditor");
        } else {
          getNotificationService().sendNotification(context);
        }
      }
    }

    return forward;
  }
  private boolean isLinkedToSpecialReviews(
      List<? extends SpecialReview<?>> specialReviews, String protocolNumber) {
    boolean isLinkedToSpecialReviews = false;

    for (SpecialReview<?> specialReview : specialReviews) {
      if (SpecialReviewType.HUMAN_SUBJECTS.equals(specialReview.getSpecialReviewTypeCode())
          && StringUtils.equals(specialReview.getProtocolNumber(), protocolNumber)) {
        isLinkedToSpecialReviews = true;
        break;
      }
    }

    return isLinkedToSpecialReviews;
  }