private String getQuestionnaireLabel(AnswerHeader answerHeader) {
    String label = null;
    List<QuestionnaireUsage> usages = answerHeader.getQuestionnaire().getQuestionnaireUsages();
    if (CollectionUtils.isNotEmpty(usages) && usages.size() > 1) {
      Collections.sort((List<QuestionnaireUsage>) usages);
    }
    for (QuestionnaireUsage usage : usages) {
      if (getCoeusModuleCode().equals(usage.getModuleItemCode())
          && answerHeader.getModuleSubItemCode().equals(usage.getModuleSubItemCode())) {
        if ("0".equals(answerHeader.getModuleSubItemCode())) {
          label = usage.getQuestionnaireLabel();
        } else if (CoeusSubModule.PROTOCOL_SUBMISSION.equals(answerHeader.getModuleSubItemCode())) {
          Map keyValues = new HashMap();
          keyValues.put("protocolNumber", answerHeader.getModuleItemKey());
          keyValues.put("submissionNumber", answerHeader.getModuleSubItemKey());

          List<ProtocolSubmissionBase> submissions =
              ((List<ProtocolSubmissionBase>)
                  getBusinessObjectService()
                      .findMatchingOrderBy(
                          getProtocolSubmissionBOClassHook(), keyValues, "submissionId", false));
          if (submissions.isEmpty()) {
            // this may happen if it is undo last action
            label = usage.getQuestionnaireLabel();
          } else {
            keyValues.clear();
            keyValues.put("protocolId", submissions.get(0).getProtocolId());
            keyValues.put("submissionNumber", answerHeader.getModuleSubItemKey());

            ProtocolActionBase protocolAction =
                ((List<ProtocolActionBase>)
                        getBusinessObjectService()
                            .findMatching(getProtocolActionBOClassHook(), keyValues))
                    .get(0);
            label =
                usage.getQuestionnaireLabel()
                    + " - "
                    + protocolAction.getProtocolActionType().getDescription()
                    + " - "
                    + protocolAction.getActionDateString();
          }
        } else if (CoeusSubModule.AMENDMENT_RENEWAL.equals(answerHeader.getModuleSubItemCode())) {
          if (answerHeader.getModuleItemKey().contains("A")) {
            label =
                usage.getQuestionnaireLabel()
                    + " - Amendment "
                    + answerHeader.getModuleItemKey().substring(10);
          } else {
            label =
                usage.getQuestionnaireLabel()
                    + " - Renewal "
                    + answerHeader.getModuleItemKey().substring(10);
          }
        } else if (CoeusSubModule.AMENDMENT.equals(answerHeader.getModuleSubItemCode())) {
          if (answerHeader.getModuleItemKey().contains("A")) {
            label =
                usage.getQuestionnaireLabel()
                    + " - Amendment "
                    + answerHeader.getModuleItemKey().substring(10);
          }
        } else if (CoeusSubModule.RENEWAL.equals(answerHeader.getModuleSubItemCode())) {
          if (answerHeader.getModuleItemKey().contains("R")) {
            label =
                usage.getQuestionnaireLabel()
                    + " - Renewal "
                    + answerHeader.getModuleItemKey().substring(10);
          }
        }
      }
    }
    return label;
  }