package org.akaza.openclinica.web.bean;
import org.akaza.openclinica.bean.core.DataEntryStage;
import org.akaza.openclinica.bean.core.SubjectEventStatus;
import org.akaza.openclinica.bean.managestudy.DisplayStudyEventBean;
import org.akaza.openclinica.bean.managestudy.DisplayStudySubjectBean;
import org.akaza.openclinica.bean.submit.DisplayEventCRFBean;
import org.akaza.openclinica.bean.submit.SubjectGroupMapBean;
import java.util.ArrayList;
/**
* @author sshamim
* Date: Nov 17, 2008
* Time: 7:57:23 PM
*/
public class DisplayStudySubjectEventsRow extends EntityBeanRow {
// columns:
public static final int COL_SUBJECT_LABEL = 0;
public static final int COL_STATUS = 1;
public static final int COL_GENDER = 2;
public static final int COL_EVENT_STATUS = 3;
public static final int COL_EVENT_DATE = 4;
public static final int COL_STUDYCRF = 5;
public static final int COL_STUDYGROUP = 6;
@Override
protected int compareColumn(Object row, int sortingColumn) {
if (!row.getClass().equals(DisplayStudySubjectEventsRow.class)) {
return 0;
}
DisplayStudySubjectBean thisStudy = (DisplayStudySubjectBean) bean;
DisplayStudySubjectBean argStudy = (DisplayStudySubjectBean) ((DisplayStudySubjectEventsRow) row).bean;
int answer = 0;
// YW <<
int groupSize = thisStudy.getStudyGroups().size();
int code;
if (sortingColumn > 4 + groupSize) {
code = COL_STUDYCRF;
} else if (sortingColumn > 4 && sortingColumn <= 4 + groupSize) {
code = COL_STUDYGROUP;
} else {
code = sortingColumn;
}
switch (code) {
case COL_SUBJECT_LABEL:
answer = thisStudy.getStudySubject().getLabel().toLowerCase().compareTo(argStudy.getStudySubject().getLabel().toLowerCase());
break;
case COL_GENDER:
answer = (thisStudy.getStudySubject().getGender() + "").compareTo(argStudy.getStudySubject().getGender() + "");
break;
case COL_STATUS:
answer = thisStudy.getStudySubject().getStatus().compareTo(argStudy.getStudySubject().getStatus());
break;
case COL_EVENT_STATUS:
if (thisStudy.getStudyEvents() == null || thisStudy.getStudyEvents().isEmpty()) {
answer = -1;
break;
}
if (argStudy.getStudyEvents() == null || argStudy.getStudyEvents().isEmpty()) {
answer = 1;
break;
}
answer = ((DisplayStudyEventBean)thisStudy.getStudyEvents().get(0)).getStudyEvent().getSubjectEventStatus().compareTo(
((DisplayStudyEventBean) argStudy.getStudyEvents().get(0)).getStudyEvent().getSubjectEventStatus());
break;
case COL_EVENT_DATE:
if (thisStudy.getStudyEvents() == null || thisStudy.getStudyEvents().isEmpty()) {
answer = -1;
break;
}
if (argStudy.getStudyEvents() == null || argStudy.getStudyEvents().isEmpty()) {
answer = 1;
break;
}
answer = ((DisplayStudyEventBean)thisStudy.getStudyEvents().get(0)).getStudyEvent().getDateStarted().compareTo(
((DisplayStudyEventBean) argStudy.getStudyEvents().get(0)).getStudyEvent().getDateStarted());
break;
case COL_STUDYGROUP:
answer =
((SubjectGroupMapBean) thisStudy.getStudyGroups().get(sortingColumn - 5)).getStudyGroupName().toLowerCase().compareTo(
((SubjectGroupMapBean) argStudy.getStudyGroups().get(sortingColumn - 5)).getStudyGroupName().toLowerCase());
break;
case COL_STUDYCRF:
if (thisStudy.getStudyEvents() == null || thisStudy.getStudyEvents().isEmpty()) {
answer = -1;
break;
}
if (argStudy.getStudyEvents() == null || argStudy.getStudyEvents().isEmpty()) {
answer = 1;
break;
}
ArrayList thisAllEventCRFs = ((DisplayStudyEventBean)thisStudy.getStudyEvents().get(0)).getAllEventCRFs();
ArrayList argAllEventCRFs = ((DisplayStudyEventBean)argStudy.getStudyEvents().get(0)).getAllEventCRFs();
if (thisAllEventCRFs == null || thisAllEventCRFs.isEmpty()) {
answer = -1;
break;
}
if (argAllEventCRFs == null || argAllEventCRFs.isEmpty()) {
answer = 1;
break;
}
// Event crf status comparision
DataEntryStage thisDes = ((DisplayEventCRFBean) thisAllEventCRFs.get(sortingColumn - 5)).getEventCRF().getStage();
DataEntryStage argDes = ((DisplayEventCRFBean) argAllEventCRFs.get(sortingColumn - 5)).getEventCRF().getStage();
/*Event crf status is ordered in this sequence, Not Started=1,Data Entry Started=2,Initial Data Entry Completed=3,
Double Data Entry Started=4,Double Data Entry Complete=5,Complete=6,Locked=7,Invalid/Removed=0*/
switch (thisDes.getId()) {
//DataEntryStage.INVALID
case 0:
if (thisDes.getId() == argDes.getId()) {
answer = 0;
} else {
answer = 1;
}
break;
//DataEntryStage.UNCOMPLETED
case 1:
if (thisDes.getId() == argDes.getId()) {
answer = 0;
} else {
answer = -1;
}
break;
//DataEntryStage.INITIAL_DATA_ENTRY
case 2:
if (thisDes.getId() == argDes.getId()) {
answer = 0;
} else if (argDes.getId() == 1) {
answer = 1;
} else {
answer = -1;
}
break;
//DataEntryStage.INITIAL_DATA_ENTRY_COMPLETE
case 3:
if (thisDes.getId() == argDes.getId()) {
answer = 0;
} else if (argDes.getId() == 1 || argDes.getId() == 2 ) {
answer = 1;
} else {
answer = -1;
}
break;
//DataEntryStage.DOUBLE_DATA_ENTRY
case 4:
if (thisDes.getId() == argDes.getId()) {
answer = 0;
} else if (argDes.getId() == 1 || argDes.getId() == 2 || argDes.getId() == 3 ) {
answer = 1;
} else {
answer = -1;
}
break;
//DataEntryStage.DOUBLE_DATA_ENTRY_COMPLETE
case 5:
if (thisDes.getId() == argDes.getId()) {
answer = 0;
} else if (argDes.getId() == 0 || argDes.getId() == 7 ) {
answer = -1;
} else {
answer = 1;
}
break;
//DataEntryStage.ADMINISTRATIVE_EDITING
case 6:
if (thisDes.getId() == argDes.getId()) {
answer = 0;
} else if (argDes.getId() == 7 || argDes.getId() == 0) {
answer = -1;
} else {
answer = 1;
}
break;
//DataEntryStage.LOCKED
case 7:
if (thisDes.getId() == argDes.getId()) {
answer = 0;
} else if (argDes.getId() == 0){
answer = -1;
} else {
answer = 1;
}
break;
default:
answer = 1;
}
}
return answer;
}
@Override
public String getSearchString() {
DisplayStudySubjectBean thisStudy = (DisplayStudySubjectBean) bean;
String searchString = thisStudy.getStudySubject().getLabel();
String secondaryLabel = thisStudy.getStudySubject().getSecondaryLabel();
if(! "".equalsIgnoreCase(secondaryLabel)){
searchString += " ";
searchString += secondaryLabel;
}
/*String toStr = "";
Date enrDate = thisStudy.getStudySubject().getEnrollmentDate();
if (enrDate != null) {
SimpleDateFormat sdf = new SimpleDateFormat(ResourceBundleProvider.getFormatBundle().getString("date_format_string"));
toStr = sdf.format(enrDate);
// TODO l10n dates?
}*/
//BWP>>8/6/2008
/*return thisStudy.getStudySubject().getLabel() + " " + thisStudy.getStudySubject().getSecondaryLabel() +
" " + thisStudy.getStudySubject().getGender() + " " + toStr;*/
return searchString;
}
/*
* (non-Javadoc)
*
* @see org.akaza.openclinica.core.EntityBeanRow#generatRowsFromBeans(java.util.ArrayList)
*/
@Override
public ArrayList generatRowsFromBeans(ArrayList beans) {
return DisplayStudySubjectEventsRow.generateRowsFromBeans(beans);
}
public static ArrayList generateRowsFromBeans(ArrayList beans) {
ArrayList answer = new ArrayList();
Class[] parameters = null;
Object[] arguments = null;
for (int i = 0; i < beans.size(); i++) {
try {
DisplayStudySubjectEventsRow row = new DisplayStudySubjectEventsRow();
row.setBean((DisplayStudySubjectBean) beans.get(i));
answer.add(row);
} catch (Exception e) {
}
}
return answer;
}
}