/* * 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.managestudy; import java.sql.Types; import java.util.ArrayList; import java.util.Collection; import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; import javax.sql.DataSource; import org.akaza.openclinica.bean.core.EntityBean; import org.akaza.openclinica.bean.managestudy.EventDefinitionCRFBean; import org.akaza.openclinica.bean.managestudy.StudyBean; import org.akaza.openclinica.bean.managestudy.StudyEventBean; import org.akaza.openclinica.bean.managestudy.StudyEventDefinitionBean; import org.akaza.openclinica.dao.core.AuditableEntityDAO; import org.akaza.openclinica.dao.core.DAODigester; import org.akaza.openclinica.dao.core.SQLFactory; import org.akaza.openclinica.dao.core.TypeNames; import org.akaza.openclinica.domain.SourceDataVerification; /** * @author jxu * */ public class EventDefinitionCRFDAO extends AuditableEntityDAO { // private DAODigester digester; private void setQueryNames() { getCurrentPKName = "getCurrentPK"; getNextPKName = "getNextPK"; findAllByStudyName = "findAllByStudy"; } public EventDefinitionCRFDAO(DataSource ds) { super(ds); setQueryNames(); } public EventDefinitionCRFDAO(DataSource ds, DAODigester digester) { super(ds); this.digester = digester; setQueryNames(); } @Override protected void setDigesterName() { digesterName = SQLFactory.getInstance().DAO_EVENTDEFINITIONCRF; } @Override public void setTypesExpected() { this.unsetTypeExpected(); this.setTypeExpected(1, TypeNames.INT); this.setTypeExpected(2, TypeNames.INT); this.setTypeExpected(3, TypeNames.INT); this.setTypeExpected(4, TypeNames.INT); this.setTypeExpected(5, TypeNames.BOOL); this.setTypeExpected(6, TypeNames.BOOL); this.setTypeExpected(7, TypeNames.BOOL); this.setTypeExpected(8, TypeNames.BOOL); this.setTypeExpected(9, TypeNames.STRING); this.setTypeExpected(10, TypeNames.INT); this.setTypeExpected(11, TypeNames.INT); this.setTypeExpected(12, TypeNames.INT); this.setTypeExpected(13, TypeNames.DATE); this.setTypeExpected(14, TypeNames.DATE); this.setTypeExpected(15, TypeNames.INT); this.setTypeExpected(16, TypeNames.INT); this.setTypeExpected(17, TypeNames.BOOL); // Issue 3212 this.setTypeExpected(18, TypeNames.BOOL); this.setTypeExpected(19, TypeNames.INT); // source_data_verification_id this.setTypeExpected(20, TypeNames.STRING); // selected_version_ids this.setTypeExpected(21, TypeNames.INT); // parent_id this.setTypeExpected(22, TypeNames.BOOL); // participant_crf this.setTypeExpected(23, TypeNames.BOOL); // allow_anonymous_submission this.setTypeExpected(24, TypeNames.STRING); // submission_url } /** * <p> * getEntityFromHashMap, the method that gets the object from the database * query. */ @Override public Object getEntityFromHashMap(HashMap hm) { EventDefinitionCRFBean eb = new EventDefinitionCRFBean(); super.setEntityAuditInformation(eb, hm); // EVENT_DEFINITION_CRF_ID STUDY_EVENT_DEFINITION_ID STUDY_ID // CRF_ID REQUIRED_CRF DOUBLE_ENTRY REQUIRE_ALL_TEXT_FILLED // DECISION_CONDITIONS DEFAULT_VERSION_ID STATUS_ID OWNER_ID // DATE_CREATED DATE_UPDATED UPDATE_ID eb.setId(((Integer) hm.get("event_definition_crf_id")).intValue()); eb.setStudyEventDefinitionId(((Integer) hm.get("study_event_definition_id")).intValue()); eb.setStudyId(((Integer) hm.get("study_id")).intValue()); eb.setCrfId(((Integer) hm.get("crf_id")).intValue()); eb.setRequiredCRF(((Boolean) hm.get("required_crf")).booleanValue()); eb.setDoubleEntry(((Boolean) hm.get("double_entry")).booleanValue()); eb.setRequireAllTextFilled(((Boolean) hm.get("require_all_text_filled")).booleanValue()); eb.setDecisionCondition(((Boolean) hm.get("decision_conditions")).booleanValue()); eb.setNullValues((String) hm.get("null_values")); eb.setDefaultVersionId(((Integer) hm.get("default_version_id")).intValue()); eb.setOrdinal(((Integer) hm.get("ordinal")).intValue()); eb.setElectronicSignature(((Boolean) hm.get("electronic_signature")).booleanValue()); // issue 3212 eb.setHideCrf(((Boolean) hm.get("hide_crf"))); int sdvId = (Integer) hm.get("source_data_verification_code"); eb.setSourceDataVerification(SourceDataVerification.getByCode(sdvId > 0 ? sdvId : 3)); String selectedVersionIds = (String) hm.get("selected_version_ids"); eb.setSelectedVersionIds(selectedVersionIds != null ? selectedVersionIds : ""); int parentId = (Integer) hm.get("parent_id"); eb.setParentId(parentId > 0 ? parentId : 0); eb.setParticipantForm(((Boolean) hm.get("participant_form")).booleanValue()); eb.setAllowAnonymousSubmission(((Boolean) hm.get("allow_anonymous_submission")).booleanValue()); eb.setSubmissionUrl(((String) hm.get("submission_url"))); return eb; } @Override public Collection findAll() { this.setTypesExpected(); ArrayList alist = this.select(digester.getQuery("findAll")); ArrayList al = new ArrayList(); Iterator it = alist.iterator(); while (it.hasNext()) { EventDefinitionCRFBean eb = (EventDefinitionCRFBean) this.getEntityFromHashMap((HashMap) it.next()); al.add(eb); } return al; } public Collection findAllByDefinition(int definitionId) { this.setTypesExpected(); HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(definitionId)); String sql = digester.getQuery("findAllByDefinition"); ArrayList alist = this.select(sql, variables); ArrayList al = new ArrayList(); Iterator it = alist.iterator(); while (it.hasNext()) { EventDefinitionCRFBean eb = (EventDefinitionCRFBean) this.getEntityFromHashMap((HashMap) it.next()); al.add(eb); } return al; } /** * Find all EventDefinitionCRFBean for the StudyBean. * * @param study * @param definitionId * @return */ public Collection findAllByDefinition(StudyBean study, int definitionId) { return study.isSite(study.getParentStudyId()) ? findAllByDefinitionAndSiteIdAndParentStudyId(definitionId, study.getId(), study.getParentStudyId()) : findAllParentsByDefinition(definitionId); } /** * Find all EventDefinitionCRFBean which have no parent * EventDefinitionCRFBean. * * @param definitionId * @return */ public Collection findAllParentsByDefinition(int definitionId) { this.setTypesExpected(); HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(definitionId)); String sql = digester.getQuery("findAllParentsByDefinition"); ArrayList alist = this.select(sql, variables); ArrayList al = new ArrayList(); Iterator it = alist.iterator(); while (it.hasNext()) { EventDefinitionCRFBean eb = (EventDefinitionCRFBean) this.getEntityFromHashMap((HashMap) it.next()); al.add(eb); } return al; } /** * Find all EventDefinitionCRFBean for the site * * @param definitionId * @param siteId * @param parentStudyId * @return */ public Collection findAllByDefinitionAndSiteIdAndParentStudyId(int definitionId, int siteId, int parentStudyId) { this.setTypesExpected(); HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(definitionId)); variables.put(new Integer(2), new Integer(siteId)); variables.put(new Integer(3), new Integer(parentStudyId)); variables.put(new Integer(4), new Integer(definitionId)); variables.put(new Integer(5), new Integer(siteId)); String sql = digester.getQuery("findAllByDefinitionAndSiteIdAndParentStudyId"); ArrayList alist = this.select(sql, variables); ArrayList al = new ArrayList(); Iterator it = alist.iterator(); while (it.hasNext()) { EventDefinitionCRFBean eb = (EventDefinitionCRFBean) this.getEntityFromHashMap((HashMap) it.next()); al.add(eb); } return al; } public ArrayList<EventDefinitionCRFBean> findAllByCrfDefinitionInSiteOnly(int definitionId, int crfId) { this.setTypesExpected(); HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(definitionId)); variables.put(new Integer(2), new Integer(crfId)); String sql = digester.getQuery("findAllByCrfDefinitionInSiteOnly"); ArrayList alist = this.select(sql, variables); ArrayList <EventDefinitionCRFBean> al = new ArrayList(); Iterator it = alist.iterator(); while (it.hasNext()) { EventDefinitionCRFBean eb = (EventDefinitionCRFBean) this.getEntityFromHashMap((HashMap) it.next()); al.add(eb); } return al; } public ArrayList<EventDefinitionCRFBean> findAllActiveSitesAndStudiesPerParentStudy(int parentStudyId) { this.setTypesExpected(); HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(parentStudyId)); variables.put(new Integer(2), new Integer(parentStudyId)); String sql = digester.getQuery("findAllActiveSitesAndStudiesPerParentStudy"); ArrayList alist = this.select(sql, variables); ArrayList <EventDefinitionCRFBean> al = new ArrayList(); Iterator it = alist.iterator(); while (it.hasNext()) { EventDefinitionCRFBean eb = (EventDefinitionCRFBean) this.getEntityFromHashMap((HashMap) it.next()); al.add(eb); } return al; } public ArrayList<EventDefinitionCRFBean> findAllSubmissionUriAndStudyId(String submissionUri, int studyId) { this.setTypesExpected(); HashMap variables = new HashMap(); variables.put(new Integer(1), new String(submissionUri)); variables.put(new Integer(2), new Integer(studyId)); variables.put(new Integer(3), new Integer(studyId)); String sql = digester.getQuery("findAllSubmissionUriAndStudyId"); ArrayList alist = this.select(sql, variables); ArrayList <EventDefinitionCRFBean> al = new ArrayList(); Iterator it = alist.iterator(); while (it.hasNext()) { EventDefinitionCRFBean eb = (EventDefinitionCRFBean) this.getEntityFromHashMap((HashMap) it.next()); al.add(eb); } return al; } public Collection findAllByCRF(int crfId) { this.setTypesExpected(); HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(crfId)); String sql = digester.getQuery("findByCRFId"); ArrayList alist = this.select(sql, variables); ArrayList al = new ArrayList(); Iterator it = alist.iterator(); while (it.hasNext()) { EventDefinitionCRFBean eb = (EventDefinitionCRFBean) this.getEntityFromHashMap((HashMap) it.next()); al.add(eb); } return al; } @Override public Collection findAll(String strOrderByColumn, boolean blnAscendingSort, String strSearchPhrase) { ArrayList al = new ArrayList(); return al; } @Override public EntityBean findByPK(int ID) { EventDefinitionCRFBean eb = new EventDefinitionCRFBean(); this.setTypesExpected(); HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(ID)); String sql = digester.getQuery("findByPK"); ArrayList alist = this.select(sql, variables); Iterator it = alist.iterator(); if (it.hasNext()) { eb = (EventDefinitionCRFBean) this.getEntityFromHashMap((HashMap) it.next()); } return eb; } /** * Creates a new studysubject */ @Override public EntityBean create(EntityBean eb) { EventDefinitionCRFBean sb = (EventDefinitionCRFBean) eb; HashMap nullVars = new HashMap(); HashMap variables = new HashMap(); int id = getNextPK(); // INSERT INTO EVENT_DEFINITION_CRF // (EVENT_DEFINITION_CRF_ID,STUDY_EVENT_DEFINITION_ID,STUDY_ID,CRF_ID, // REQUIRED_CRF, // DOUBLE_ENTRY,REQUIRE_ALL_TEXT_FILLED,DECISION_CONDITIONS, // NULL_VALUES,DEFAULT_VERSION_ID,STATUS_ID,OWNER_ID,DATE_CREATED,ordinal, // ELECTRONIC_SIGNATURE,HIDE_CRF,SOURCE_DATA_VERIFICATION_ID, // SELECTED_VERSION_IDS, PARENT_ID) // VALUES (?,?,?,?,?,?,?,?,?,?,?,?,NOW(),?,?,?,?,?,?) variables.put(new Integer(1), new Integer(id)); variables.put(new Integer(2), new Integer(sb.getStudyEventDefinitionId())); variables.put(new Integer(3), new Integer(sb.getStudyId())); variables.put(new Integer(4), new Integer(sb.getCrfId())); variables.put(new Integer(5), new Boolean(sb.isRequiredCRF())); variables.put(new Integer(6), new Boolean(sb.isDoubleEntry())); variables.put(new Integer(7), new Boolean(sb.isRequireAllTextFilled())); variables.put(new Integer(8), new Boolean(sb.isDecisionCondition())); variables.put(new Integer(9), sb.getNullValues()); variables.put(new Integer(10), new Integer(sb.getDefaultVersionId())); variables.put(new Integer(11), new Integer(sb.getStatus().getId())); variables.put(new Integer(12), new Integer(sb.getOwnerId())); variables.put(new Integer(13), new Integer(sb.getOrdinal())); variables.put(new Integer(14), new Boolean(sb.isElectronicSignature())); variables.put(new Integer(15), new Boolean(sb.isHideCrf())); variables.put(new Integer(16), new Integer(sb.getSourceDataVerification().getCode())); variables.put(new Integer(17), sb.getSelectedVersionIds()); if (sb.getParentId() == 0) { nullVars.put(new Integer(18), new Integer(Types.INTEGER)); variables.put(new Integer(18), null); } else { variables.put(new Integer(18), new Integer(sb.getParentId())); } variables.put(new Integer(19), new Boolean(sb.isParticipantForm())); if (sb.isParticipantForm()){ variables.put(new Integer(20), new Boolean(sb.isAllowAnonymousSubmission())); }else{ sb.setAllowAnonymousSubmission(false); variables.put(new Integer(20), new Boolean(sb.isAllowAnonymousSubmission())); } if(sb.isAllowAnonymousSubmission()){ if (sb.getSubmissionUrl()==null) sb.setSubmissionUrl(""); variables.put(new Integer(21), sb.getSubmissionUrl()); }else{ sb.setSubmissionUrl(""); variables.put(new Integer(21), sb.getSubmissionUrl()); } this.execute(digester.getQuery("create"), variables, nullVars); if (isQuerySuccessful()) { sb.setId(id); } return sb; } /** * Updates a Study event */ @Override public EntityBean update(EntityBean eb) { EventDefinitionCRFBean sb = (EventDefinitionCRFBean) eb; HashMap nullVars = new HashMap(); HashMap variables = new HashMap(); // UPDATE EVENT_DEFINITION_CRF SET // STUDY_EVENT_DEFINITION_ID=?,STUDY_ID=?,CRF_ID=?, REQUIRED_CRF=?, // DOUBLE_ENTRY=?,REQUIRE_ALL_TEXT_FILLED=?,DECISION_CONDITIONS=?, // NULL_VALUES=?,DEFAULT_VERSION_ID=?,STATUS_ID=?,DATE_UPDATED=?,UPDATE_ID=?, // ordinal=?,ELECTRONIC_SIGNATURE=? HIDE_CRF=?, // SOURCE_DATA_VERIFICATION_ID=?, Selected_version_ids=?, parent_id=? // WHERE EVENT_DEFINITION_CRF_ID=? variables.put(new Integer(1), new Integer(sb.getStudyEventDefinitionId())); variables.put(new Integer(2), new Integer(sb.getStudyId())); variables.put(new Integer(3), new Integer(sb.getCrfId())); variables.put(new Integer(4), new Boolean(sb.isRequiredCRF())); variables.put(new Integer(5), new Boolean(sb.isDoubleEntry())); variables.put(new Integer(6), new Boolean(sb.isRequireAllTextFilled())); variables.put(new Integer(7), new Boolean(sb.isDecisionCondition())); variables.put(new Integer(8), sb.getNullValues()); variables.put(new Integer(9), new Integer(sb.getDefaultVersionId())); variables.put(new Integer(10), new Integer(sb.getStatus().getId())); variables.put(new Integer(11), new java.util.Date());// DATE_Updated variables.put(new Integer(12), new Integer(sb.getUpdater().getId())); variables.put(new Integer(13), new Integer(sb.getOrdinal())); variables.put(new Integer(14), new Boolean(sb.isElectronicSignature())); variables.put(new Integer(15), new Boolean(sb.isHideCrf())); variables.put(new Integer(16), new Integer(sb.getSourceDataVerification().getCode())); variables.put(new Integer(17), sb.getSelectedVersionIds()); if (sb.getParentId() == 0) { nullVars.put(new Integer(18), new Integer(Types.INTEGER)); variables.put(new Integer(18), null); } else { variables.put(new Integer(18), new Integer(sb.getParentId())); } variables.put(new Integer(19), new Boolean(sb.isParticipantForm())); if (sb.isParticipantForm()){ variables.put(new Integer(20), new Boolean(sb.isAllowAnonymousSubmission())); }else{ sb.setAllowAnonymousSubmission(false); variables.put(new Integer(20), new Boolean(sb.isAllowAnonymousSubmission())); } if(sb.isAllowAnonymousSubmission()){ variables.put(new Integer(21), sb.getSubmissionUrl()); }else{ sb.setSubmissionUrl(""); variables.put(new Integer(21), sb.getSubmissionUrl()); } variables.put(new Integer(22), new Integer(sb.getId())); String sql = digester.getQuery("update"); this.execute(sql, variables, nullVars); return sb; } @Override public Collection findAllByPermission(Object objCurrentUser, int intActionType, String strOrderByColumn, boolean blnAscendingSort, String strSearchPhrase) { ArrayList al = new ArrayList(); return al; } @Override public Collection findAllByPermission(Object objCurrentUser, int intActionType) { ArrayList al = new ArrayList(); return al; } public ArrayList findByDefaultVersion(int versionId) { this.setTypesExpected(); HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(versionId)); String sql = digester.getQuery("findByDefaultVersion"); ArrayList alist = this.select(sql, variables); ArrayList al = new ArrayList(); Iterator it = alist.iterator(); while (it.hasNext()) { EventDefinitionCRFBean eb = (EventDefinitionCRFBean) this.getEntityFromHashMap((HashMap) it.next()); al.add(eb); } return al; } public ArrayList findAllByEventDefinitionId(int eventDefinitionId) { HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(eventDefinitionId)); return executeFindAllQuery("findAllByEventDefinitionId", variables); } public ArrayList findAllByEventDefinitionIdAndOrdinal(int eventDefinitionId, int ordinal) { HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(eventDefinitionId)); variables.put(new Integer(2), new Integer(ordinal)); return executeFindAllQuery("findAllByEventDefinitionIdAndOrdinal", variables); } /** * Find all EventDefinitionCRFBean for the StudyBean. * * @param study * @param eventDefinitionId * @return */ public Collection findAllByEventDefinitionId(StudyBean study, int eventDefinitionId) { return study.isSite(study.getParentStudyId()) ? findAllByEventDefinitionIdAndSiteIdAndParentStudyId(eventDefinitionId, study.getId(), study.getParentStudyId()) : findAllParentsByEventDefinitionId(eventDefinitionId); } public Collection findAllParentsByEventDefinitionId(int definitionId) { this.setTypesExpected(); HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(definitionId)); String sql = digester.getQuery("findAllParentsByEventDefinitionId"); ArrayList alist = this.select(sql, variables); ArrayList al = new ArrayList(); Iterator it = alist.iterator(); while (it.hasNext()) { EventDefinitionCRFBean eb = (EventDefinitionCRFBean) this.getEntityFromHashMap((HashMap) it.next()); al.add(eb); } return al; } public Collection findAllByEventDefinitionIdAndSiteIdAndParentStudyId(int definitionId, int siteId, int parentStudyId) { this.setTypesExpected(); HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(definitionId)); variables.put(new Integer(2), new Integer(siteId)); variables.put(new Integer(3), new Integer(parentStudyId)); variables.put(new Integer(4), new Integer(definitionId)); variables.put(new Integer(5), new Integer(siteId)); String sql = digester.getQuery("findAllByEventDefinitionIdAndSiteIdAndParentStudyId"); ArrayList alist = this.select(sql, variables); ArrayList al = new ArrayList(); Iterator it = alist.iterator(); while (it.hasNext()) { EventDefinitionCRFBean eb = (EventDefinitionCRFBean) this.getEntityFromHashMap((HashMap) it.next()); al.add(eb); } return al; } public ArrayList findAllActiveByEventDefinitionId(int eventDefinitionId) { HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(eventDefinitionId)); return executeFindAllQuery("findAllActiveByEventDefinitionId", variables); } /** * Find all active EventDefinitionCRFBean for the StudyBean and the * study_event_definition_id * * @param study * @param eventDefinitionId * @return */ public Collection findAllActiveByEventDefinitionId(StudyBean study, int eventDefinitionId) { if (study.isSite(study.getParentStudyId())) { return findAllActiveByEventDefinitionIdAndSiteIdAndParentStudyId(eventDefinitionId, study.getId(), study.getParentStudyId()); } else { return findAllActiveParentsByEventDefinitionId(eventDefinitionId); } } public Collection findAllActiveByEventDefinitionIdandStudyId(int definitionId , int studyId) { this.setTypesExpected(); HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(definitionId)); variables.put(new Integer(2), new Integer(studyId)); String sql = digester.getQuery("findAllActiveByEventDefinitionIdandStudyId"); ArrayList alist = this.select(sql, variables); ArrayList al = new ArrayList(); Iterator it = alist.iterator(); while (it.hasNext()) { EventDefinitionCRFBean eb = (EventDefinitionCRFBean) this.getEntityFromHashMap((HashMap) it.next()); al.add(eb); } return al; } public ArrayList findAllDefIdandStudyId(Integer studyEventDefnId, Integer studyId) { HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(studyEventDefnId)); variables.put(new Integer(2), new Integer(studyId)); return executeFindAllQuery("findAllDefIdandStudyId", variables); } public ArrayList findAllDefnIdandStudyIdForSite(Integer studyEventDefnId, Integer studyId) { HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(studyEventDefnId)); variables.put(new Integer(2), new Integer(studyId)); return executeFindAllQuery("findAllDefnIdandStudyIdForSite", variables); } public Collection findAllActiveParentsByEventDefinitionId(int definitionId) { this.setTypesExpected(); HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(definitionId)); String sql = digester.getQuery("findAllActiveParentsByEventDefinitionId"); ArrayList alist = this.select(sql, variables); ArrayList al = new ArrayList(); Iterator it = alist.iterator(); while (it.hasNext()) { EventDefinitionCRFBean eb = (EventDefinitionCRFBean) this.getEntityFromHashMap((HashMap) it.next()); al.add(eb); } return al; } public Collection findAllActiveByEventDefinitionIdAndSiteIdAndParentStudyId(int definitionId, int siteId, int parentStudyId) { this.setTypesExpected(); HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(definitionId)); variables.put(new Integer(2), new Integer(siteId)); variables.put(new Integer(3), new Integer(parentStudyId)); variables.put(new Integer(4), new Integer(definitionId)); variables.put(new Integer(5), new Integer(siteId)); String sql = digester.getQuery("findAllActiveByEventDefinitionIdAndSiteIdAndParentStudyId"); ArrayList alist = this.select(sql, variables); ArrayList al = new ArrayList(); Iterator it = alist.iterator(); while (it.hasNext()) { EventDefinitionCRFBean eb = (EventDefinitionCRFBean) this.getEntityFromHashMap((HashMap) it.next()); al.add(eb); } return al; } public Collection findAllActiveNonHiddenByEventDefinitionIdAndStudy(int definitionId, StudyBean study) { ArrayList al = new ArrayList(); this.setTypesExpected(); HashMap variables = new HashMap(); if (study.getParentStudyId() > 0) { variables.put(new Integer(1), new Integer(definitionId)); variables.put(new Integer(2), new Integer(study.getId())); variables.put(new Integer(3), new Integer(definitionId)); String sql = digester.getQuery("findAllActiveNonHiddenByEventDefinitionIdAndSite"); ArrayList alist = this.select(sql, variables); Iterator it = alist.iterator(); while (it.hasNext()) { EventDefinitionCRFBean eb = (EventDefinitionCRFBean) this.getEntityFromHashMap((HashMap) it.next()); al.add(eb); } } return al; } /** * isRequiredInDefinition, looks at a specific EventCRF and determines if * it's required or not * * @return boolean to tell us if it's required or not. */ public boolean isRequiredInDefinition(int crfVersionId, StudyEventBean studyEvent) { StudyBean study = new StudyDAO(this.ds).findByStudySubjectId(studyEvent.getStudySubjectId()); int studyEventId = studyEvent.getId(); /* * select distinct event_definition_crf.study_id, * event_definition_crf.required_crf, event_definition_crf.parent_id * from event_definition_crf, event_crf, crf_version, study_event where * crf_version.crf_version_id = 29 and crf_version.crf_version_id = * event_crf.crf_version_id and crf_version.crf_id = * event_definition_crf.crf_id and * event_definition_crf.study_event_definition_id = * study_event.study_event_definition_id and study_event.study_event_id * = 91 */ this.unsetTypeExpected(); this.setTypeExpected(1, TypeNames.BOOL); this.setTypeExpected(2, TypeNames.INT); this.setTypeExpected(3, TypeNames.INT); HashMap variables = new HashMap(); variables.put(new Integer(2), new Integer(studyEventId)); variables.put(new Integer(1), new Integer(crfVersionId)); String sql = digester.getQuery("isRequiredInDefinition"); ArrayList alist = this.select(sql, variables); Iterator it = alist.iterator(); Boolean answer = false; Boolean siteR = false; Boolean studyR = false; Boolean isExisted = false; while (it.hasNext()) { HashMap hm = (HashMap) it.next(); Integer dbStudyId = (Integer) hm.get("study_id"); Integer parentId = (Integer) hm.get("parent_id"); if (dbStudyId == study.getId()) { if (parentId != null && parentId > 0) { siteR = (Boolean) hm.get("required_crf"); isExisted = true; } else { studyR = (Boolean) hm.get("required_crf"); } } else if (dbStudyId == study.getParentStudyId()) { studyR = (Boolean) hm.get("required_crf"); } } if (study.isSite(study.getParentStudyId()) && isExisted) { answer = siteR; } else { answer = studyR; } logger.debug("We are returning " + answer.toString() + " for crfVersionId " + crfVersionId + " and studyEventId " + studyEventId); return answer.booleanValue(); } /** * @param study * @param studyEventId * @param crfVersionId * @return */ public EventDefinitionCRFBean findByStudyEventIdAndCRFVersionId(StudyBean study, int studyEventId, int crfVersionId) { EventDefinitionCRFBean edc = new EventDefinitionCRFBean(); if (study.isSite(study.getParentStudyId())) { edc = this.findByStudyEventIdAndCRFVersionIdAndSiteIdAndParentStudyId(studyEventId, crfVersionId, study.getId(), study.getParentStudyId()); } else { edc = this.findForStudyByStudyEventIdAndCRFVersionId(studyEventId, crfVersionId); } return edc; } /** * Find the EventDefinitionCRFBean of a study. So this * EventDefinitionCRFBean has no parent. * * @param studyEventId * The requested study event id. * @param crfVersionId * The requested CRF version id. * @return The event definition crf which defines the study event and crf * version. */ public EventDefinitionCRFBean findForStudyByStudyEventIdAndCRFVersionId(int studyEventId, int crfVersionId) { EventDefinitionCRFBean answer = new EventDefinitionCRFBean(); this.setTypesExpected(); HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(studyEventId)); variables.put(new Integer(2), new Integer(crfVersionId)); String sql = digester.getQuery("findForStudyByStudyEventIdAndCRFVersionId"); ArrayList alist = this.select(sql, variables); Iterator it = alist.iterator(); while (it.hasNext()) { answer = (EventDefinitionCRFBean) this.getEntityFromHashMap((HashMap) it.next()); } return answer; } public EventDefinitionCRFBean findByStudyEventIdAndCRFVersionIdAndSiteIdAndParentStudyId(int studyEventId, int crfVersionId, int siteId, int parentStudyId) { EventDefinitionCRFBean answer = new EventDefinitionCRFBean(); this.setTypesExpected(); HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(studyEventId)); variables.put(new Integer(2), new Integer(crfVersionId)); variables.put(new Integer(3), new Integer(siteId)); variables.put(new Integer(4), new Integer(parentStudyId)); variables.put(new Integer(5), new Integer(siteId)); String sql = digester.getQuery("findByStudyEventIdAndCRFVersionIdAndSiteIdAndParentStudyId"); ArrayList alist = this.select(sql, variables); Iterator it = alist.iterator(); while (it.hasNext()) { answer = (EventDefinitionCRFBean) this.getEntityFromHashMap((HashMap) it.next()); } return answer; } /** * @param studyEventDefinitionId * The study event definition of the desired event definition * crf. * @param crfId * The CRF of the desired event definition crf. * @return The event definition crf for the specified study event definition * and CRF. */ public EventDefinitionCRFBean findByStudyEventDefinitionIdAndCRFId(int studyEventDefinitionId, int crfId) { EventDefinitionCRFBean answer = new EventDefinitionCRFBean(); this.setTypesExpected(); HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(studyEventDefinitionId)); variables.put(new Integer(2), new Integer(crfId)); String sql = digester.getQuery("findByStudyEventDefinitionIdAndCRFId"); ArrayList alist = this.select(sql, variables); Iterator it = alist.iterator(); while (it.hasNext()) { answer = (EventDefinitionCRFBean) this.getEntityFromHashMap((HashMap) it.next()); } return answer; } public EventDefinitionCRFBean findByStudyEventDefinitionIdAndCRFIdAndStudyId(int studyEventDefinitionId, int crfId, int studyId) { EventDefinitionCRFBean answer = new EventDefinitionCRFBean(); this.setTypesExpected(); HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(studyEventDefinitionId)); variables.put(new Integer(2), new Integer(crfId)); variables.put(new Integer(3), new Integer(studyId)); String sql = digester.getQuery("findByStudyEventDefinitionIdAndCRFIdAndStudyId"); ArrayList alist = this.select(sql, variables); Iterator it = alist.iterator(); while (it.hasNext()) { answer = (EventDefinitionCRFBean) this.getEntityFromHashMap((HashMap) it.next()); } return answer; } /** * Find EventDefinitionCRFBean for the StudyBean. * * @param study * @param studyEventDefinitionId * @param crfId * @return */ public EventDefinitionCRFBean findByStudyEventDefinitionIdAndCRFId(StudyBean study, int studyEventDefinitionId, int crfId) { return study.isSite(study.getParentStudyId()) ? findByStudyEventDefinitionIdAndCRFIdAndSiteIdAndParentStudyId(studyEventDefinitionId, crfId, study.getId(), study.getParentStudyId()) : findForStudyByStudyEventDefinitionIdAndCRFId(studyEventDefinitionId, crfId); } /** * Find EventDefinitionCRFBean for a study. So this EventDefinitionCRFBean * has no parent. * * @param studyEventDefinitionId * @param crfId * @return */ public EventDefinitionCRFBean findForStudyByStudyEventDefinitionIdAndCRFId(int studyEventDefinitionId, int crfId) { EventDefinitionCRFBean answer = new EventDefinitionCRFBean(); this.setTypesExpected(); HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(studyEventDefinitionId)); variables.put(new Integer(2), new Integer(crfId)); String sql = digester.getQuery("findForStudyByStudyEventDefinitionIdAndCRFId"); ArrayList alist = this.select(sql, variables); Iterator it = alist.iterator(); while (it.hasNext()) { answer = (EventDefinitionCRFBean) this.getEntityFromHashMap((HashMap) it.next()); } return answer; } public EventDefinitionCRFBean findByStudyEventDefinitionIdAndCRFIdAndSiteIdAndParentStudyId(int studyEventDefinitionId, int crfId, int siteId, int parentStudyId) { EventDefinitionCRFBean answer = new EventDefinitionCRFBean(); this.setTypesExpected(); HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(studyEventDefinitionId)); variables.put(new Integer(2), new Integer(crfId)); variables.put(new Integer(3), new Integer(siteId)); variables.put(new Integer(4), new Integer(parentStudyId)); variables.put(new Integer(5), new Integer(siteId)); String sql = digester.getQuery("findByStudyEventDefinitionIdAndCRFIdAndSiteIdAndParentStudyId"); ArrayList alist = this.select(sql, variables); Iterator it = alist.iterator(); while (it.hasNext()) { answer = (EventDefinitionCRFBean) this.getEntityFromHashMap((HashMap) it.next()); } return answer; } public Set<String> findHiddenCrfIdsBySite(StudyBean study) { Set<String> ids = new TreeSet<String>(); this.unsetTypeExpected(); this.setTypeExpected(1, TypeNames.INT); this.setTypeExpected(2, TypeNames.INT); this.setTypeExpected(3, TypeNames.STRING); HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(study.getId())); String sql = digester.getQuery("findHiddenCrfIdAndNamesBySite"); ArrayList alist = this.select(sql, variables); Iterator it = alist.iterator(); while (it.hasNext()) { HashMap hm = (HashMap) it.next(); ids.add(hm.get("study_event_definition_id") + "_" + hm.get("crf_id")); } return ids; } public Set<String> findHiddenCrfNamesBySite(StudyBean study) { Set<String> names = new TreeSet<String>(); this.unsetTypeExpected(); this.setTypeExpected(1, TypeNames.INT); this.setTypeExpected(2, TypeNames.INT); this.setTypeExpected(3, TypeNames.STRING); HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(study.getId())); String sql = digester.getQuery("findHiddenCrfIdAndNamesBySite"); ArrayList alist = this.select(sql, variables); Iterator it = alist.iterator(); while (it.hasNext()) { HashMap hm = (HashMap) it.next(); names.add(hm.get("study_event_definition_id") + "_" + hm.get("name")); } return names; } /** * Loads all {@link EventDefinitionCRFBean} associated to the list of * {@link StudyEventDefinitionBean} * * @return */ public Map<Integer, SortedSet<EventDefinitionCRFBean>> buildEventDefinitionCRFListByStudyEventDefinition(Integer studySubjectId, Integer siteId, Integer parentStudyId) { this.setTypesExpected(); // <== Must be called first HashMap<Integer, Object> param = new HashMap<Integer, Object>(); int i = 1; param.put(i++, studySubjectId); param.put(i++, siteId); param.put(i++, parentStudyId); param.put(i++, studySubjectId); param.put(i++, siteId); List selectResult = select(digester.getQuery("buildEventDefinitionCRFListByStudyEventDefinition"), param); Map<Integer, SortedSet<EventDefinitionCRFBean>> result = new HashMap<Integer, SortedSet<EventDefinitionCRFBean>>(); Iterator it = selectResult.iterator(); while (it.hasNext()) { EventDefinitionCRFBean bean = (EventDefinitionCRFBean) this.getEntityFromHashMap((HashMap) it.next()); Integer studyEventDefinitionId = bean.getStudyEventDefinitionId(); if (!result.containsKey(studyEventDefinitionId)) { result.put(studyEventDefinitionId, new TreeSet<EventDefinitionCRFBean>(new EventDefinitionCRFComparator())); } result.get(studyEventDefinitionId).add(bean); } return result; } public Map<Integer, SortedSet<EventDefinitionCRFBean>> buildEventDefinitionCRFListByStudyEventDefinitionForStudy(Integer studySubjectId) { this.setTypesExpected(); // <== Must be called first HashMap<Integer, Object> param = new HashMap<Integer, Object>(); int i = 1; param.put(i++, studySubjectId); List selectResult = select(digester.getQuery("buildEventDefinitionCRFListByStudyEventDefinitionForStudy"), param); Map<Integer, SortedSet<EventDefinitionCRFBean>> result = new HashMap<Integer, SortedSet<EventDefinitionCRFBean>>(); Iterator it = selectResult.iterator(); while (it.hasNext()) { EventDefinitionCRFBean bean = (EventDefinitionCRFBean) this.getEntityFromHashMap((HashMap) it.next()); Integer studyEventDefinitionId = bean.getStudyEventDefinitionId(); if (!result.containsKey(studyEventDefinitionId)) { result.put(studyEventDefinitionId, new TreeSet<EventDefinitionCRFBean>(new EventDefinitionCRFComparator())); } result.get(studyEventDefinitionId).add(bean); } return result; } private class EventDefinitionCRFComparator implements Comparator<EventDefinitionCRFBean> { @Override public int compare(EventDefinitionCRFBean o1, EventDefinitionCRFBean o2) { Integer ord1 = o1.getOrdinal(); Integer ord2 = o2.getOrdinal(); /* * There are DB entries with same ordinal, that cause one of the * beans to not be added to the set. To avoid that this method will * return -1 when comparing them. */ int comparison = ord1.compareTo(ord2); return comparison == 0 ? -1 : comparison; } } }