/* * OpenClinica is distributed under the * GNU Lesser General Public License (GNU LGPL). * For details see: http://www.openclinica.org/license * copyright 2003-2005 Akaza Research */ package org.akaza.openclinica.dao.service; import org.akaza.openclinica.bean.managestudy.StudyBean; import org.akaza.openclinica.bean.service.StudyParameter; import org.akaza.openclinica.bean.service.StudyParameterConfig; import org.akaza.openclinica.bean.service.StudyParameterValueBean; import org.akaza.openclinica.core.form.StringUtil; import org.akaza.openclinica.dao.managestudy.StudyDAO; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.ArrayList; import javax.sql.DataSource; public class StudyConfigService { private DataSource ds; protected final Logger logger = LoggerFactory.getLogger(getClass().getName()); public StudyConfigService(DataSource ds) { this.ds = ds; } /** * @return Returns the ds. */ public DataSource getDs() { return ds; } /** * @param ds * The ds to set. */ public void setDs(DataSource ds) { this.ds = ds; } /** * true if the study has a value defined for this parameter o if studyId * is a parent study, then this is true iff there is a row for this * study/parameter pair in the study_parameter_value table o if studyId is a * site, then this is true if: ? * the parameter is inheritable and the * studys parent has a defined parameter value; OR ? * the parameter is not * inheritable and there is a row for this studyId/parameter pair in the * study_parameter_value table * * @param studyId * @param parameterHandle * @return */ public String hasDefinedParameterValue(int studyId, String parameterHandle) { StudyDAO sdao = new StudyDAO(ds); StudyParameterValueDAO spvdao = new StudyParameterValueDAO(ds); if (studyId <= 0 || StringUtil.isBlank(parameterHandle)) { return null; } StudyParameterValueBean spv = spvdao.findByHandleAndStudy(studyId, parameterHandle); StudyParameter sp = spvdao.findParameterByHandle(parameterHandle); StudyBean study = (StudyBean) sdao.findByPK(studyId); if (spv.getId() > 0) {// there is a row for that study, no matter it // is a // top study or not return spv.getValue(); } int parentId = study.getParentStudyId(); if (parentId > 0) { StudyParameterValueBean spvParent = spvdao.findByHandleAndStudy(parentId, parameterHandle); if (spvParent.getId() > 0 && sp.isInheritable()) { return spvParent.getValue(); } } return null; } /** * This method construct an object which has all the study parameter values * * @param study * @return */ public StudyBean setParametersForStudy(StudyBean study) { StudyParameterValueDAO spvdao = new StudyParameterValueDAO(ds); ArrayList parameters = spvdao.findAllParameters(); StudyParameterConfig spc = new StudyParameterConfig(); for (int i = 0; i < parameters.size(); i++) { StudyParameter sp = (StudyParameter) parameters.get(i); String handle = sp.getHandle(); // logger.info("handle:" + handle); StudyParameterValueBean spv = spvdao.findByHandleAndStudy(study.getId(), handle); // TO DO: will change to use java reflection later if (spv.getId() > 0) { if (handle.equalsIgnoreCase("collectDob")) { spc.setCollectDob(spv.getValue()); } else if (handle.equalsIgnoreCase("genderRequired")) { spc.setGenderRequired(spv.getValue()); } else if (handle.equalsIgnoreCase("discrepancyManagement")) { spc.setDiscrepancyManagement(spv.getValue()); } else if (handle.equalsIgnoreCase("subjectPersonIdRequired")) { spc.setSubjectPersonIdRequired(spv.getValue()); // logger.info("subjectPersonIdRequired" + // spc.getSubjectPersonIdRequired()); } else if (handle.equalsIgnoreCase("interviewerNameRequired")) { spc.setInterviewerNameRequired(spv.getValue()); } else if (handle.equalsIgnoreCase("interviewerNameDefault")) { spc.setInterviewerNameDefault(spv.getValue()); } else if (handle.equalsIgnoreCase("interviewerNameEditable")) { spc.setInterviewerNameEditable(spv.getValue()); } else if (handle.equalsIgnoreCase("interviewDateRequired")) { spc.setInterviewDateRequired(spv.getValue()); } else if (handle.equalsIgnoreCase("interviewDateDefault")) { spc.setInterviewDateDefault(spv.getValue()); } else if (handle.equalsIgnoreCase("interviewDateEditable")) { spc.setInterviewDateEditable(spv.getValue()); } else if (handle.equalsIgnoreCase("subjectIdGeneration")) { spc.setSubjectIdGeneration(spv.getValue()); logger.debug("subjectIdGeneration" + spc.getSubjectIdGeneration()); } else if (handle.equalsIgnoreCase("subjectIdPrefixSuffix")) { spc.setSubjectIdPrefixSuffix(spv.getValue()); } else if (handle.equalsIgnoreCase("personIdShownOnCRF")) { spc.setPersonIdShownOnCRF(spv.getValue()); } else if (handle.equalsIgnoreCase("secondaryLabelViewable")) { spc.setSecondaryLabelViewable(spv.getValue()); } else if (handle.equalsIgnoreCase("adminForcedReasonForChange")) { spc.setAdminForcedReasonForChange(spv.getValue()); } else if (handle.equalsIgnoreCase("eventLocationRequired")) { spc.setEventLocationRequired(spv.getValue()); } else if (handle.equalsIgnoreCase("participantPortal")) { spc.setParticipantPortal(spv.getValue()); } else if (handle.equalsIgnoreCase("randomization")) { spc.setRandomization(spv.getValue()); } } } study.setStudyParameterConfig(spc); return study; } public StudyBean setParameterValuesForStudy(StudyBean study) { StudyParameterValueDAO spvdao = new StudyParameterValueDAO(ds); ArrayList theParameters = spvdao.findParamConfigByStudy(study); study.setStudyParameters(theParameters); ArrayList parameters = spvdao.findAllParameterValuesByStudy(study); for (int i = 0; i < parameters.size(); i++) { StudyParameterValueBean spvb = (StudyParameterValueBean) parameters.get(i); String parameter = spvb.getParameter(); if (parameter.equalsIgnoreCase("collectDob")) { study.getStudyParameterConfig().setCollectDob(spvb.getValue()); } else if (parameter.equalsIgnoreCase("genderRequired")) { study.getStudyParameterConfig().setGenderRequired(spvb.getValue()); } else if (parameter.equalsIgnoreCase("subjectPersonIdRequired")) { study.getStudyParameterConfig().setSubjectPersonIdRequired(spvb.getValue()); } else if (parameter.equalsIgnoreCase("discrepancyManagement")) { study.getStudyParameterConfig().setDiscrepancyManagement(spvb.getValue()); } else if (parameter.equalsIgnoreCase("subjectIdGeneration")) { study.getStudyParameterConfig().setSubjectIdGeneration(spvb.getValue()); } else if (parameter.equalsIgnoreCase("subjectIdPrefixSuffix")) { study.getStudyParameterConfig().setSubjectIdPrefixSuffix(spvb.getValue()); } else if (parameter.equalsIgnoreCase("interviewerNameRequired")) { study.getStudyParameterConfig().setInterviewerNameRequired(spvb.getValue()); } else if (parameter.equalsIgnoreCase("interviewerNameDefault")) { study.getStudyParameterConfig().setInterviewerNameDefault(spvb.getValue()); } else if (parameter.equalsIgnoreCase("interviewerNameEditable")) { study.getStudyParameterConfig().setInterviewerNameEditable(spvb.getValue()); } else if (parameter.equalsIgnoreCase("interviewDateRequired")) { study.getStudyParameterConfig().setInterviewDateRequired(spvb.getValue()); } else if (parameter.equalsIgnoreCase("interviewDateDefault")) { study.getStudyParameterConfig().setInterviewDateDefault(spvb.getValue()); } else if (parameter.equalsIgnoreCase("interviewDateEditable")) { study.getStudyParameterConfig().setInterviewDateEditable(spvb.getValue()); } else if (parameter.equalsIgnoreCase("personIdShownOnCRF")) { study.getStudyParameterConfig().setPersonIdShownOnCRF(spvb.getValue()); } else if (parameter.equalsIgnoreCase("adminForcedReasonForChange")) { study.getStudyParameterConfig().setAdminForcedReasonForChange(spvb.getValue()); } } return study; } public StudyBean setParametersForSite(StudyBean site) { StudyDAO sdao = new StudyDAO(ds); StudyParameterValueDAO spvdao = new StudyParameterValueDAO(ds); StudyBean parent = (StudyBean) sdao.findByPK(site.getParentStudyId()); parent = this.setParameterValuesForStudy(parent); site.setStudyParameterConfig(parent.getStudyParameterConfig()); ArrayList siteParameters = spvdao.findAllParameterValuesByStudy(site); for (int i = 0; i < siteParameters.size(); i++) { StudyParameterValueBean spvb = (StudyParameterValueBean) siteParameters.get(i); String parameter = spvb.getParameter(); if (parameter.equalsIgnoreCase("collectDob")) { site.getStudyParameterConfig().setCollectDob(spvb.getValue()); } else if (parameter.equalsIgnoreCase("genderRequired")) { site.getStudyParameterConfig().setGenderRequired(spvb.getValue()); } else if (parameter.equalsIgnoreCase("subjectPersonIdRequired")) { site.getStudyParameterConfig().setSubjectPersonIdRequired(spvb.getValue()); } else if (parameter.equalsIgnoreCase("discrepancyManagement")) { site.getStudyParameterConfig().setDiscrepancyManagement(spvb.getValue()); } else if (parameter.equalsIgnoreCase("subjectIdGeneration")) { site.getStudyParameterConfig().setSubjectIdGeneration(spvb.getValue()); } else if (parameter.equalsIgnoreCase("subjectIdPrefixSuffix")) { site.getStudyParameterConfig().setSubjectIdPrefixSuffix(spvb.getValue()); } else if (parameter.equalsIgnoreCase("interviewerNameRequired")) { site.getStudyParameterConfig().setInterviewerNameRequired(spvb.getValue()); } else if (parameter.equalsIgnoreCase("interviewerNameDefault")) { site.getStudyParameterConfig().setInterviewerNameDefault(spvb.getValue()); } else if (parameter.equalsIgnoreCase("interviewerNameEditable")) { site.getStudyParameterConfig().setInterviewerNameEditable(spvb.getValue()); } else if (parameter.equalsIgnoreCase("interviewDateRequired")) { site.getStudyParameterConfig().setInterviewDateRequired(spvb.getValue()); } else if (parameter.equalsIgnoreCase("interviewDateDefault")) { site.getStudyParameterConfig().setInterviewDateDefault(spvb.getValue()); } else if (parameter.equalsIgnoreCase("interviewDateEditable")) { site.getStudyParameterConfig().setInterviewDateEditable(spvb.getValue()); } else if (parameter.equalsIgnoreCase("personIdShownOnCRF")) { site.getStudyParameterConfig().setPersonIdShownOnCRF(spvb.getValue()); } else if (parameter.equalsIgnoreCase("adminForcedReasonForChange")) { site.getStudyParameterConfig().setAdminForcedReasonForChange(spvb.getValue()); } // will add interview name/date features later } return site; } }