public QuestionnaireActivityStructureBean questionnaireMetadata()

in study-datastore/src/main/java/com/hphc/mystudies/dao/ActivityMetaDataDao.java [615:861]


  public QuestionnaireActivityStructureBean questionnaireMetadata(
      String studyId, String activityId, Session session, String activityVersion)
      throws DAOException {
    LOGGER.entry("begin questionnaireMetadata()");
    QuestionnaireActivityStructureBean activityStructureBean =
        new QuestionnaireActivityStructureBean();
    Map<String, Integer> sequenceNoMap = new HashMap<>();
    Map<String, QuestionnairesStepsDto> questionnaireStepDetailsMap = new HashMap<>();
    TreeMap<Integer, QuestionnaireActivityStepsBean> stepsSequenceTreeMap = new TreeMap<>();
    QuestionnairesDto questionnaireDto = null;
    List<QuestionnairesStepsDto> questionaireStepsList = null;
    List<QuestionnaireActivityStepsBean> steps = new ArrayList<>();
    List<QuestionResponsetypeMasterInfoDto> questionResponseTypeMasterInfoList = null;
    try {
      questionnaireDto =
          (QuestionnairesDto)
              session
                  .createQuery(
                      "from QuestionnairesDto QDTO"
                          + " where QDTO.customStudyId= :customStudyId and QDTO.shortTitle= :shortTitle"
                          + " and QDTO.status=true and ROUND(QDTO.version, 1)= :version"
                          + " ORDER BY QDTO.modifiedDate DESC")
                  .setString(StudyMetaDataEnum.QF_CUSTOM_STUDY_ID.value(), studyId)
                  .setString(
                      StudyMetaDataEnum.QF_SHORT_TITLE.value(),
                      StudyMetaDataUtil.replaceSingleQuotes(activityId))
                  .setFloat(StudyMetaDataEnum.QF_VERSION.value(), Float.parseFloat(activityVersion))
                  .setMaxResults(1)
                  .uniqueResult();
      if (questionnaireDto != null) {
        activityStructureBean.setType(StudyMetaDataConstants.ACTIVITY_QUESTIONNAIRE);

        ActivityMetadataBean metadata = new ActivityMetadataBean();
        metadata.setActivityId(questionnaireDto.getShortTitle());

        ActivitiesBean activityBean = new ActivitiesBean();
        activityBean =
            this.getTimeDetailsByActivityIdForQuestionnaire(
                questionnaireDto, activityBean, session);

        metadata.setStartDate(activityBean.getStartTime());
        metadata.setEndDate(activityBean.getEndTime());
        metadata.setLastModified(
            StringUtils.isEmpty(questionnaireDto.getModifiedDate())
                ? ""
                : StudyMetaDataUtil.getFormattedDateTimeZone(
                    questionnaireDto.getModifiedDate(),
                    StudyMetaDataConstants.SDF_DATE_TIME_PATTERN,
                    StudyMetaDataConstants.SDF_DATE_TIME_TIMEZONE_MILLISECONDS_PATTERN));
        metadata.setName(
            StringUtils.isEmpty(questionnaireDto.getTitle()) ? "" : questionnaireDto.getTitle());
        metadata.setStudyId(studyId);
        metadata.setVersion(
            questionnaireDto.getVersion() == null
                ? StudyMetaDataConstants.STUDY_DEFAULT_VERSION
                : questionnaireDto.getVersion().toString());

        if (!questionnaireDto.getActive()) {
          metadata.setEndDate(
              StudyMetaDataUtil.getFormattedDateTimeZone(
                  questionnaireDto.getModifiedDate(),
                  StudyMetaDataConstants.SDF_DATE_TIME_PATTERN,
                  StudyMetaDataConstants.SDF_DATE_TIME_TIMEZONE_MILLISECONDS_PATTERN));
        }

        activityStructureBean.setMetadata(metadata);

        questionaireStepsList =
            session
                .createQuery(
                    "from QuestionnairesStepsDto QSDTO"
                        + " where QSDTO.questionnairesId=:questRespId"
                        + " and QSDTO.status=true"
                        + " ORDER BY QSDTO.sequenceNo")
                .setString("questRespId", questionnaireDto.getId())
                .list();
        if ((questionaireStepsList != null) && !questionaireStepsList.isEmpty()) {

          List<String> instructionIdList = new ArrayList<>();
          List<String> questionIdList = new ArrayList<>();
          List<String> formIdList = new ArrayList<>();

          for (int i = 0; i < questionaireStepsList.size(); i++) {
            if (!questionnaireDto.getBranching()) {
              if ((questionaireStepsList.size() - 1) == i) {
                questionaireStepsList.get(i).setDestinationStep(String.valueOf(0));
              } else {
                questionaireStepsList
                    .get(i)
                    .setDestinationStep(questionaireStepsList.get(i + 1).getStepId());
              }
            }
          }

          questionaireStepsList = this.getDestinationStepType(questionaireStepsList);
          for (QuestionnairesStepsDto questionnairesStep : questionaireStepsList) {

            switch (questionnairesStep.getStepType()) {
              case StudyMetaDataConstants.QUESTIONAIRE_STEP_TYPE_INSTRUCTION:
                instructionIdList.add(questionnairesStep.getInstructionFormId());
                sequenceNoMap.put(
                    String.valueOf(questionnairesStep.getInstructionFormId())
                        + StudyMetaDataConstants.QUESTIONAIRE_STEP_TYPE_INSTRUCTION,
                    questionnairesStep.getSequenceNo());
                questionnaireStepDetailsMap.put(
                    String.valueOf(questionnairesStep.getInstructionFormId())
                        + StudyMetaDataConstants.QUESTIONAIRE_STEP_TYPE_INSTRUCTION,
                    questionnairesStep);
                break;
              case StudyMetaDataConstants.QUESTIONAIRE_STEP_TYPE_QUESTION:
                questionIdList.add(questionnairesStep.getInstructionFormId());
                sequenceNoMap.put(
                    String.valueOf(questionnairesStep.getInstructionFormId())
                        + StudyMetaDataConstants.QUESTIONAIRE_STEP_TYPE_QUESTION,
                    questionnairesStep.getSequenceNo());
                questionnaireStepDetailsMap.put(
                    String.valueOf(questionnairesStep.getInstructionFormId())
                        + StudyMetaDataConstants.QUESTIONAIRE_STEP_TYPE_QUESTION,
                    questionnairesStep);
                break;
              case StudyMetaDataConstants.QUESTIONAIRE_STEP_TYPE_FORM:
                formIdList.add(questionnairesStep.getInstructionFormId());
                sequenceNoMap.put(
                    String.valueOf(questionnairesStep.getInstructionFormId())
                        + StudyMetaDataConstants.QUESTIONAIRE_STEP_TYPE_FORM,
                    questionnairesStep.getSequenceNo());
                questionnaireStepDetailsMap.put(
                    String.valueOf(questionnairesStep.getInstructionFormId())
                        + StudyMetaDataConstants.QUESTIONAIRE_STEP_TYPE_FORM,
                    questionnairesStep);
                break;
              default:
                break;
            }
          }

          questionResponseTypeMasterInfoList =
              session.createQuery("from QuestionResponsetypeMasterInfoDto").list();
          StudyDto studyDto =
              (StudyDto)
                  session
                      .getNamedQuery("getLiveStudyIdByCustomStudyId")
                      .setString(StudyMetaDataEnum.QF_CUSTOM_STUDY_ID.value(), studyId)
                      .uniqueResult();

          if (!instructionIdList.isEmpty()) {
            List<InstructionsDto> instructionsDtoList =
                session
                    .createQuery(
                        "from InstructionsDto IDTO"
                            + " where IDTO.id in (:instructionIdList) and IDTO.status=true")
                    .setParameterList("instructionIdList", instructionIdList)
                    .list();
            if ((instructionsDtoList != null) && !instructionsDtoList.isEmpty()) {

              stepsSequenceTreeMap =
                  (TreeMap<Integer, QuestionnaireActivityStepsBean>)
                      this.getStepsInfoForQuestionnaires(
                          StudyMetaDataConstants.QUESTIONAIRE_STEP_TYPE_INSTRUCTION,
                          instructionsDtoList,
                          null,
                          null,
                          sequenceNoMap,
                          stepsSequenceTreeMap,
                          session,
                          questionnaireStepDetailsMap,
                          null,
                          questionaireStepsList,
                          questionnaireDto,
                          studyDto);
            }
          }

          if (!questionIdList.isEmpty()) {
            List<QuestionsDto> questionsList =
                session
                    .createQuery(
                        " from QuestionsDto QDTO"
                            + " where QDTO.id in (:questionIdList"
                            + ") and QDTO.status=true")
                    .setParameterList("questionIdList", questionIdList)
                    .list();
            if ((questionsList != null) && !questionsList.isEmpty()) {
              stepsSequenceTreeMap =
                  (TreeMap<Integer, QuestionnaireActivityStepsBean>)
                      this.getStepsInfoForQuestionnaires(
                          StudyMetaDataConstants.QUESTIONAIRE_STEP_TYPE_QUESTION,
                          null,
                          questionsList,
                          null,
                          sequenceNoMap,
                          stepsSequenceTreeMap,
                          session,
                          questionnaireStepDetailsMap,
                          questionResponseTypeMasterInfoList,
                          questionaireStepsList,
                          questionnaireDto,
                          studyDto);
            }
          }

          if (!formIdList.isEmpty()) {
            for (String formId : formIdList) {
              List<FormMappingDto> formList =
                  session
                      .createQuery(
                          "from FormMappingDto FMDTO"
                              + " where FMDTO.formId in (select FDTO.formId"
                              + " from FormDto FDTO"
                              + " where FDTO.formId=:formId"
                              + ") and FMDTO.active=true"
                              + " ORDER BY FMDTO.sequenceNo ")
                      .setString("formId", formId)
                      .list();
              if ((formList != null) && !formList.isEmpty()) {
                stepsSequenceTreeMap =
                    (TreeMap<Integer, QuestionnaireActivityStepsBean>)
                        this.getStepsInfoForQuestionnaires(
                            StudyMetaDataConstants.QUESTIONAIRE_STEP_TYPE_FORM,
                            null,
                            null,
                            formList,
                            sequenceNoMap,
                            stepsSequenceTreeMap,
                            session,
                            questionnaireStepDetailsMap,
                            questionResponseTypeMasterInfoList,
                            questionaireStepsList,
                            questionnaireDto,
                            studyDto);
              }
            }
          }

          for (Integer key : stepsSequenceTreeMap.keySet()) {
            steps.add(stepsSequenceTreeMap.get(key));
          }

          activityStructureBean.setSteps(steps);
        }
      }
    } catch (Exception e) {
      LOGGER.error("ActivityMetaDataDao - questionnaireMetadata() :: ERROR", e);
    }
    LOGGER.exit("questionnaireMetadata() :: Ends");
    return activityStructureBean;
  }