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;
}