public StudyDashboardResponse studyDashboardInfo()

in study-datastore/src/main/java/com/hphc/mystudies/dao/DashboardMetaDataDao.java [74:517]


  public StudyDashboardResponse studyDashboardInfo(String studyId) throws DAOException {
    LOGGER.entry("begin studyDashboardInfo()");
    Session session = null;
    StudyDashboardResponse studyDashboardResponse = new StudyDashboardResponse();
    DashboardBean dashboard = new DashboardBean();
    List<ChartsBean> chartsList = new ArrayList<>();
    List<StatisticsBean> statisticsList = new ArrayList<>();
    Map<String, Object> activityMap = new LinkedHashMap<>();
    Map<String, Object> questionnaireMap = new LinkedHashMap<>();
    List<String> activeTaskIdsList = new ArrayList<>();
    List<String> questionnaireIdsList = new ArrayList<>();
    List<ActiveTaskDto> activeTaskList = null;
    List<QuestionnairesDto> questionnaireList = null;
    List<ActiveTaskAttrtibutesValuesDto> activeTaskValuesList = null;
    List<QuestionnairesStepsDto> questionnaireStepsList = null;
    List<String> questionIdsList = new ArrayList<>();
    List<String> formIdsList = new ArrayList<>();
    List<ActiveTaskFormulaDto> formulaDtoList = null;
    List<StatisticImageListDto> statisticImageList = null;
    StudyDto studyDto = null;
    StudyVersionDto studyVersionDto = null;
    try {
      session = sessionFactory.openSession();
      studyDto =
          (StudyDto)
              session
                  .getNamedQuery("getLiveStudyIdByCustomStudyId")
                  .setString(StudyMetaDataEnum.QF_CUSTOM_STUDY_ID.value(), studyId)
                  .uniqueResult();
      if (studyDto != null) {
        studyVersionDto =
            (StudyVersionDto)
                session
                    .getNamedQuery("getLiveVersionDetailsByCustomStudyIdAndVersion")
                    .setString(
                        StudyMetaDataEnum.QF_CUSTOM_STUDY_ID.value(), studyDto.getCustomStudyId())
                    .setFloat(StudyMetaDataEnum.QF_STUDY_VERSION.value(), studyDto.getVersion())
                    .setMaxResults(1)
                    .uniqueResult();

        activeTaskList =
            session
                .getNamedQuery("getActiveTaskDetailsByCustomStudyId")
                .setString(
                    StudyMetaDataEnum.QF_CUSTOM_STUDY_ID.value(),
                    studyVersionDto.getCustomStudyId())
                .setInteger(StudyMetaDataEnum.QF_LIVE.value(), 1)
                .setInteger(StudyMetaDataEnum.QF_ACTIVE.value(), 0)
                .list();
        if ((activeTaskList != null) && !activeTaskList.isEmpty()) {
          for (ActiveTaskDto activeTask : activeTaskList) {
            boolean addToDashboardFlag = false;
            activeTask = this.getTimeDetailsByActivityIdForActiveTask(activeTask, session);
            if ((activeTask.getActive() != null) && (activeTask.getActive() == 1)) {
              addToDashboardFlag = true;
            } else {
              if (StringUtils.isNotEmpty(activeTask.getActiveTaskLifetimeStart())
                  && StudyMetaDataConstants.SDF_DATE
                      .parse(activeTask.getModifiedDate())
                      .after(
                          StudyMetaDataConstants.SDF_DATE.parse(
                              activeTask.getActiveTaskLifetimeStart()))) {
                addToDashboardFlag = true;
              }
            }

            if (addToDashboardFlag) {
              activityMap.put(
                  StudyMetaDataConstants.ACTIVITY_TYPE_ACTIVE_TASK + "-" + activeTask.getId(),
                  activeTask);
              activeTaskIdsList.add(activeTask.getId());
            }
          }
        }

        questionnaireList =
            session
                .getNamedQuery("getQuestionnaireDetailsByCustomStudyId")
                .setString(
                    StudyMetaDataEnum.QF_CUSTOM_STUDY_ID.value(),
                    studyVersionDto.getCustomStudyId())
                .setInteger(StudyMetaDataEnum.QF_LIVE.value(), 1)
                .setBoolean(StudyMetaDataEnum.QF_ACTIVE.value(), false)
                .list();
        if ((questionnaireList != null) && !questionnaireList.isEmpty()) {
          for (QuestionnairesDto questionnaire : questionnaireList) {
            boolean addToDashboardFlag = false;
            QuestionnairesDto questionnaireDto =
                this.getTimeDetailsByActivityIdForQuestionnaire(questionnaire, session);
            if (questionnaireDto.getActive()) {
              addToDashboardFlag = true;
            } else {
              if (questionnaire.getStudyLifetimeStart() == null) {
                if (StudyMetaDataConstants.SDF_DATE
                    .parse(questionnaireDto.getModifiedDate())
                    .after(
                        StudyMetaDataConstants.SDF_DATE.parse(
                            questionnaireDto.getStudyLifetimeStart()))) {
                  addToDashboardFlag = true;
                }
              }
            }

            if (addToDashboardFlag) {
              questionnaireMap.put(
                  StudyMetaDataConstants.ACTIVITY_TYPE_QUESTIONAIRE
                      + "-"
                      + questionnaireDto.getId(),
                  questionnaireDto);
              questionnaireIdsList.add(questionnaireDto.getId());
            }
          }

          if ((questionnaireIdsList != null) && !questionnaireIdsList.isEmpty()) {

            questionnaireStepsList =
                session
                    .createQuery(
                        "from QuestionnairesStepsDto QSDTO"
                            + " where QSDTO.questionnairesId in (:questionnaireIdsList)"
                            + " and QSDTO.stepType in (:QuesStepTypeQue,:QuesStepTypeForm)"
                            + " and QSDTO.status=true"
                            + " ORDER BY QSDTO.questionnairesId, QSDTO.sequenceNo")
                    .setParameterList("questionnaireIdsList", questionnaireIdsList)
                    .setString(
                        "QuesStepTypeQue", StudyMetaDataConstants.QUESTIONAIRE_STEP_TYPE_QUESTION)
                    .setString(
                        "QuesStepTypeForm", StudyMetaDataConstants.QUESTIONAIRE_STEP_TYPE_FORM)
                    .list();
            if ((questionnaireStepsList != null) && !questionnaireStepsList.isEmpty()) {
              for (QuestionnairesStepsDto questionnaireSteps : questionnaireStepsList) {

                if (questionnaireSteps
                    .getStepType()
                    .equalsIgnoreCase(StudyMetaDataConstants.QUESTIONAIRE_STEP_TYPE_QUESTION)) {
                  questionIdsList.add(questionnaireSteps.getInstructionFormId());
                }

                if (questionnaireSteps
                    .getStepType()
                    .equalsIgnoreCase(StudyMetaDataConstants.QUESTIONAIRE_STEP_TYPE_FORM)) {
                  formIdsList.add(questionnaireSteps.getInstructionFormId());
                }
                activityMap.put(
                    StudyMetaDataConstants.ACTIVITY_TYPE_QUESTIONAIRE
                        + "-"
                        + questionnaireSteps.getInstructionFormId()
                        + "-"
                        + questionnaireSteps.getStepType(),
                    questionnaireSteps);
              }
            }
          }
        }

        formulaDtoList = session.createQuery("from ActiveTaskFormulaDto ATCDTO").list();

        statisticImageList = session.createQuery(" from StatisticImageListDto STDTO").list();

        if ((activeTaskIdsList != null) && !activeTaskIdsList.isEmpty()) {
          activeTaskValuesList =
              session
                  .createQuery(
                      "from ActiveTaskAttrtibutesValuesDto ATAVDTO"
                          + " where ATAVDTO.addToLineChart=true or ATAVDTO.useForStatistic=true"
                          + " and ATAVDTO.activeTaskId in (:activeTaskIdsList)")
                  .setParameterList("activeTaskIdsList", activeTaskIdsList)
                  .list();
          if ((activeTaskValuesList != null) && !activeTaskValuesList.isEmpty()) {
            int taskTypeId = 0;
            Map<String, String> activeTaskMasterAttrIdsMap = new HashMap<>();
            Map<String, String> activeTaskMasterAttrIdNameMap = new HashMap<>();
            List<String> activeTaskMasterAttrIdList = new ArrayList<>();

            for (ActiveTaskAttrtibutesValuesDto activeTaskAttrDto : activeTaskValuesList) {
              activeTaskMasterAttrIdsMap.put(
                  activeTaskAttrDto.getActiveTaskMasterAttrId(),
                  activeTaskAttrDto.getActiveTaskMasterAttrId());
            }

            for (String activeTaskMasterAttrId : activeTaskMasterAttrIdsMap.keySet()) {
              activeTaskMasterAttrIdList.add(activeTaskMasterAttrId);
            }

            if (!activeTaskMasterAttrIdList.isEmpty()) {
              List<ActiveTaskMasterAttributeDto> activeTaskMasterAttributeList =
                  session
                      .createQuery(
                          "from ActiveTaskMasterAttributeDto ATMADTO"
                              + " where ATMADTO.masterId IN (:activeTaskMasterAttrIdList)")
                      .setParameterList("activeTaskMasterAttrIdList", activeTaskMasterAttrIdList)
                      .list();
              if ((null != activeTaskMasterAttributeList)
                  && !activeTaskMasterAttributeList.isEmpty()) {
                for (ActiveTaskMasterAttributeDto atmt : activeTaskMasterAttributeList) {
                  activeTaskMasterAttrIdNameMap.put(atmt.getMasterId(), atmt.getDisplayName());
                }
              }
            }

            for (ActiveTaskAttrtibutesValuesDto activeTaskAttrDto : activeTaskValuesList) {
              ActiveTaskDto activeTaskDto = null;
              taskTypeId = 0;
              activeTaskDto =
                  (ActiveTaskDto)
                      activityMap.get(
                          StudyMetaDataConstants.ACTIVITY_TYPE_ACTIVE_TASK
                              + "-"
                              + activeTaskAttrDto.getActiveTaskId());
              if (activeTaskDto != null) {
                if ((null != activeTaskDto.getTaskTypeId())
                    && ("3".equals(activeTaskDto.getTaskTypeId()))) {
                  taskTypeId = 3;
                }
                activeTaskAttrDto.setActivityType(StudyMetaDataConstants.DASHBOARD_ACTIVE_TASK);
                activeTaskAttrDto.setActivityStepKey(
                    StringUtils.isEmpty(activeTaskDto.getShortTitle())
                        ? ""
                        : activeTaskDto.getShortTitle());
                activeTaskAttrDto.setActivityVersion(
                    activeTaskDto.getVersion() == null
                        ? StudyMetaDataConstants.STUDY_DEFAULT_VERSION
                        : activeTaskDto.getVersion().toString());
                activeTaskAttrDto.setActivityId(activeTaskDto.getShortTitle());
                if (activeTaskAttrDto.isAddToLineChart()) {
                  chartsList =
                      this.getChartDetails(
                          StudyMetaDataConstants.ACTIVITY_TYPE_ACTIVE_TASK,
                          activeTaskAttrDto,
                          null,
                          chartsList,
                          activeTaskDto.getShortTitle(),
                          taskTypeId,
                          activeTaskMasterAttrIdNameMap);
                }

                if (activeTaskAttrDto.isUseForStatistic()) {
                  statisticsList =
                      this.getStatisticsDetails(
                          StudyMetaDataConstants.ACTIVITY_TYPE_ACTIVE_TASK,
                          activeTaskAttrDto,
                          null,
                          statisticsList,
                          formulaDtoList,
                          statisticImageList,
                          taskTypeId,
                          activeTaskMasterAttrIdNameMap);
                }
              }
            }
          }
        }

        if ((questionIdsList != null) && !questionIdsList.isEmpty()) {
          List<QuestionsDto> questionsList;
          questionsList =
              session
                  .createQuery(
                      " from QuestionsDto QDTO"
                          + " where QDTO.id in (:questionIdsList) and QDTO.status=true"
                          + " and QDTO.addLineChart=:addLineChart"
                          + " or QDTO.useStasticData=:useStasticData")
                  .setParameterList("questionIdsList", questionIdsList)
                  .setString("addLineChart", StudyMetaDataConstants.YES)
                  .setString("useStasticData", StudyMetaDataConstants.YES)
                  .list();
          for (QuestionsDto questionDto : questionsList) {
            QuestionnairesStepsDto questionnaireSteps =
                (QuestionnairesStepsDto)
                    activityMap.get(
                        StudyMetaDataConstants.ACTIVITY_TYPE_QUESTIONAIRE
                            + "-"
                            + questionDto.getId()
                            + "-"
                            + StudyMetaDataConstants.QUESTIONAIRE_STEP_TYPE_QUESTION);
            if (questionnaireSteps != null) {
              QuestionnairesDto questionnaireDto =
                  (QuestionnairesDto)
                      questionnaireMap.get(
                          StudyMetaDataConstants.ACTIVITY_TYPE_QUESTIONAIRE
                              + "-"
                              + questionnaireSteps.getQuestionnairesId());
              if (questionnaireDto != null) {
                questionDto.setActivityType(StudyMetaDataConstants.DASHBOARD_QUESTIONNAIRE);
                questionDto.setActivityStepKey(
                    StringUtils.isEmpty(questionnaireSteps.getStepShortTitle())
                        ? ""
                        : questionnaireSteps.getStepShortTitle());
                questionDto.setActivityVersion(
                    questionnaireDto.getVersion() == null
                        ? StudyMetaDataConstants.STUDY_DEFAULT_VERSION
                        : questionnaireDto.getVersion().toString());
                questionDto.setActivityId(questionnaireDto.getShortTitle());
                if (questionDto.getAddLineChart().equalsIgnoreCase(StudyMetaDataConstants.YES)) {
                  chartsList =
                      this.getChartDetails(
                          StudyMetaDataConstants.ACTIVITY_TYPE_QUESTIONAIRE,
                          null,
                          questionDto,
                          chartsList,
                          questionnaireSteps.getStepShortTitle(),
                          0,
                          null);
                }

                if (questionDto.getUseStasticData().equalsIgnoreCase(StudyMetaDataConstants.YES)) {
                  statisticsList =
                      this.getStatisticsDetails(
                          StudyMetaDataConstants.ACTIVITY_TYPE_QUESTIONAIRE,
                          null,
                          questionDto,
                          statisticsList,
                          formulaDtoList,
                          statisticImageList,
                          0,
                          null);
                }
              }
            }
          }
        }

        if ((formIdsList != null) && !formIdsList.isEmpty()) {
          List<FormDto> formDtoList = null;
          formDtoList =
              session
                  .createQuery("from FormDto FDTO where FDTO.formId in (:formIdsList)")
                  .setParameterList("formIdsList", formIdsList)
                  .list();
          if ((formDtoList != null) && !formDtoList.isEmpty()) {
            for (FormDto form : formDtoList) {
              List<String> formQuestionIdsList = new ArrayList<>();
              List<FormMappingDto> formMappingDtoList;
              formMappingDtoList =
                  session
                      .createQuery(
                          "from FormMappingDto FMDTO"
                              + " where FMDTO.formId=:formId"
                              + " order by FMDTO.sequenceNo")
                      .setString("formId", form.getFormId())
                      .list();
              if ((formMappingDtoList != null) && !formMappingDtoList.isEmpty()) {
                for (FormMappingDto formMappingDto : formMappingDtoList) {
                  formQuestionIdsList.add(formMappingDto.getQuestionId());
                }
              }

              if (!formQuestionIdsList.isEmpty()) {
                List<QuestionsDto> formQuestionDtoList = null;
                formQuestionDtoList =
                    session
                        .createQuery(
                            "from QuestionsDto FQDTO"
                                + " where FQDTO.id in (:formQuestionIdsList)"
                                + " and FQDTO.status=true"
                                + " and FQDTO.addLineChart=:addLineChart"
                                + " or FQDTO.useStasticData=:useStasticData")
                        .setParameterList("formQuestionIdsList", formQuestionIdsList)
                        .setString("addLineChart", StudyMetaDataConstants.YES)
                        .setString("useStasticData", StudyMetaDataConstants.YES)
                        .list();
                if ((formQuestionDtoList != null) && !formQuestionDtoList.isEmpty()) {
                  for (QuestionsDto questionDto : formQuestionDtoList) {
                    if (formQuestionIdsList.contains(questionDto.getId())) {
                      QuestionnairesStepsDto questionnaireSteps =
                          (QuestionnairesStepsDto)
                              activityMap.get(
                                  StudyMetaDataConstants.ACTIVITY_TYPE_QUESTIONAIRE
                                      + "-"
                                      + form.getFormId()
                                      + "-"
                                      + StudyMetaDataConstants.QUESTIONAIRE_STEP_TYPE_FORM);
                      if (questionnaireSteps != null) {
                        QuestionnairesDto questionnaireDto =
                            (QuestionnairesDto)
                                questionnaireMap.get(
                                    StudyMetaDataConstants.ACTIVITY_TYPE_QUESTIONAIRE
                                        + "-"
                                        + questionnaireSteps.getQuestionnairesId());
                        if (questionnaireDto != null) {
                          questionDto.setActivityType(
                              StudyMetaDataConstants.DASHBOARD_QUESTIONNAIRE);
                          questionDto.setActivityStepKey(
                              StringUtils.isEmpty(questionDto.getShortTitle())
                                  ? ""
                                  : questionDto.getShortTitle());
                          questionDto.setActivityVersion(
                              questionnaireDto.getVersion() == null
                                  ? StudyMetaDataConstants.STUDY_DEFAULT_VERSION
                                  : questionnaireDto.getVersion().toString());
                          questionDto.setActivityId(questionnaireDto.getShortTitle());
                          if (questionDto
                              .getAddLineChart()
                              .equalsIgnoreCase(StudyMetaDataConstants.YES)) {
                            chartsList =
                                this.getChartDetails(
                                    StudyMetaDataConstants.ACTIVITY_TYPE_QUESTIONAIRE,
                                    null,
                                    questionDto,
                                    chartsList,
                                    questionDto.getShortTitle(),
                                    0,
                                    null);
                          }

                          if (questionDto
                              .getUseStasticData()
                              .equalsIgnoreCase(StudyMetaDataConstants.YES)) {
                            statisticsList =
                                this.getStatisticsDetails(
                                    StudyMetaDataConstants.ACTIVITY_TYPE_QUESTIONAIRE,
                                    null,
                                    questionDto,
                                    statisticsList,
                                    formulaDtoList,
                                    statisticImageList,
                                    0,
                                    null);
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }

        dashboard.setCharts(chartsList);
        dashboard.setStatistics(statisticsList);
        studyDashboardResponse.setDashboard(dashboard);
        studyDashboardResponse.setMessage(StudyMetaDataConstants.SUCCESS);
      }
    } catch (Exception e) {
      LOGGER.error("DashboardMetaDataDao - studyDashboardInfo() :: ERROR", e);
    } finally {
      if (session != null) {
        session.close();
      }
    }
    LOGGER.exit("studyDashboardInfo() :: Ends");
    return studyDashboardResponse;
  }