protected void copyQuestionnaireLists(Questionnaire src, Questionnaire dest) {
   dest.setQuestionnaireQuestions(src.getQuestionnaireQuestions());
   dest.setQuestionnaireUsages(src.getQuestionnaireUsages());
   dest.setQuestionnaireSeqId(null);
   for (QuestionnaireQuestion question : dest.getQuestionnaireQuestions()) {
     question.setQuestionnaireId(null);
     question.setId(null);
     question.setVersionNumber(new Long(1));
   }
   for (QuestionnaireUsage usage : dest.getQuestionnaireUsages()) {
     usage.setQuestionnaireId(null);
     usage.setId(null);
     usage.setVersionNumber(new Long(1));
   }
 }
 @Override
 public boolean isUniqueUsage(Questionnaire questionnaire, QuestionnaireUsage usage) {
   Map<String, Object> fieldValues = new HashMap<String, Object>();
   fieldValues.put(MODULE_ITEM_CODE, usage.getCoeusModule().getModuleCode());
   fieldValues.put(MODULE_SUB_ITEM_CODE, usage.getCoeusSubModule().getSubModuleCode());
   List<QuestionnaireUsage> usages =
       (List<QuestionnaireUsage>)
           businessObjectService.findMatching(QuestionnaireUsage.class, fieldValues);
   for (QuestionnaireUsage curUsage : usages) {
     if (!StringUtils.equals(
             questionnaire.getQuestionnaireSeqId(),
             curUsage.getQuestionnaire().getQuestionnaireSeqId())
         && curUsage.getQuestionnaire().isActive()
         && isCurrentQuestionnaire(curUsage.getQuestionnaire())) {
       return false;
     }
   }
   return true;
 }
  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;
  }