/*
* 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;
/**
* <P>
* StudyDAO.java, the data access object that users will access the database for
* study objects, tbh.
*
* @author thickerson
*
*
*/
import org.akaza.openclinica.bean.core.EntityBean;
import org.akaza.openclinica.bean.core.Status;
import org.akaza.openclinica.bean.managestudy.StudyBean;
import org.akaza.openclinica.bean.managestudy.StudyType;
import org.akaza.openclinica.dao.core.AuditableEntityDAO;
import org.akaza.openclinica.dao.core.CoreResources;
import org.akaza.openclinica.dao.core.DAODigester;
import org.akaza.openclinica.dao.core.SQLFactory;
import org.akaza.openclinica.dao.core.TypeNames;
import java.sql.Types;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Locale;
import javax.sql.DataSource;
public class StudyDAO <K extends String,V extends ArrayList> extends AuditableEntityDAO {
// private DataSource ds;
// private DAODigester digester;
public StudyDAO(DataSource ds) {
super(ds);
}
public StudyDAO(DataSource ds, DAODigester digester) {
super(ds);
this.digester = digester;
}
// This constructor sets up the Locale for JUnit tests; see the locale
// member variable in EntityDAO, and its initializeI18nStrings() method
public StudyDAO(DataSource ds, DAODigester digester, Locale locale) {
this(ds, digester);
this.locale = locale;
}
@Override
protected void setDigesterName() {
digesterName = SQLFactory.getInstance().DAO_STUDY;
}
@Override
public void setTypesExpected() {
// 1 study_id serial NOT NULL,
// 2 parent_study_id numeric,
// 3 unique_identifier varchar(30),
// 4 secondary_identifier varchar(255),
// 5 name varchar(60),
// 6 summary varchar(255),
// 7 date_planned_start date,
// 8 date_planned_end date,
// 9 date_created date,
// 10 date_updated date,
// 11 owner_id numeric,
// 12 update_id numeric,
// 13 type_id numeric,
// 14 status_id numeric,
// 15 principal_investigator varchar(255),
// 16 facility_name varchar(255),
// 17 facility_city varchar(255),
// 18 facility_state varchar(20),
// 19 facility_zip varchar(64),
// 20 facility_country varchar(64),
// 21 facility_recruitment_status varchar(60),
// 22 facility_contact_name varchar(255),
// 23 facility_contact_degree varchar(255),
// 24 facility_contact_phone varchar(255),
// 25 facility_contact_email varchar(255),
// 26 protocol_type varchar(30),
// 27 protocol_description varchar(1000),
// 28 protocol_date_verification date,
// 29 phase varchar(30),
// 30 expected_total_enrollment numeric,
// 31 sponsor varchar(255),
// 32 collaborators varchar(1000),
// 33 medline_identifier varchar(255),
// 34 url varchar(255),
// 35 url_description varchar(255),
// 36 conditions varchar(500),
// 37 keywords varchar(255),
// 38 eligibility varchar(500),
// 39 gender varchar(30),
// 40 age_max varchar(3),
// 41 age_min varchar(3),
// 42 healthy_volunteer_accepted bool,
// 43 purpose varchar(64),
// 44 allocation varchar(64),
// 45 masking varchar(30),
// 46 control varchar(30),
// 47 "assignment" varchar(30),
// 48 endpoint varchar(64),
// 49 interventions varchar(1000),
// 50 duration varchar(30),
// 51 selection varchar(30),
// 52 timing varchar(30),
// 53 official_title varchar(50)
// 54 results_reference boolean
this.unsetTypeExpected();
this.setTypeExpected(1, TypeNames.INT);// sid
this.setTypeExpected(2, TypeNames.INT);// parent id
this.setTypeExpected(3, TypeNames.STRING);// ident
this.setTypeExpected(4, TypeNames.STRING);// second ident
this.setTypeExpected(5, TypeNames.STRING);// name
this.setTypeExpected(6, TypeNames.STRING);// summary
this.setTypeExpected(7, TypeNames.DATE);// start
this.setTypeExpected(8, TypeNames.DATE);// end
this.setTypeExpected(9, TypeNames.DATE);// create
this.setTypeExpected(10, TypeNames.DATE);// update
this.setTypeExpected(11, TypeNames.INT);// owner
this.setTypeExpected(12, TypeNames.INT);// updater
this.setTypeExpected(13, TypeNames.INT);// type id
this.setTypeExpected(14, TypeNames.INT);// status
this.setTypeExpected(15, TypeNames.STRING);// pi
this.setTypeExpected(16, TypeNames.STRING);// fname
this.setTypeExpected(17, TypeNames.STRING);// fcity
this.setTypeExpected(18, TypeNames.STRING);// fstate
this.setTypeExpected(19, TypeNames.STRING);// fzip
this.setTypeExpected(20, TypeNames.STRING);// country
this.setTypeExpected(21, TypeNames.STRING);// frs
this.setTypeExpected(22, TypeNames.STRING);// fcn
this.setTypeExpected(23, TypeNames.STRING);// fcdegree
this.setTypeExpected(24, TypeNames.STRING);// fcphone
this.setTypeExpected(25, TypeNames.STRING);// fcemail
this.setTypeExpected(26, TypeNames.STRING);// prottype
this.setTypeExpected(27, TypeNames.STRING);// protdesc
this.setTypeExpected(28, TypeNames.DATE);// pdateverif
this.setTypeExpected(29, TypeNames.STRING);// phase
this.setTypeExpected(30, TypeNames.INT);// expectotenroll
// this.setTypeExpected(31, TypeNames.BOOL);//genetic
this.setTypeExpected(31, TypeNames.STRING);// sponsor
this.setTypeExpected(32, TypeNames.STRING);// collab
this.setTypeExpected(33, TypeNames.STRING);// medline
this.setTypeExpected(34, TypeNames.STRING);// url
this.setTypeExpected(35, TypeNames.STRING);// url-desc
this.setTypeExpected(36, TypeNames.STRING);// conds
this.setTypeExpected(37, TypeNames.STRING);// keyw
this.setTypeExpected(38, TypeNames.STRING);// eligible
this.setTypeExpected(39, TypeNames.STRING);// gender, no char avail.
this.setTypeExpected(40, TypeNames.STRING);// agemax
this.setTypeExpected(41, TypeNames.STRING);// agemin
this.setTypeExpected(42, TypeNames.BOOL);// healthy volunteer
this.setTypeExpected(43, TypeNames.STRING);// purpose
this.setTypeExpected(44, TypeNames.STRING);// allocation
this.setTypeExpected(45, TypeNames.STRING);// masking
this.setTypeExpected(46, TypeNames.STRING);// control
this.setTypeExpected(47, TypeNames.STRING);// assignment
this.setTypeExpected(48, TypeNames.STRING);// endpoint
this.setTypeExpected(49, TypeNames.STRING);// interv
this.setTypeExpected(50, TypeNames.STRING);// duration
this.setTypeExpected(51, TypeNames.STRING);// selection
this.setTypeExpected(52, TypeNames.STRING);// timing
this.setTypeExpected(53, TypeNames.STRING);// official_title
this.setTypeExpected(54, TypeNames.BOOL);// results_reference
this.setTypeExpected(55, TypeNames.STRING);// oc oid
// this.setTypeExpected(56, TypeNames.BOOL);//discrepancy_management
this.setTypeExpected(56, TypeNames.INT);
}
/**
* <b>update </b>, the method that returns an updated study bean after it
* updates the database. Note that we can use the three stages from our
* creation use case.
*
* @return sb an updated study bean.
*/
public EntityBean update(EntityBean eb) {
StudyBean sb = (StudyBean) eb;
sb = this.updateStepOne(sb);
sb = this.createStepTwo(sb);
sb = this.createStepThree(sb);
sb = this.createStepFour(sb);
return sb;
}
/**
* <P>
* updateStepOne, the update method for the database. This method takes the
* place of createStepOne, since it runs an update and assumes you already
* have a primary key in the study bean object.
*
* @param sb
* the study bean which will be updated.
* @return sb the study bean after it is updated with this phase.
*/
public StudyBean updateStepOne(StudyBean sb) {
HashMap variables = new HashMap();
HashMap nullVars = new HashMap();
if (sb.getParentStudyId() == 0) {
nullVars.put(new Integer(1), new Integer(Types.INTEGER));
variables.put(new Integer(1), null);
} else {
variables.put(new Integer(1), new Integer(sb.getParentStudyId()));
}
variables.put(new Integer(2), sb.getName());
variables.put(new Integer(3), sb.getOfficialTitle());
variables.put(new Integer(4), sb.getIdentifier());
variables.put(new Integer(5), sb.getSecondaryIdentifier());
variables.put(new Integer(6), sb.getSummary());
variables.put(new Integer(7), sb.getPrincipalInvestigator());
if (sb.getDatePlannedStart() == null) {
nullVars.put(new Integer(8), new Integer(Types.DATE));
variables.put(new Integer(8), null);
} else {
variables.put(new Integer(8), sb.getDatePlannedStart());
}
if (sb.getDatePlannedEnd() == null) {
nullVars.put(new Integer(9), new Integer(Types.DATE));
variables.put(new Integer(9), null);
} else {
variables.put(new Integer(9), sb.getDatePlannedEnd());
}
variables.put(new Integer(10), sb.getFacilityName());
variables.put(new Integer(11), sb.getFacilityCity());
variables.put(new Integer(12), sb.getFacilityState());
variables.put(new Integer(13), sb.getFacilityZip());
variables.put(new Integer(14), sb.getFacilityCountry());
variables.put(new Integer(15), sb.getFacilityRecruitmentStatus());
variables.put(new Integer(16), sb.getFacilityContactName());
variables.put(new Integer(17), sb.getFacilityContactDegree());
variables.put(new Integer(18), sb.getFacilityContactPhone());
variables.put(new Integer(19), sb.getFacilityContactEmail());
variables.put(new Integer(20), new Integer(sb.getStatus().getId()));// status
// id
// variables.put(new Integer(19), sb.getStatus())//need to get a
// function
// to get the id
// variables.put(new Integer(19), sb.getCreatedDate());
variables.put(new Integer(21), new Integer(sb.getUpdaterId()));// owner
// id
variables.put(new Integer(22), sb.getUpdatedDate());// date updated
variables.put(new Integer(23), new Integer(sb.getOldStatus().getId()));// study id
// variables.put(new Integer(22), new Integer(1));
// stop gap measure for owner and updater id
variables.put(new Integer(24), new Integer(sb.getId()));// study id
this.execute(digester.getQuery("updateStepOne"), variables, nullVars);
return sb;
}
/**
* <b>create </b>, the method that creates a study in the database.
* <P>
* note: create is split up into four custom functions, per the use case; we
* are creating the standard create function here which calls all four
* functions at once, but the seperate functions may be required in the
* control servlets.
*
* @return eb the created entity bean.
*/
public EntityBean create(EntityBean eb) {
StudyBean sb = (StudyBean) eb;
sb = this.createStepOne(sb);
// in the above step, we will have created a primary key,
// and in the next steps, we update the study bean
// in phases
sb = this.createStepTwo(sb);
sb = this.createStepThree(sb);
sb = this.createStepFour(sb);
return sb;
}
/**
* <P>
* findNextKey, a method to return a simple int from the database.
*
* @return int, which is the next primary key for creating a study.
*/
public int findNextKey() {
this.unsetTypeExpected();
Integer keyInt = new Integer(0);
this.setTypeExpected(1, TypeNames.INT);
ArrayList alist = this.select(digester.getQuery("findNextKey"));
Iterator it = alist.iterator();
if (it.hasNext()) {
HashMap key = (HashMap) it.next();
keyInt = (Integer) key.get("key");
}
return keyInt.intValue();
}
/**
* <P>
* createStepOne, per the 'Detailed use case for administer system document
* v1.0rc1' document. We insert the study in this method, and then update
* the same study in the next three steps.
* <P>
* The next three steps, by the way, can then be used to update studies as
* well.
*
* @param sb
* Study bean about to be created.
* @return same study bean with a primary key in the ID field.
*/
public StudyBean createStepOne(StudyBean sb) {
HashMap variables = new HashMap();
HashMap nullVars = new HashMap();
sb.setId(this.findNextKey());
variables.put(new Integer(1), new Integer(sb.getId()));
if (sb.getParentStudyId() == 0) {
nullVars.put(new Integer(2), new Integer(Types.INTEGER));
variables.put(new Integer(2), null);
} else {
variables.put(new Integer(2), new Integer(sb.getParentStudyId()));
}
variables.put(new Integer(3), sb.getName());
variables.put(new Integer(4), sb.getOfficialTitle());
variables.put(new Integer(5), sb.getIdentifier());
variables.put(new Integer(6), sb.getSecondaryIdentifier());
variables.put(new Integer(7), sb.getSummary());
variables.put(new Integer(8), sb.getPrincipalInvestigator());
if (sb.getDatePlannedStart() == null) {
nullVars.put(new Integer(9), new Integer(Types.DATE));
variables.put(new Integer(9), null);
} else {
variables.put(new Integer(9), sb.getDatePlannedStart());
}
if (sb.getDatePlannedEnd() == null) {
nullVars.put(new Integer(10), new Integer(Types.DATE));
variables.put(new Integer(10), null);
} else {
variables.put(new Integer(10), sb.getDatePlannedEnd());
}
variables.put(new Integer(11), sb.getFacilityName());
variables.put(new Integer(12), sb.getFacilityCity());
variables.put(new Integer(13), sb.getFacilityState());
variables.put(new Integer(14), sb.getFacilityZip());
variables.put(new Integer(15), sb.getFacilityCountry());
variables.put(new Integer(16), sb.getFacilityRecruitmentStatusKey());
variables.put(new Integer(17), sb.getFacilityContactName());
variables.put(new Integer(18), sb.getFacilityContactDegree());
variables.put(new Integer(19), sb.getFacilityContactPhone());
variables.put(new Integer(20), sb.getFacilityContactEmail());
variables.put(new Integer(21), new Integer(sb.getStatus().getId()));
// variables.put(new Integer(19), sb.getStatus())//need to get a
// function
// to get the id
variables.put(new Integer(22), new java.util.Date());
variables.put(new Integer(23), new Integer(sb.getOwnerId()));
variables.put(new Integer(24), getValidOid(sb));
// replace this with the owner id
this.execute(digester.getQuery("createStepOne"), variables, nullVars);
return sb;
}
// we are generating and creating the valid oid at step one, tbh
private String getOid(StudyBean sb) {
String oid;
try {
oid = sb.getOid() != null ? sb.getOid() : sb.getOidGenerator().generateOid(sb.getIdentifier());
return oid;
} catch (Exception e) {
throw new RuntimeException("CANNOT GENERATE OID");
}
}
private String getValidOid(StudyBean sb) {
String oid = getOid(sb);
logger.info("*** " + oid);
String oidPreRandomization = oid;
while (findByOid(oid) != null) {
oid = sb.getOidGenerator().randomizeOid(oidPreRandomization);
}
logger.info("returning the following oid: " + oid);
return oid;
}
public StudyBean findByOid(String oid) {
StudyBean sb = null;
this.unsetTypeExpected();
this.setTypesExpected();
HashMap variables = new HashMap();
variables.put(new Integer(1), oid);
ArrayList alist = this.select(digester.getQuery("findByOid"), variables);
Iterator it = alist.iterator();
if (it.hasNext()) {
sb = (StudyBean) this.getEntityFromHashMap((HashMap) it.next());
return sb;
} else {
logger.info("returning null from find by oid...");
return null;
}
}
public StudyBean findByUniqueIdentifier(String oid) {
StudyBean sb = null;
this.unsetTypeExpected();
this.setTypesExpected();
HashMap variables = new HashMap();
variables.put(new Integer(1), oid);
ArrayList alist = this.select(digester.getQuery("findByUniqueIdentifier"), variables);
Iterator it = alist.iterator();
if (it.hasNext()) {
sb = (StudyBean) this.getEntityFromHashMap((HashMap) it.next());
return sb;
} else {
logger.info("returning null from find by Unique Identifier...");
return null;
}
}
public StudyBean findSiteByUniqueIdentifier(String parentUniqueIdentifier, String siteUniqueIdentifier) {
StudyBean sb = null;
this.unsetTypeExpected();
this.setTypesExpected();
HashMap variables = new HashMap();
variables.put(new Integer(1), parentUniqueIdentifier);
variables.put(new Integer(2), siteUniqueIdentifier);
ArrayList alist = this.select(digester.getQuery("findSiteByUniqueIdentifier"), variables);
Iterator it = alist.iterator();
if (it.hasNext()) {
sb = (StudyBean) this.getEntityFromHashMap((HashMap) it.next());
return sb;
} else {
logger.info("returning null from find by Unique Identifier...");
return null;
}
}
public StudyBean createStepTwo(StudyBean sb) {
// UPDATE STUDY SET TYPE_ID=?, PROTOCOL_TYPE=?,PROTOCOL_DESCRIPTION=?,
// PROTOCOL_DATE_VERIFICATION=?, PHASE=?, EXPECTED_TOTAL_ENROLLMENT=?,
// SPONSOR=?, COLLABORATORS=?, MEDLINE_IDENTIFIER=?, URL=?,
// URL_DESCRIPTION=?, CONDITIONS=?, KEYWORDS=?, ELIGIBILITY=?,
// GENDER=?, AGE_MAX=?, AGE_MIN=?, HEALTHY_VOLUNTEER_ACCEPTED=?
// WHERE STUDY_ID=?
HashMap variables = new HashMap();
HashMap nullVars = new HashMap();
variables.put(new Integer(1), new Integer(sb.getType().getId()));
variables.put(new Integer(2), sb.getProtocolTypeKey());
variables.put(new Integer(3), sb.getProtocolDescription());
if (sb.getProtocolDateVerification() == null) {
nullVars.put(new Integer(4), new Integer(Types.DATE));
variables.put(new Integer(4), null);
} else {
variables.put(new Integer(4), sb.getProtocolDateVerification());
}
variables.put(new Integer(5), sb.getPhaseKey());
variables.put(new Integer(6), new Integer(sb.getExpectedTotalEnrollment()));
variables.put(new Integer(7), sb.getSponsor());
variables.put(new Integer(8), sb.getCollaborators());
variables.put(new Integer(9), sb.getMedlineIdentifier());
variables.put(new Integer(10), new Boolean(sb.isResultsReference()));
variables.put(new Integer(11), sb.getUrl());
variables.put(new Integer(12), sb.getUrlDescription());
variables.put(new Integer(13), sb.getConditions());
variables.put(new Integer(14), sb.getKeywords());
variables.put(new Integer(15), sb.getEligibility());
variables.put(new Integer(16), sb.getGenderKey());
variables.put(new Integer(17), sb.getAgeMax());
variables.put(new Integer(18), sb.getAgeMin());
variables.put(new Integer(19), new Boolean(sb.getHealthyVolunteerAccepted()));
// variables.put(new Integer(20), new Boolean(sb.isUsingDOB()));
// variables.put(new Integer(21), new
// Boolean(sb.isDiscrepancyManagement()));
variables.put(new Integer(20), new Integer(sb.getId()));
this.execute(digester.getQuery("createStepTwo"), variables, nullVars);
return sb;
}
public StudyBean createStepThree(StudyBean sb) {
HashMap variables = new HashMap();
variables.put(new Integer(1), sb.getPurposeKey());
variables.put(new Integer(2), sb.getAllocationKey());
variables.put(new Integer(3), sb.getMaskingKey());
variables.put(new Integer(4), sb.getControlKey());
variables.put(new Integer(5), sb.getAssignmentKey());
variables.put(new Integer(6), sb.getEndpointKey());
variables.put(new Integer(7), sb.getInterventionsKey());
variables.put(new Integer(8), new Integer(sb.getId()));
this.execute(digester.getQuery("createStepThree"), variables);
return sb;
}
public StudyBean createStepFour(StudyBean sb) {
HashMap variables = new HashMap();
variables.put(new Integer(1), sb.getDurationKey());
variables.put(new Integer(2), sb.getSelectionKey());
variables.put(new Integer(3), sb.getTimingKey());
variables.put(new Integer(4), new Integer(sb.getId()));
this.execute(digester.getQuery("createStepFour"), variables);
return sb;
}
/*
* public HashMap fillVariables(StudyBean sb) { HashMap variables = new
* HashMap(); variables.put(new Integer(1),new
* Integer(sb.getParentStudyId())); variables.put(new
* Integer(2),sb.getLabel()); return variables; }
*/
/**
* <p>
* getEntityFromHashMap, the method that gets the object from the database
* query.
*/
public Object getEntityFromHashMap(HashMap hm) {
StudyBean eb = new StudyBean();
// first set all the strings
eb.setIdentifier((String) hm.get("unique_identifier"));
eb.setName((String) hm.get("name"));
eb.setSummary((String) hm.get("summary"));
eb.setSecondaryIdentifier((String) hm.get("secondary_identifier"));
eb.setPrincipalInvestigator((String) hm.get("principal_investigator"));
eb.setFacilityName((String) hm.get("facility_name"));
eb.setFacilityCity((String) hm.get("facility_city"));
eb.setFacilityState((String) hm.get("facility_state"));
eb.setFacilityZip((String) hm.get("facility_zip"));
eb.setFacilityCountry((String) hm.get("facility_country"));
eb.setFacilityRecruitmentStatus((String) hm.get("facility_recruitment_status"));
eb.setFacilityContactName((String) hm.get("facility_contact_name"));
eb.setFacilityContactDegree((String) hm.get("facility_contact_degree"));
eb.setFacilityContactPhone((String) hm.get("facility_contact_phone"));
eb.setFacilityContactEmail((String) hm.get("facility_contact_email"));
eb.setProtocolType((String) hm.get("protocol_type"));
eb.setProtocolDescription((String) hm.get("protocol_description"));
eb.setPhase((String) hm.get("phase"));
eb.setSponsor((String) hm.get("sponsor"));
eb.setCollaborators((String) hm.get("collaborators"));
eb.setMedlineIdentifier((String) hm.get("medline_identifier"));
eb.setUrl((String) hm.get("url"));
eb.setUrlDescription((String) hm.get("url_description"));
eb.setConditions((String) hm.get("conditions"));
eb.setKeywords((String) hm.get("keywords"));
eb.setEligibility((String) hm.get("eligibility"));
String gender = (String) hm.get("gender");
// char[] genderarr = gender.toCharArray();
// Character gender = (Character)hm.get("gender");
// eb.setGender(gender.charValue());//CHAR?
eb.setGender(gender);
// throws null pointer exception?
eb.setAgeMax((String) hm.get("age_max"));
eb.setAgeMin((String) hm.get("age_min"));
eb.setPurpose((String) hm.get("purpose"));
eb.setAllocation((String) hm.get("allocation"));
eb.setMasking((String) hm.get("masking"));
eb.setControl((String) hm.get("control"));
eb.setAssignment((String) hm.get("assignment"));
eb.setEndpoint((String) hm.get("endpoint"));
eb.setInterventions((String) hm.get("interventions"));
eb.setDuration((String) hm.get("duration"));
eb.setSelection((String) hm.get("selection"));
eb.setTiming((String) hm.get("timing"));
eb.setOfficialTitle((String) hm.get("official_title"));
eb.setHealthyVolunteerAccepted(((Boolean) hm.get("healthy_volunteer_accepted")).booleanValue());
eb.setResultsReference(((Boolean) hm.get("results_reference")).booleanValue());
// eb.setUsingDOB(((Boolean)hm.get("collect_dob")).booleanValue());
//eb.setDiscrepancyManagement(((Boolean)hm.get("discrepancy_management")
// ).booleanValue());
// next set all the ints/dates
Integer studyId = (Integer) hm.get("study_id");
eb.setId(studyId.intValue());
Integer parentStudyId = (Integer) hm.get("parent_study_id");
if (parentStudyId == null) {
eb.setParentStudyId(0);
} else {
eb.setParentStudyId(parentStudyId.intValue());
}
Integer ownerId = (Integer) hm.get("owner_id");
eb.setOwnerId(ownerId.intValue());
Integer updateId = (Integer) hm.get("update_id");
eb.setUpdaterId(updateId.intValue());
Integer typeId = (Integer) hm.get("type_id");
eb.setType(StudyType.get(typeId.intValue()));
Integer statusId = (Integer) hm.get("status_id");
eb.setStatus(Status.get(statusId.intValue()));
Integer expecTotalEnrollment = (Integer) hm.get("expected_total_enrollment");
eb.setExpectedTotalEnrollment(expecTotalEnrollment.intValue());
Date dateCreated = (Date) hm.get("date_created");
Date dateUpdated = (Date) hm.get("date_updated");
Date datePlannedStart = (Date) hm.get("date_planned_start");
Date datePlannedEnd = (Date) hm.get("date_planned_end");
Date dateProtocolVerification = (Date) hm.get("protocol_date_verification");
eb.setCreatedDate(dateCreated);
eb.setUpdatedDate(dateUpdated);
eb.setDatePlannedStart(datePlannedStart);
eb.setDatePlannedEnd(datePlannedEnd);
eb.setProtocolDateVerification(dateProtocolVerification);// added by
// jxu
eb.setStatus(Status.get(statusId.intValue()));
eb.setOid((String) hm.get("oc_oid"));
Integer oldStatusId = (Integer) hm.get("old_status_id");
eb.setOldStatus(Status.get(oldStatusId));
return eb;
}
public Collection findAllByUser(String username) {
this.unsetTypeExpected();
this.setTypesExpected();
HashMap variables = new HashMap();
variables.put(new Integer(1), username);
ArrayList alist = this.select(digester.getQuery("findAllByUser"), variables);
ArrayList al = new ArrayList();
Iterator it = alist.iterator();
while (it.hasNext()) {
StudyBean eb = (StudyBean) this.getEntityFromHashMap((HashMap) it.next());
al.add(eb);
}
return al;
}
public ArrayList<Integer> getStudyIdsByCRF(int crfId) {
this.unsetTypeExpected();
this.setTypeExpected(1, TypeNames.INT);
HashMap<Integer, Integer> variables = new HashMap<Integer, Integer>();
variables.put(1, crfId);
ArrayList alist = this.select(digester.getQuery("getStudyIdsByCRF"), variables);
ArrayList<Integer> al = new ArrayList<Integer>();
Iterator it = alist.iterator();
while (it.hasNext()) {
HashMap h = (HashMap) it.next();
al.add((Integer) h.get("study_id"));
}
return al;
}
// YW 10-18-2007
public Collection findAllByUserNotRemoved(String username) {
this.unsetTypeExpected();
this.setTypesExpected();
HashMap variables = new HashMap();
variables.put(new Integer(1), username);
ArrayList alist = this.select(digester.getQuery("findAllByUserNotRemoved"), variables);
ArrayList al = new ArrayList();
Iterator it = alist.iterator();
while (it.hasNext()) {
StudyBean eb = (StudyBean) this.getEntityFromHashMap((HashMap) it.next());
al.add(eb);
}
return al;
}
public ArrayList findAllByStatus(Status status) {
this.unsetTypeExpected();
this.setTypesExpected();
HashMap variables = new HashMap();
variables.put(new Integer(1), new Integer(status.getId()));
String sql = digester.getQuery("findAllByStatus");
ArrayList alist = this.select(sql, variables);
ArrayList al = new ArrayList();
Iterator it = alist.iterator();
while (it.hasNext()) {
StudyBean eb = (StudyBean) this.getEntityFromHashMap((HashMap) it.next());
al.add(eb);
}
return al;
}
public Collection findAll() {
return findAllByLimit(false);
}
public Collection findAllByLimit(boolean isLimited) {
this.setTypesExpected();
String sql = null;
// Updated for ORACLE and PGSQL compatibility
if (isLimited) {
if (CoreResources.getDBName().equals("oracle")) {
sql = digester.getQuery("findAll") + " where ROWNUM <=5";
} else {
sql = digester.getQuery("findAll") + " limit 5";
}
} else {
sql = digester.getQuery("findAll");
}
ArrayList alist = this.select(sql);
ArrayList al = new ArrayList();
Iterator it = alist.iterator();
while (it.hasNext()) {
StudyBean eb = (StudyBean) this.getEntityFromHashMap((HashMap) it.next());
al.add(eb);
}
return al;
}
public Collection findAllParents() {
this.setTypesExpected();
String sql = digester.getQuery("findAllParents");
ArrayList alist = this.select(sql);
ArrayList al = new ArrayList();
Iterator it = alist.iterator();
while (it.hasNext()) {
StudyBean eb = (StudyBean) this.getEntityFromHashMap((HashMap) it.next());
al.add(eb);
}
return al;
}
/**
* isAParent(), finds out whether or not a study is a parent.
*
* @return a boolean
*/
public boolean isAParent(int studyId) {
boolean ret = false;
Collection col = findAllByParent(studyId);
if (col != null && col.size() > 0) {
ret = true;
}
return ret;
}
public Collection findAllByParent(int parentStudyId) {
return findAllByParentAndLimit(parentStudyId, false);
}
public Collection findAllByParentAndLimit(int parentStudyId, boolean isLimited) {
this.setTypesExpected();
HashMap variables = new HashMap();
variables.put(new Integer(1), new Integer(parentStudyId));
ArrayList alist = null;
if (isLimited) {
alist = this.select(digester.getQuery("findAllByParentLimit5"), variables);
} else {
alist = this.select(digester.getQuery("findAllByParent"), variables);
}
ArrayList al = new ArrayList();
Iterator it = alist.iterator();
while (it.hasNext()) {
StudyBean eb = (StudyBean) this.getEntityFromHashMap((HashMap) it.next());
al.add(eb);
}
return al;
}
public Collection findAll(int studyId) {
this.setTypesExpected();
HashMap variables = new HashMap();
variables.put(new Integer(1), new Integer(studyId));
variables.put(new Integer(2), new Integer(studyId));
ArrayList alist = null;
alist = this.select(digester.getQuery("findAllByStudyId"), variables);
ArrayList al = new ArrayList();
Iterator it = alist.iterator();
while (it.hasNext()) {
StudyBean eb = (StudyBean) this.getEntityFromHashMap((HashMap) it.next());
al.add(eb);
}
return al;
}
public Collection findAll(String strOrderByColumn, boolean blnAscendingSort, String strSearchPhrase) {
ArrayList al = new ArrayList();
return al;
}
public EntityBean findByPK(int ID) {
StudyBean eb = new StudyBean();
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 = (StudyBean) this.getEntityFromHashMap((HashMap) it.next());
}
return eb;
}
/*
* added 02/2008, tbh
*/
public EntityBean findByName(String name) {
StudyBean eb = new StudyBean();
this.setTypesExpected();
HashMap variables = new HashMap();
variables.put(new Integer(1), name);
String sql = digester.getQuery("findByName");
ArrayList alist = this.select(sql, variables);
Iterator it = alist.iterator();
if (it.hasNext()) {
eb = (StudyBean) this.getEntityFromHashMap((HashMap) it.next());
}
return eb;
}
/**
* deleteTestOnly, used only to clean up after unit testing
*
* @param name
*/
public void deleteTestOnly(String name) {
HashMap variables = new HashMap();
variables.put(new Integer(1), name);
this.execute(digester.getQuery("deleteTestOnly"), variables);
}
public Collection findAllByPermission(Object objCurrentUser, int intActionType, String strOrderByColumn, boolean blnAscendingSort, String strSearchPhrase) {
ArrayList al = new ArrayList();
return al;
}
public Collection findAllByPermission(Object objCurrentUser, int intActionType) {
ArrayList al = new ArrayList();
return al;
}
/**
* Only for use by getChildrenByParentIds
*
* @param answer
* @param parentId
* @param child
* @return
*/
private HashMap addChildToParent(HashMap answer, int parentId, StudyBean child) {
Integer key = new Integer(parentId);
ArrayList children = (ArrayList) answer.get(key);
if (children == null) {
children = new ArrayList();
}
children.add(child);
answer.put(key, children);
return answer;
}
/**
* @param allStudies
* The result of findAll().
* @return A HashMap where the keys are Integers whose intValue are studyIds
* and the values are ArrayLists; each element of the ArrayList is a
* StudyBean representing a child of the study whose id is the key
* <p>
* e.g., if A has children B and C, then this will return a HashMap
* h where h.get(A.getId()) returns an ArrayList whose elements are
* B and C
*/
public HashMap getChildrenByParentIds(ArrayList allStudies) {
HashMap answer = new HashMap();
if (allStudies == null) {
return answer;
}
for (int i = 0; i < allStudies.size(); i++) {
StudyBean study = (StudyBean) allStudies.get(i);
int parentStudyId = study.getParentStudyId();
if (parentStudyId > 0) { // study is a child
answer = addChildToParent(answer, parentStudyId, study);
}
}
return answer;
}
public Collection<Integer> findAllSiteIdsByStudy(StudyBean study) {
this.unsetTypeExpected();
this.setTypeExpected(1, TypeNames.INT);// sid
HashMap<Integer, Integer> variables = new HashMap<Integer, Integer>();
variables.put(new Integer(1), new Integer(study.getId()));
variables.put(new Integer(2), new Integer(study.getId()));
ArrayList alist = this.select(digester.getQuery("findAllSiteIdsByStudy"), variables);
ArrayList<Integer> al = new ArrayList<Integer>();
Iterator it = alist.iterator();
while (it.hasNext()) {
HashMap h = (HashMap) it.next();
al.add((Integer) h.get("study_id"));
}
return al;
}
public Collection<Integer> findOlnySiteIdsByStudy(StudyBean study) {
this.unsetTypeExpected();
this.setTypeExpected(1, TypeNames.INT);// sid
HashMap<Integer, Integer> variables = new HashMap<Integer, Integer>();
variables.put(new Integer(1), new Integer(study.getId()));
ArrayList alist = this.select(digester.getQuery("findOlnySiteIdsByStudy"), variables);
ArrayList<Integer> al = new ArrayList<Integer>();
Iterator it = alist.iterator();
while (it.hasNext()) {
HashMap h = (HashMap) it.next();
al.add((Integer) h.get("study_id"));
}
return al;
}
public StudyBean updateSitesStatus(StudyBean sb) {
HashMap variables = new HashMap();
HashMap nullVars = new HashMap();
variables.put(new Integer(1), sb.getStatus().getId());
variables.put(new Integer(2), sb.getOldStatus().getId());
variables.put(new Integer(3), sb.getId());
this.execute(digester.getQuery("updateSitesStatus"), variables, nullVars);
return sb;
}
public StudyBean updateStudyStatus(StudyBean sb) {
HashMap variables = new HashMap();
HashMap nullVars = new HashMap();
variables.put(new Integer(1), sb.getStatus().getId());
variables.put(new Integer(2), sb.getOldStatus().getId());
variables.put(new Integer(3), sb.getId());
this.execute(digester.getQuery("updateStudyStatus"), variables, nullVars);
return sb;
}
public StudyBean findByStudySubjectId(int studySubjectId) {
StudyBean sb = new StudyBean();
HashMap variables = new HashMap();
this.setTypesExpected();
variables.put(new Integer(1), studySubjectId);
// >> tbh
// String sql = digester.getQuery("findByStudySubjectId");
// ArrayList alist = this.select(sql, variables);
// Iterator it = alist.iterator();
// if (it.hasNext()) {
// sb = (StudyBean) this.getEntityFromHashMap((HashMap) it.next());
// }
// was not returning anything?
ArrayList alist = this.select(digester.getQuery("findByStudySubjectId"), variables);
Iterator it = alist.iterator();
if (it.hasNext()) {
sb = (StudyBean) this.getEntityFromHashMap((HashMap) it.next());
}
return sb;
}
public Collection findAllByParentStudyIdOrderedByIdAsc(int parentStudyId) {
this.setTypesExpected();
HashMap variables = new HashMap();
variables.put(new Integer(1), new Integer(parentStudyId));
variables.put(new Integer(2), new Integer(parentStudyId));
ArrayList alist = this.select(digester.getQuery("findAllByParentStudyIdOrderedByIdAsc"), variables);
ArrayList al = new ArrayList();
Iterator it = alist.iterator();
while (it.hasNext()) {
StudyBean eb = (StudyBean) this.getEntityFromHashMap((HashMap) it.next());
al.add(eb);
}
return al;
}
}