/*
* 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
*
* Created on Feb 23, 2005
*/
package org.akaza.openclinica.bean.extract;
import org.akaza.openclinica.bean.core.EntityBean;
import org.akaza.openclinica.bean.managestudy.StudyEventBean;
import java.util.Date;
import java.util.HashMap;
/**
* A study subject object for extracting data module
*
* @author ssachs
*/
public class ExtractStudySubjectBean extends EntityBean {
private String studyProtocolId;
private String siteUniqueIdentifier;
private Date dateOfBirth;
private String gender;
private String yearOfBirth;
private HashMap studyEvents = new HashMap();
/**
* Key is String comprised of studyEventDefinitionId + "-" + sampleNum + "-" +
* crfVersionId + "-" + itemId. (sampleNum goes from 1 to numSamples; it is
* drawn from the values of numSamplesByStudyEventDefinitionAndDBOrdinal)
* Value is String with corresponding item's value.
*/
private HashMap itemValues = new HashMap();
/**
* Key is String comprised of studyEventDefinitionId + "-" + dbOrdinal
* (Note: dbOrdinal is a value drawn from the db; this indicates the number
* of events the subject has, regardless of the study event def.) Value is
* Integer whose intValue represents the sampleNum which corresponds to the
* StudyEventDefinition/dbOrdinal combination.
*/
private HashMap sampleNumByStudyEventDefinitionAndDBOrdinal = new HashMap();
/**
* Key is an Integer whose intValue() is a studyEventDefinitionId Value is
* Integer whose intValue() represents the number of events the studySubject
* has for the given event def.
*/
private HashMap numSamplesByStudyEventDefinition = new HashMap();
/**
* For SPSS coding; we generate a var-label listing for name and study label
* that will be populated by a numeric id when an SPSS set of files is
* generated by the system.
*
*/
private int intNameResultSet = 0;
private int intLabelResultSet = 0;
public ExtractStudySubjectBean() {
itemValues = new HashMap();
studyProtocolId = "";
siteUniqueIdentifier = "";
}
/**
* Generates the study label as it should be formatted.
*
* @return <code>studyProtocolId</code> if
* <code>siteUniqueIdentifier.equals("")</code>,
* <code>studyProtocolId + "-" + siteUniqueIdentifier</code>
* otherwise.
*/
public String getStudyLabel() {
if (this.siteUniqueIdentifier.equals("")) {
return this.studyProtocolId;
} else {
return this.studyProtocolId + "-" + this.siteUniqueIdentifier;
}
}
public StudyEventBean getStudyEvent(int studyEventDefinitionId, int sampleOrdinal) {
String key = getStudyEventsKey(studyEventDefinitionId, sampleOrdinal);
if (studyEvents.containsKey(key)) {
return (StudyEventBean) studyEvents.get(key);
} else {
return new StudyEventBean();
}
}
private String getItemValuesKey(int studyEventDefinitionId, int sampleNum, int crfVersionId, int itemId) {
return studyEventDefinitionId + "-" + sampleNum + "-" + crfVersionId + "-" + itemId;
}
private int getSampleNum(int studyEventDefinitionId, int dbOrdinal) {
String key = studyEventDefinitionId + "-" + dbOrdinal;
Integer sampleNum;
if (!sampleNumByStudyEventDefinitionAndDBOrdinal.containsKey(key)) {
int numSamples = getNumSamples(studyEventDefinitionId);
sampleNum = new Integer(numSamples + 1);
sampleNumByStudyEventDefinitionAndDBOrdinal.put(key, sampleNum);
Integer numSamplesKey = new Integer(studyEventDefinitionId);
numSamplesByStudyEventDefinition.put(numSamplesKey, sampleNum);
} else {
sampleNum = (Integer) sampleNumByStudyEventDefinitionAndDBOrdinal.get(key);
}
return sampleNum == null ? 0 : sampleNum.intValue();
}
/**
* Adds a study event for the subject.
*
* @param location
* @param start
* @param end
* @return
*/
public StudyEventBean addStudyEvent(ExtractStudyEventDefinitionBean sedb, Integer idObj, String location, Date start, Date end, Integer dbOrdinalObj) {
StudyEventBean seb = new StudyEventBean();
if (idObj == null || location == null || start == null || end == null || dbOrdinalObj == null) {
return seb;
}
int id = idObj.intValue();
int dbOrdinal = dbOrdinalObj.intValue();
seb.setLocation(location);
seb.setDateStarted(start);
seb.setDateStarted(end);
seb.setId(id);
seb.setSampleOrdinal(dbOrdinal);
int sampleNum = getSampleNum(sedb.getId(), dbOrdinal);
String key = getStudyEventsKey(sedb.getId(), sampleNum);
studyEvents.put(key, seb);
return seb;
}
public String getStudyEventsKey(int studyEventId, int sampleNum) {
return studyEventId + "-" + sampleNum;
}
/**
* Adds an item value for the subject.
*
* @param sedb
* @param dbOrdinalObj
* @param crfVersionIdObj
* @param itemIdObj
* @param itemValue
*/
public void addValue(ExtractStudyEventDefinitionBean sedb, Integer dbOrdinalObj, Integer crfVersionIdObj, Integer itemIdObj, String itemValue) {
if (sedb == null || dbOrdinalObj == null || crfVersionIdObj == null || itemIdObj == null) {
return;
}
int dbOrdinal = dbOrdinalObj.intValue();
int crfVersionId = crfVersionIdObj.intValue();
int itemId = itemIdObj.intValue();
int sampleNum = getSampleNum(sedb.getId(), dbOrdinal);
String key = getItemValuesKey(sedb.getId(), crfVersionId, sampleNum, itemId);
itemValues.put(key, itemValue);
}
/**
* @param studyEventDefinitionId
* @param sampleOrdinal
* @param crfVersionId
* @param itemId
* @return The item value, if the subject has it, and "", otherwise.
*/
public String getValue(int studyEventDefinitionId, int sampleOrdinal, int crfVersionId, int itemId) {
String key = getItemValuesKey(studyEventDefinitionId, crfVersionId, sampleOrdinal, itemId);
if (itemValues.containsKey(key)) {
return (String) itemValues.get(key);
} else {
return "";
}
}
public int getNumSamples(int studyEventDefinitionId) {
Integer key = new Integer(studyEventDefinitionId);
if (numSamplesByStudyEventDefinition.containsKey(key)) {
Integer numSamples = (Integer) numSamplesByStudyEventDefinition.get(key);
if (numSamples != null) {
return numSamples.intValue();
}
}
return 0;
}
/**
* @return Returns the siteUniqueIdentifier.
*/
public String getSiteUniqueIdentifier() {
return siteUniqueIdentifier;
}
/**
* @param siteUniqueIdentifier
* The siteUniqueIdentifier to set.
*/
public void setSiteUniqueIdentifier(String siteUniqueIdentifier) {
this.siteUniqueIdentifier = siteUniqueIdentifier;
}
/**
* @return Returns the studyProtocolId.
*/
public String getStudyProtocolId() {
return studyProtocolId;
}
/**
* @param studyProtocolId
* The studyProtocolId to set.
*/
public void setStudyProtocolId(String studyProtocolId) {
this.studyProtocolId = studyProtocolId;
}
/**
* @return Returns the dateOfBirth.
*/
public Date getDateOfBirth() {
return dateOfBirth;
}
/**
* @param dateOfBirth
* The dateOfBirth to set.
*/
public void setDateOfBirth(Date dateOfBirth) {
this.dateOfBirth = dateOfBirth;
}
/**
* @return Returns the gender.
*/
public String getGender() {
return gender;
}
/**
* @param gender
* The gender to set.
*/
public void setGender(String gender) {
this.gender = gender;
}
/**
* @return Returns the yearOfBirth.
*/
public String getYearOfBirth() {
return yearOfBirth;
}
/**
* @param yearOfBirth
* The yearOfBirth to set.
*/
public void setYearOfBirth(String yearOfBirth) {
this.yearOfBirth = yearOfBirth;
}
/**
* @return Returns the intLabelResultSet.
*/
public int getIntLabelResultSet() {
return intLabelResultSet;
}
/**
* @param intLabelResultSet
* The intLabelResultSet to set.
*/
public void setIntLabelResultSet(int intLabelResultSet) {
this.intLabelResultSet = intLabelResultSet;
}
/**
* @return Returns the intNameResultSet.
*/
public int getIntNameResultSet() {
return intNameResultSet;
}
/**
* @param intNameResultSet
* The intNameResultSet to set.
*/
public void setIntNameResultSet(int intNameResultSet) {
this.intNameResultSet = intNameResultSet;
}
}