public QuestionsBo saveOrUpdateQuestion()

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


  public QuestionsBo saveOrUpdateQuestion(QuestionsBo questionsBo) {
    logger.entry("begin saveOrUpdateQuestion()");
    Session session = null;

    try {
      session = hibernateTemplate.getSessionFactory().openSession();
      transaction = session.beginTransaction();

      String studyId = this.getStudyIdByCustomStudy(session, questionsBo.getCustomStudyId());

      // Ancrodate text start
      if ((questionsBo.getUseAnchorDate() != null) && questionsBo.getUseAnchorDate()) {
        if (StringUtils.isNotEmpty(questionsBo.getAnchorDateName())) {

          AnchorDateTypeBo anchorDateTypeBo = new AnchorDateTypeBo();
          anchorDateTypeBo.setId(questionsBo.getAnchorDateId());
          anchorDateTypeBo.setCustomStudyId(questionsBo.getCustomStudyId());
          anchorDateTypeBo.setStudyId(studyId);
          anchorDateTypeBo.setName(questionsBo.getAnchorDateName());
          anchorDateTypeBo.setHasAnchortypeDraft(1);
          session.saveOrUpdate(anchorDateTypeBo);
          if (anchorDateTypeBo.getId() != null) {
            questionsBo.setAnchorDateId(anchorDateTypeBo.getId());
          }
        }
      } else {
        if ((questionsBo.getAnchorDateId() != null) && (questionsBo.getId() != null)) {
          query =
              session
                  .getNamedQuery("getStudyByCustomStudyId")
                  .setString("customStudyId", questionsBo.getCustomStudyId());
          query.setMaxResults(1);
          StudyVersionBo studyVersionBo = (StudyVersionBo) query.uniqueResult();

          SessionObject sessionObject = new SessionObject();
          sessionObject.setUserId(questionsBo.getModifiedBy());
          boolean isChange = false;
          if ((questionsBo.getIsShorTitleDuplicate() != null)
              && (questionsBo.getIsShorTitleDuplicate() > 0)) {
            isChange = true;
          }
          updateAnchordateInQuestionnaire(
              session,
              transaction,
              studyVersionBo,
              null,
              sessionObject,
              studyId,
              null,
              questionsBo.getId(),
              "",
              isChange,
              questionsBo.getCustomStudyId());
          questionsBo.setAnchorDateId(null);
        }
      }
      // Anchordate Text end
      session.saveOrUpdate(questionsBo);
      if ((questionsBo != null)
          && (questionsBo.getId() != null)
          && (questionsBo.getFromId() != null)) {

        QuestionReponseTypeBo addQuestionReponseTypeBo = questionsBo.getQuestionReponseTypeBo();
        if (StringUtils.isEmpty(addQuestionReponseTypeBo.getQuestionsResponseTypeId())) {
          addQuestionReponseTypeBo.setQuestionsResponseTypeId(questionsBo.getId());
        }

        addQuestionReponseTypeBo =
            getQuestionsResponseTypeBo(
                questionsBo.getQuestionReponseTypeBo(), session, questionsBo.getCustomStudyId());
        if (addQuestionReponseTypeBo != null) {
          session.saveOrUpdate(addQuestionReponseTypeBo);
        }

        questionsBo.setQuestionReponseTypeBo(addQuestionReponseTypeBo);
        if ((questionsBo.getQuestionResponseSubTypeList() != null)
            && !questionsBo.getQuestionResponseSubTypeList().isEmpty()) {
          String deletQuesry =
              "Delete From QuestionResponseSubTypeBo QRSTBO where QRSTBO.responseTypeId=:responseTypeId ";
          session
              .createQuery(deletQuesry)
              .setString("responseTypeId", questionsBo.getId())
              .executeUpdate();
          if ((questionsBo.getResponseType() == 4)
              || (questionsBo.getResponseType() == 3)
              || (questionsBo.getResponseType() == 6)
              || (questionsBo.getResponseType() == 5)) {
            int i = 0;
            // uploading the images for ImageChoice response type
            // questions
            for (QuestionResponseSubTypeBo questionResponseSubTypeBo :
                questionsBo.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.FORM_STEP_IMAGE + i,
                              questionResponseSubTypeBo.getImageFile().getOriginalFilename(),
                              String.valueOf(questionsBo.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,
                              questionsBo.getCustomStudyId());
                      questionResponseSubTypeBo.setImage(imagePath);
                    }
                  }
                  if (questionResponseSubTypeBo.getSelectImageFile() != null) {
                    if ((questionResponseSubTypeBo.getSelectedImage() != null)
                        && !questionResponseSubTypeBo.getSelectedImage().isEmpty()) {
                      questionResponseSubTypeBo.setSelectedImage(
                          questionResponseSubTypeBo.getSelectedImage());
                    } else {
                      fileName =
                          FdahpStudyDesignerUtil.getStandardFileName(
                              FdahpStudyDesignerConstants.FORM_STEP_SELECTEDIMAGE + i,
                              questionResponseSubTypeBo.getSelectImageFile().getOriginalFilename(),
                              String.valueOf(questionsBo.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,
                              questionsBo.getCustomStudyId());
                      questionResponseSubTypeBo.setSelectedImage(imagePath);
                    }
                  }
                  questionResponseSubTypeBo.setResponseTypeId(questionsBo.getId());
                  questionResponseSubTypeBo.setActive(true);
                  session.save(questionResponseSubTypeBo);
                }
              }
              i = i + 1;
            }
          } else {
            for (QuestionResponseSubTypeBo questionResponseSubTypeBo :
                questionsBo.getQuestionResponseSubTypeList()) {
              questionResponseSubTypeBo.setResponseTypeId(questionsBo.getId());
              questionResponseSubTypeBo.setActive(true);
              session.save(questionResponseSubTypeBo);
            }
          }
        }
        // updating the questionnaire and questionnaire step status to
        // incomplete because the admin saving the content question not
        // mark as completed
        if (!questionsBo.getStatus()) {
          if (questionsBo.getQuestionnaireId() != null) {
            query =
                session
                    .createQuery(
                        "From QuestionnairesStepsBo QSBO where QSBO.instructionFormId=:fromId "
                            + " and QSBO.stepType=:stepType "
                            + " and QSBO.active=1 and QSBO.questionnairesId=:questionnairesId ")
                    .setString("fromId", questionsBo.getFromId())
                    .setString("questionnairesId", questionsBo.getQuestionnaireId())
                    .setString("stepType", FdahpStudyDesignerConstants.FORM_STEP);
          } else {
            query =
                session
                    .getNamedQuery("getQuestionnaireStep")
                    .setString("instructionFormId", questionsBo.getFromId())
                    .setString("stepType", FdahpStudyDesignerConstants.FORM_STEP);
          }

          QuestionnairesStepsBo questionnairesStepsBo =
              (QuestionnairesStepsBo) query.uniqueResult();
          if ((questionnairesStepsBo != null) && questionnairesStepsBo.getStatus()) {
            questionnairesStepsBo.setStatus(false);
            session.saveOrUpdate(questionnairesStepsBo);
            query =
                session
                    .createSQLQuery(
                        "update questionnaires q set q.status=0 where q.id=:questionnairesId ")
                    .setString("questionnairesId", questionnairesStepsBo.getQuestionnairesId());
            query.executeUpdate();
          }
        }
        query =
            session.getNamedQuery("getFormMappingBO").setString("questionId", questionsBo.getId());
        FormMappingBo formMappingBo = (FormMappingBo) query.uniqueResult();
        if (formMappingBo == null) {
          formMappingBo = new FormMappingBo();
          formMappingBo.setFormId(questionsBo.getFromId());
          formMappingBo.setQuestionId(questionsBo.getId());
          formMappingBo.setActive(true);
          int sequenceNo = 0;
          query =
              session
                  .createQuery(
                      "From FormMappingBo FMBO where FMBO.formId=:formId "
                          + " and FMBO.active=1 order by FMBO.sequenceNo DESC ")
                  .setString("formId", questionsBo.getFromId());
          query.setMaxResults(1);
          FormMappingBo existedFormMappingBo = (FormMappingBo) query.uniqueResult();
          if (existedFormMappingBo != null) {
            sequenceNo = existedFormMappingBo.getSequenceNo() + 1;
          } else {
            sequenceNo = sequenceNo + 1;
          }
          formMappingBo.setSequenceNo(sequenceNo);
          session.save(formMappingBo);
        }
      }
      transaction.commit();
    } catch (Exception e) {
      transaction.rollback();
      logger.error("StudyQuestionnaireDAOImpl - saveOrUpdateQuestion() - Error", e);
    } finally {
      if (session != null) {
        session.close();
      }
    }
    logger.exit("saveOrUpdateQuestion() - Ends");
    return questionsBo;
  }