public QuestionnairesStepsBo saveOrUpdateQuestionStep()

in study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/StudyQuestionnaireDAOImpl.java [4294:4716]


  public QuestionnairesStepsBo saveOrUpdateQuestionStep(
      QuestionnairesStepsBo questionnairesStepsBo,
      SessionObject sessionObject,
      String customStudyId) {
    logger.entry("begin saveOrUpdateQuestionStep()");
    Session session = null;
    QuestionnairesStepsBo addOrUpdateQuestionnairesStepsBo = null;
    boolean isChange = false;
    try {
      session = hibernateTemplate.getSessionFactory().openSession();
      transaction = session.beginTransaction();
      String studyId = this.getStudyIdByCustomStudy(session, customStudyId);

      if (questionnairesStepsBo != null) {
        if (StringUtils.isNotEmpty(questionnairesStepsBo.getStepId())) {
          addOrUpdateQuestionnairesStepsBo =
              (QuestionnairesStepsBo)
                  session.get(QuestionnairesStepsBo.class, questionnairesStepsBo.getStepId());
        } else {
          addOrUpdateQuestionnairesStepsBo = new QuestionnairesStepsBo();
          addOrUpdateQuestionnairesStepsBo.setActive(true);
          addOrUpdateQuestionnairesStepsBo.setDestinationStep(String.valueOf(0));
        }
        if ((questionnairesStepsBo.getStepShortTitle() != null)
            && !questionnairesStepsBo.getStepShortTitle().isEmpty()) {
          addOrUpdateQuestionnairesStepsBo.setStepShortTitle(
              questionnairesStepsBo.getStepShortTitle());
        }
        if ((questionnairesStepsBo.getSkiappable() != null)
            && !questionnairesStepsBo.getSkiappable().isEmpty()) {
          addOrUpdateQuestionnairesStepsBo.setSkiappable(questionnairesStepsBo.getSkiappable());
        }
        if ((questionnairesStepsBo.getRepeatable() != null)
            && !questionnairesStepsBo.getRepeatable().isEmpty()) {
          addOrUpdateQuestionnairesStepsBo.setRepeatable(questionnairesStepsBo.getRepeatable());
        }
        if ((questionnairesStepsBo.getRepeatableText() != null)
            && !questionnairesStepsBo.getRepeatableText().isEmpty()) {
          addOrUpdateQuestionnairesStepsBo.setRepeatableText(
              questionnairesStepsBo.getRepeatableText());
        }
        if (questionnairesStepsBo.getDestinationStep() != null) {
          addOrUpdateQuestionnairesStepsBo.setDestinationStep(
              questionnairesStepsBo.getDestinationStep());
        }
        if (questionnairesStepsBo.getQuestionnairesId() != null) {
          addOrUpdateQuestionnairesStepsBo.setQuestionnairesId(
              questionnairesStepsBo.getQuestionnairesId());
        }
        if (questionnairesStepsBo.getInstructionFormId() != null) {
          addOrUpdateQuestionnairesStepsBo.setInstructionFormId(
              questionnairesStepsBo.getInstructionFormId());
        }
        if (questionnairesStepsBo.getStepType() != null) {
          addOrUpdateQuestionnairesStepsBo.setStepType(questionnairesStepsBo.getStepType());
        }
        if (questionnairesStepsBo.getType() != null) {
          if (questionnairesStepsBo
              .getType()
              .equalsIgnoreCase(FdahpStudyDesignerConstants.ACTION_TYPE_SAVE)) {
            addOrUpdateQuestionnairesStepsBo.setStatus(false);

          } else if (questionnairesStepsBo
              .getType()
              .equalsIgnoreCase(FdahpStudyDesignerConstants.ACTION_TYPE_COMPLETE)) {
            addOrUpdateQuestionnairesStepsBo.setStatus(true);
          }
          query =
              session
                  .createSQLQuery(
                      "update questionnaires q set q.status=0 where q.id=:questionnairesId ")
                  .setString(
                      "questionnairesId", addOrUpdateQuestionnairesStepsBo.getQuestionnairesId());
          query.setHint("javax.persistence.lock.timeout", 15000).executeUpdate();
        }
        int count = 0;
        if (questionnairesStepsBo.getQuestionsBo() != null) {
          addOrUpdateQuestionnairesStepsBo.setQuestionnairesId(
              addOrUpdateQuestionnairesStepsBo.getQuestionnairesId());
          QuestionsBo questionsBo = questionnairesStepsBo.getQuestionsBo();
          // Ancrodate text start
          if ((questionnairesStepsBo.getQuestionsBo().getUseAnchorDate() != null)
              && questionnairesStepsBo.getQuestionsBo().getUseAnchorDate()) {
            if (StringUtils.isNotEmpty(
                questionnairesStepsBo.getQuestionsBo().getAnchorDateName())) {
              AnchorDateTypeBo anchorDateTypeBo = new AnchorDateTypeBo();
              anchorDateTypeBo.setId(questionnairesStepsBo.getQuestionsBo().getAnchorDateId());
              anchorDateTypeBo.setCustomStudyId(customStudyId);
              anchorDateTypeBo.setStudyId(studyId);
              anchorDateTypeBo.setName(questionnairesStepsBo.getQuestionsBo().getAnchorDateName());
              anchorDateTypeBo.setHasAnchortypeDraft(1);
              session.saveOrUpdate(anchorDateTypeBo);
              if (anchorDateTypeBo.getId() != null) {
                questionsBo.setAnchorDateId(anchorDateTypeBo.getId());
              }
            }
          } else {
            if ((questionnairesStepsBo.getIsShorTitleDuplicate() != null)
                && (questionnairesStepsBo.getIsShorTitleDuplicate() > 0)) {
              isChange = true;
            }
            if (StringUtils.isEmpty(customStudyId)) {
              customStudyId = questionsBo.getCustomStudyId();
            }
            if ((questionnairesStepsBo.getQuestionsBo().getAnchorDateId() != null)
                && (questionsBo != null)
                && (questionsBo.getId() != null)) {
              query =
                  session
                      .getNamedQuery("getStudyByCustomStudyId")
                      .setString("customStudyId", customStudyId);
              query.setMaxResults(1);
              StudyVersionBo studyVersionBo = (StudyVersionBo) query.uniqueResult();

              updateAnchordateInQuestionnaire(
                  session,
                  transaction,
                  studyVersionBo,
                  null,
                  sessionObject,
                  studyId,
                  null,
                  questionsBo.getId(),
                  "",
                  isChange,
                  questionsBo.getCustomStudyId());
            }

            questionsBo.setAnchorDateId(null);
          }
          // Anchordate Text end
          session.saveOrUpdate(questionsBo);
          addOrUpdateQuestionnairesStepsBo.setQuestionsBo(questionsBo);
          // adding or updating the response level attributes
          if ((questionsBo != null)
              && (questionsBo.getId() != null)
              && (questionnairesStepsBo.getQuestionReponseTypeBo() != null)) {

            QuestionReponseTypeBo questionResponseTypeBo =
                questionnairesStepsBo.getQuestionReponseTypeBo();
            if (StringUtils.isEmpty(questionResponseTypeBo.getQuestionsResponseTypeId())) {
              questionResponseTypeBo.setQuestionsResponseTypeId(questionsBo.getId());
            }
            questionResponseTypeBo =
                getQuestionsResponseTypeBo(
                    questionnairesStepsBo.getQuestionReponseTypeBo(), session, customStudyId);
            if (questionResponseTypeBo != null) {
              session.saveOrUpdate(questionResponseTypeBo);
            }
            addOrUpdateQuestionnairesStepsBo.setQuestionReponseTypeBo(questionResponseTypeBo);
            if ((questionnairesStepsBo.getQuestionResponseSubTypeList() != null)
                && !questionnairesStepsBo.getQuestionResponseSubTypeList().isEmpty()) {
              String deletQuesry =
                  "Delete From QuestionResponseSubTypeBo QRSTBO where QRSTBO.responseTypeId=:responseTypeId ";
              session
                  .createQuery(deletQuesry)
                  .setString("responseTypeId", questionsBo.getId())
                  .executeUpdate();
              // upload the images in response level
              if ((questionnairesStepsBo.getQuestionsBo().getResponseType() == 4)
                  || (questionnairesStepsBo.getQuestionsBo().getResponseType() == 3)
                  || (questionnairesStepsBo.getQuestionsBo().getResponseType() == 6)
                  || (questionnairesStepsBo.getQuestionsBo().getResponseType() == 5)) {
                int j = 0;
                for (QuestionResponseSubTypeBo questionResponseSubTypeBo :
                    questionnairesStepsBo.getQuestionResponseSubTypeList()) {
                  if (questionsBo.getResponseType() != 5) {
                    if (((questionResponseSubTypeBo.getText() != null)
                            && !questionResponseSubTypeBo.getText().isEmpty())
                        || ((questionResponseSubTypeBo.getValue() != null)
                            && !questionResponseSubTypeBo.getValue().isEmpty())
                        || ((questionResponseSubTypeBo.getDescription() != null)
                            && !questionResponseSubTypeBo.getDescription().isEmpty())
                        || ((questionResponseSubTypeBo.getExclusive() != null)
                            && !questionResponseSubTypeBo.getExclusive().isEmpty())) {
                      questionResponseSubTypeBo.setResponseTypeId(questionsBo.getId());
                      questionResponseSubTypeBo.setActive(true);
                      session.save(questionResponseSubTypeBo);
                    }

                  } else {
                    if (((questionResponseSubTypeBo.getText() != null)
                            && !questionResponseSubTypeBo.getText().isEmpty())
                        || ((questionResponseSubTypeBo.getValue() != null)
                            && !questionResponseSubTypeBo.getValue().isEmpty())
                        || questionResponseSubTypeBo.getImageFile() != null
                        || questionResponseSubTypeBo.getSelectImageFile() != null) {
                      String fileName;
                      if (questionResponseSubTypeBo.getImageFile() != null) {
                        if ((questionResponseSubTypeBo.getImage() != null)
                            && !questionResponseSubTypeBo.getImage().isEmpty()) {
                          questionResponseSubTypeBo.setImage(questionResponseSubTypeBo.getImage());
                        } else {
                          fileName =
                              FdahpStudyDesignerUtil.getStandardFileName(
                                  FdahpStudyDesignerConstants.QUESTION_STEP_IMAGE + j,
                                  questionResponseSubTypeBo.getImageFile().getOriginalFilename(),
                                  String.valueOf(questionnairesStepsBo.getQuestionsBo().getId()));
                          BufferedImage newBi =
                              ImageIO.read(
                                  new ByteArrayInputStream(
                                      questionResponseSubTypeBo.getImageFile().getBytes()));
                          int minWidthAndHeight = 0;

                          if (newBi.getHeight() > 120 && newBi.getWidth() > 120) {
                            minWidthAndHeight = 120;
                          } else {
                            minWidthAndHeight = Math.min(newBi.getHeight(), newBi.getWidth());
                          }
                          BufferedImage resizedImage =
                              ImageUtility.resizeImage(newBi, minWidthAndHeight, minWidthAndHeight);
                          String extension =
                              FilenameUtils.getExtension(
                                  questionResponseSubTypeBo.getImageFile().getOriginalFilename());

                          ByteArrayOutputStream baos = new ByteArrayOutputStream();
                          ImageIO.write(resizedImage, extension, baos);
                          baos.flush();

                          CustomMultipartFile customMultipartFile =
                              new CustomMultipartFile(
                                  baos.toByteArray(),
                                  questionResponseSubTypeBo.getImageFile().getOriginalFilename(),
                                  extension);

                          String imagePath =
                              FdahpStudyDesignerUtil.saveImage(
                                  customMultipartFile,
                                  fileName,
                                  FdahpStudyDesignerConstants.QUESTIONNAIRE,
                                  customStudyId);
                          questionResponseSubTypeBo.setImage(imagePath);
                        }
                      }
                      if (questionResponseSubTypeBo.getSelectImageFile() != null) {
                        if ((questionResponseSubTypeBo.getSelectedImage() != null)
                            && !questionResponseSubTypeBo.getSelectedImage().isEmpty()) {
                          questionResponseSubTypeBo.setSelectedImage(
                              questionResponseSubTypeBo.getSelectedImage());
                        } else {
                          fileName =
                              FdahpStudyDesignerUtil.getStandardFileName(
                                  FdahpStudyDesignerConstants.QUESTION_STEP_SELECTEDIMAGE + j,
                                  questionResponseSubTypeBo
                                      .getSelectImageFile()
                                      .getOriginalFilename(),
                                  String.valueOf(questionnairesStepsBo.getQuestionsBo().getId()));

                          BufferedImage newBi =
                              ImageIO.read(
                                  new ByteArrayInputStream(
                                      questionResponseSubTypeBo.getSelectImageFile().getBytes()));
                          int minWidthAndHeight = 0;

                          if (newBi.getHeight() > 120 && newBi.getWidth() > 120) {
                            minWidthAndHeight = 120;
                          } else {
                            minWidthAndHeight = Math.min(newBi.getHeight(), newBi.getWidth());
                          }
                          BufferedImage resizedImage =
                              ImageUtility.resizeImage(newBi, minWidthAndHeight, minWidthAndHeight);
                          String extension =
                              FilenameUtils.getExtension(
                                  questionResponseSubTypeBo
                                      .getSelectImageFile()
                                      .getOriginalFilename());

                          ByteArrayOutputStream baos = new ByteArrayOutputStream();
                          ImageIO.write(resizedImage, extension, baos);
                          baos.flush();

                          CustomMultipartFile customMultipartFile =
                              new CustomMultipartFile(
                                  baos.toByteArray(),
                                  questionResponseSubTypeBo
                                      .getSelectImageFile()
                                      .getOriginalFilename(),
                                  extension);

                          String imagePath =
                              FdahpStudyDesignerUtil.saveImage(
                                  customMultipartFile,
                                  fileName,
                                  FdahpStudyDesignerConstants.QUESTIONNAIRE,
                                  customStudyId);
                          questionResponseSubTypeBo.setSelectedImage(imagePath);
                        }
                      }
                      questionResponseSubTypeBo.setResponseTypeId(questionsBo.getId());
                      questionResponseSubTypeBo.setActive(true);
                      session.save(questionResponseSubTypeBo);
                    }
                  }
                  j = j + 1;
                }
              } else {
                for (QuestionResponseSubTypeBo questionResponseSubTypeBo :
                    questionnairesStepsBo.getQuestionResponseSubTypeList()) {
                  questionResponseSubTypeBo.setResponseTypeId(questionsBo.getId());
                  questionResponseSubTypeBo.setActive(true);
                  session.save(questionResponseSubTypeBo);
                }
              }
            } else {
              String deletQuesry =
                  "Delete From response_sub_type_value  where response_type_id=:questionId ";
              session
                  .createSQLQuery(deletQuesry)
                  .setString("questionId", questionsBo.getId())
                  .executeUpdate();
            }
            // condition branching adding for the response type that
            // results in the data type 'double' and checked as
            // formula based branching is yes
            if ((questionResponseTypeBo != null)
                && questionResponseTypeBo
                    .getFormulaBasedLogic()
                    .equalsIgnoreCase(FdahpStudyDesignerConstants.YES)) {
              if ((questionnairesStepsBo.getQuestionConditionBranchBoList() != null)
                  && !questionnairesStepsBo.getQuestionConditionBranchBoList().isEmpty()) {
                String deleteQuery =
                    "delete from question_condtion_branching where question_id=:questionId ";
                session
                    .createSQLQuery(deleteQuery)
                    .setString("questionId", questionsBo.getId())
                    .executeUpdate();
                for (QuestionConditionBranchBo questionConditionBranchBo :
                    questionnairesStepsBo.getQuestionConditionBranchBoList()) {
                  if (questionConditionBranchBo.getQuestionId() == null) {
                    questionConditionBranchBo.setQuestionId(questionsBo.getId());
                  }
                  if ((questionConditionBranchBo.getInputType() != null)
                      && questionConditionBranchBo.getInputType().equalsIgnoreCase("MF")) {
                    questionConditionBranchBo.setInputTypeValue(
                        questionConditionBranchBo
                            .getInputTypeValue()
                            .replace("&lt;", "<")
                            .replace("&gt;", ">"));
                    session.save(questionConditionBranchBo);
                  }
                  if ((questionConditionBranchBo.getQuestionConditionBranchBos() != null)
                      && !questionConditionBranchBo.getQuestionConditionBranchBos().isEmpty()) {
                    for (QuestionConditionBranchBo conditionBranchBo :
                        questionConditionBranchBo.getQuestionConditionBranchBos()) {
                      if ((conditionBranchBo.getInputType() != null)
                          && (conditionBranchBo.getInputTypeValue() != null)) {
                        if (conditionBranchBo.getQuestionId() == null) {
                          conditionBranchBo.setQuestionId(questionsBo.getId());
                        }
                        conditionBranchBo.setInputTypeValue(
                            conditionBranchBo
                                .getInputTypeValue()
                                .replace("&lt;", "<")
                                .replace("&gt;", ">"));
                        session.save(conditionBranchBo);
                      }
                    }
                  }
                }
              }
            } else {
              String deleteQuery =
                  "delete from question_condtion_branching where question_id=:questionId ";
              session
                  .createSQLQuery(deleteQuery)
                  .setString("questionId", questionsBo.getId())
                  .executeUpdate();
            }
          }

          if (questionsBo != null) {
            addOrUpdateQuestionnairesStepsBo.setInstructionFormId(questionsBo.getId());
          }
          // updating the sequence no of step based on the previous
          // sequence no
          if ((addOrUpdateQuestionnairesStepsBo.getQuestionnairesId() != null)
              && (addOrUpdateQuestionnairesStepsBo.getStepId() == null)) {
            QuestionnairesStepsBo existedQuestionnairesStepsBo = null;
            query =
                session
                    .getNamedQuery("getQuestionnaireStepSequenceNo")
                    .setString(
                        "questionnairesId", addOrUpdateQuestionnairesStepsBo.getQuestionnairesId());
            query.setMaxResults(1);
            existedQuestionnairesStepsBo = (QuestionnairesStepsBo) query.uniqueResult();
            if (existedQuestionnairesStepsBo != null) {
              count = existedQuestionnairesStepsBo.getSequenceNo() + 1;
            } else {
              count = count + 1;
            }
            addOrUpdateQuestionnairesStepsBo.setSequenceNo(count);
          }
        }
        session.saveOrUpdate(addOrUpdateQuestionnairesStepsBo);
        // updating the destination step for previous step
        if ((addOrUpdateQuestionnairesStepsBo != null) && (count > 0)) {
          String updateQuery =
              "update QuestionnairesStepsBo QSBO set QSBO.destinationStep=:stepId "
                  + " where "
                  + "QSBO.destinationStep='0'"
                  + " and QSBO.sequenceNo=:sequenceNo"
                  + " and QSBO.questionnairesId=:questionnairesId ";
          session
              .createQuery(updateQuery)
              .setInteger("sequenceNo", (count - 1))
              .setString("stepId", addOrUpdateQuestionnairesStepsBo.getStepId())
              .setString("questionnairesId", addOrUpdateQuestionnairesStepsBo.getQuestionnairesId())
              .executeUpdate();
        }
      }

      transaction.commit();
    } catch (Exception e) {
      transaction.rollback();
      logger.error("StudyQuestionnaireDAOImpl - saveOrUpdateQuestionStep() - Error", e);
    } finally {
      if (session != null) {
        session.close();
      }
    }
    logger.exit("saveOrUpdateQuestionStep() - Ends");
    return addOrUpdateQuestionnairesStepsBo;
  }