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("<", "<")
.replace(">", ">"));
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("<", "<")
.replace(">", ">"));
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;
}