@Override
 public List<ProtocolOnlineReviewDocumentBase> getProtocolReviewDocumentsForCurrentSubmission(
     ProtocolBase protocol) {
   List<ProtocolOnlineReviewDocumentBase> onlineReviewDocuments =
       new ArrayList<ProtocolOnlineReviewDocumentBase>();
   ProtocolSubmissionBase submission = protocol.getProtocolSubmission();
   List<ProtocolOnlineReviewBase> reviews =
       findProtocolOnlineReviews(protocol.getProtocolId(), submission.getSubmissionId());
   for (ProtocolOnlineReviewBase review : reviews) {
     if (review.isActive()) {
       review.refresh();
       try {
         onlineReviewDocuments.add(
             (ProtocolOnlineReviewDocumentBase)
                 (documentService.getByDocumentHeaderId(
                     review.getProtocolOnlineReviewDocument().getDocumentNumber())));
       } catch (WorkflowException e) {
         throw new RuntimeException(
             String.format(
                 "Could not load ProtocolOnlineReviewBase docuemnt %s due to WorkflowException: %s",
                 review.getProtocolOnlineReviewDocument().getDocumentNumber(), e.getMessage()),
             e);
       }
     }
   }
   return onlineReviewDocuments;
 }
 @Override
 public void cancelOnlineReviews(ProtocolSubmissionBase submission, String annotation) {
   // get the online reviews, loop through them and finalize them if necessary.
   for (ProtocolOnlineReviewBase review : submission.getProtocolOnlineReviews()) {
     cancelOnlineReviewDocument(review.getProtocolOnlineReviewDocument(), submission, annotation);
   }
 }
 @Override
 public void finalizeOnlineReviews(ProtocolSubmissionBase submission, String annotation) {
   // get the online reviews, loop through them and finalize them if necessary.
   for (ProtocolOnlineReviewBase review : submission.getProtocolOnlineReviews()) {
     //
     // review.addActionPerformed("Finalize:"+review.getProtocolOnlineReviewDocument().getDocumentHeader().getWorkflowDocument().getStatus().getCode()+":"+review.getProtocolOnlineReviewStatusCode());
     finalizeOnlineReviewDocument(
         review.getProtocolOnlineReviewDocument(), submission, annotation);
   }
 }
  @Override
  public ProtocolOnlineReviewDocumentBase getProtocolOnlineReviewDocument(
      String personId, boolean nonEmployeeFlag, ProtocolSubmissionBase protocolSubmission) {
    ProtocolOnlineReviewDocumentBase protocolOnlineReviewDocument = null;

    if (protocolSubmission != null) {
      for (ProtocolOnlineReviewBase protocolOnlineReview :
          protocolSubmission.getProtocolOnlineReviews()) {
        if (protocolOnlineReview
                .getProtocolReviewer()
                .isPersonIdProtocolReviewer(personId, nonEmployeeFlag)
            && protocolOnlineReview.isActive()) {
          try {
            protocolOnlineReviewDocument =
                (ProtocolOnlineReviewDocumentBase)
                    getDocumentService()
                        .getByDocumentHeaderId(
                            protocolOnlineReview
                                .getProtocolOnlineReviewDocument()
                                .getDocumentNumber());
          } catch (WorkflowException e) {
            if (LOG.isDebugEnabled()) {
              String errorMessage =
                  String.format(
                      "WorkflowException encountered while looking up document number %s for ProtocolOnlineReviewDocumentBase associated with (submissionId=%s,personId=%s,nonEmployeeFlag=%s",
                      protocolOnlineReview.getProtocolOnlineReviewDocument().getDocumentNumber(),
                      protocolSubmission.getSubmissionId(),
                      personId,
                      nonEmployeeFlag);

              LOG.error(errorMessage, e);
              throw new RuntimeException(errorMessage, e);
            }
          }
        }
      }
    }

    return protocolOnlineReviewDocument;
  }