/*
* 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.view;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.TreeMap;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.akaza.openclinica.bean.admin.CRFBean;
import org.akaza.openclinica.bean.core.DataEntryStage;
import org.akaza.openclinica.bean.core.Status;
import org.akaza.openclinica.bean.extract.DatasetBean;
import org.akaza.openclinica.bean.extract.ExtractBean;
import org.akaza.openclinica.bean.extract.FilterBean;
import org.akaza.openclinica.bean.managestudy.DisplayEventDefinitionCRFBean;
import org.akaza.openclinica.bean.managestudy.DisplayStudyEventBean;
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.bean.managestudy.StudySubjectBean;
import org.akaza.openclinica.bean.submit.CRFVersionBean;
import org.akaza.openclinica.bean.submit.DisplayEventCRFBean;
import org.akaza.openclinica.bean.submit.EventCRFBean;
import org.akaza.openclinica.bean.submit.SectionBean;
import org.akaza.openclinica.i18n.core.LocaleResolver;
import org.akaza.openclinica.i18n.util.ResourceBundleProvider;
/**
* To create a flexible panel of information that will change while the user
* manages his or her session.
*
* @author thickerson
*
*/
public class StudyInfoPanel implements Serializable {
private TreeMap data = new TreeMap();
/**
* An array of StudyInfoPanelLine objects. This is only used if orderedData
* is flipped on.
*/
private ArrayList userOrderedData = new ArrayList();
String datePattern = "MM/dd/yyyy";
SimpleDateFormat english_sdf = new SimpleDateFormat(datePattern);
SimpleDateFormat local_sdf;
private boolean studyInfoShown = true;
private boolean orderedData = false;
private boolean submitDataModule = false; // if it is submit data module,
// need
// to show tree panel
private boolean extractData = false;
private boolean createDataset = false;
private boolean iconInfoShown = true;// added for the side icons
private boolean manageSubject = false;// added to control the group of
// side icons
/**
* @return Returns the manageSubject.
*/
public boolean isManageSubject() {
return manageSubject;
}
/**
* @param manageSubject
* The manageSubject to set.
*/
public void setManageSubject(boolean manageSubject) {
this.manageSubject = manageSubject;
}
/**
* @return Returns the iconInfoShown.
*/
public boolean isIconInfoShown() {
return iconInfoShown;
}
/**
* @param iconInfoShown
* The iconInfoShown to set.
*/
public void setIconInfoShown(boolean iconInfoShown) {
this.iconInfoShown = iconInfoShown;
}
/**
* @return Returns the extractData.
*/
public boolean isExtractData() {
return extractData;
}
/**
* @param extractData
* The extractData to set.
*/
public void setExtractData(boolean extractData) {
this.extractData = extractData;
}
/**
* @return Returns the submitDataModule.
*/
public boolean isSubmitDataModule() {
return submitDataModule;
}
/**
* @param submitDataModule
* The submitDataModule to set.
*/
public void setSubmitDataModule(boolean submitDataModule) {
this.submitDataModule = submitDataModule;
}
public StudyInfoPanel() {
// blank generator
}
public void setData(String key, String value) {
data.put(key, value);
}
public void removeData(String key) {
data.remove(key);
}
public void reset() {
data = new TreeMap();
userOrderedData = new ArrayList();
}
/**
* @return Returns the data.
*/
public TreeMap getData() {
return data;
}
/**
* @param data
* The data to set.
*/
public void setData(TreeMap data) {
this.data = data;
}
/**
* setData, the external function which creates data for the panel to
* reflect.
*
* @param page
* @param session
* @param request
*/
public void setData(Page page, HttpSession session, HttpServletRequest request) {
Locale locale = LocaleResolver.getLocale(request);
ResourceBundle resword = ResourceBundleProvider.getWordsBundle();
local_sdf = new SimpleDateFormat(ResourceBundleProvider.getFormatBundle(locale).getString("date_format_string"));
// logger.info("found date format string: " +
// ResourceBundleProvider.getFormatBundle
// ().getString("date_format_string"));
// logger.info("found date format string with locale: " +
// ResourceBundleProvider
// .getFormatBundle(locale).getString("date_format_string"));
try {
// defaults, can be reset by mistake by running through one page,
// tbh
this.setStudyInfoShown(true);
this.setOrderedData(false);
// try to avoid errors, tbh
if (page.equals(Page.CREATE_DATASET_1)) {
this.reset();
// this.setData("Number of Steps", "5");
} else if (page.equals(Page.CREATE_DATASET_2) || page.equals(Page.CREATE_DATASET_EVENT_ATTR) || page.equals(Page.CREATE_DATASET_SUB_ATTR)
|| page.equals(Page.CREATE_DATASET_CRF_ATTR) || page.equals(Page.CREATE_DATASET_GROUP_ATTR) || page.equals(Page.CREATE_DATASET_VIEW_SELECTED)) {
HashMap eventlist = (HashMap) request.getAttribute("eventlist");
ArrayList displayData = generateEventTree(eventlist, true);
this.reset();
this.setUserOrderedData(displayData);
this.setStudyInfoShown(false);
this.setOrderedData(true);
this.setCreateDataset(true);
this.setSubmitDataModule(false);
this.setExtractData(false);
} else if (page.equals(Page.CREATE_DATASET_3)) {
this.reset();
this.setStudyInfoShown(false);
this.setOrderedData(false);
this.setCreateDataset(true);
this.setSubmitDataModule(false);
this.setExtractData(false);
DatasetBean dsb = (DatasetBean) session.getAttribute("newDataset");
int ev_count = dsb.getItemIds().size();
this.setData(resword.getString("items_selected"), new Integer(ev_count).toString());
} else if (page.equals(Page.CREATE_DATASET_4)) {
this.reset();
this.setStudyInfoShown(false);
this.setOrderedData(false);
this.setCreateDataset(true);
this.setSubmitDataModule(false);
this.setExtractData(false);
this.removeData(resword.getString("beginning_date"));
this.removeData(resword.getString("ending_date"));
DatasetBean dsb = (DatasetBean) session.getAttribute("newDataset");
int ev_count = dsb.getItemIds().size();
this.setData(resword.getString("items_selected"), new Integer(ev_count).toString());
if ("01/01/1900".equals(english_sdf.format(dsb.getDateStart()))) {
this.setData(resword.getString("beginning_date"), resword.getString("not_specified"));
} else {
this.setData(resword.getString("beginning_date"), local_sdf.format(dsb.getDateStart()));
}
if ("12/31/2100".equals(english_sdf.format(dsb.getDateEnd()))) {
this.setData(resword.getString("ending_date"), resword.getString("not_specified"));
} else {
this.setData(resword.getString("ending_date"), local_sdf.format(dsb.getDateEnd()));
}
FilterBean fb = (FilterBean) session.getAttribute("newFilter");
if (fb != null) {
this.setData("Added Filter", fb.getName());
}
} else if (page.equals(Page.APPLY_FILTER)) {
DatasetBean dsb = (DatasetBean) session.getAttribute("newDataset");
this.setData(resword.getString("beginning_date"), local_sdf.format(dsb.getDateStart()));
this.setData(resword.getString("ending_date"), local_sdf.format(dsb.getDateEnd()));
} else if (page.equals(Page.CONFIRM_DATASET)) {
this.reset();
this.setStudyInfoShown(false);
this.setOrderedData(false);
this.setCreateDataset(true);
this.setSubmitDataModule(false);
this.setExtractData(false);
DatasetBean dsb = (DatasetBean) session.getAttribute("newDataset");
this.setData(resword.getString("dataset_name"), dsb.getName());
this.setData(resword.getString("dataset_description"), dsb.getDescription());
int ev_count = dsb.getItemIds().size();
this.setData(resword.getString("items_selected"), new Integer(ev_count).toString());
if ("01/01/1900".equals(english_sdf.format(dsb.getDateStart()))) {
this.setData(resword.getString("beginning_date"), resword.getString("not_specified"));
} else {
this.setData(resword.getString("beginning_date"), local_sdf.format(dsb.getDateStart()));
}
if ("12/31/2100".equals(english_sdf.format(dsb.getDateEnd()))) {
this.setData(resword.getString("ending_date"), resword.getString("not_specified"));
} else {
this.setData(resword.getString("ending_date"), local_sdf.format(dsb.getDateEnd()));
}
FilterBean fb = (FilterBean) session.getAttribute("newFilter");
if (fb != null) {
this.setData(resword.getString("added_filter"), fb.getName());
}
} else if (page.equals(Page.CREATE_FILTER_SCREEN_3_1)) {
CRFVersionBean cvBean = (CRFVersionBean) session.getAttribute("cvBean");
this.setData(resword.getString("CRF_version_selected"), cvBean.getName());
} else if (page.equals(Page.CREATE_FILTER_SCREEN_3_2)) {
SectionBean secBean = (SectionBean) session.getAttribute("secBean");
this.setData(resword.getString("section_selected"), secBean.getName());
Collection metadatas = (Collection) request.getAttribute("metadatas");
this.setData(resword.getString("number_of_questions"), new Integer(metadatas.size()).toString());
} else if (page.equals(Page.CREATE_FILTER_SCREEN_4)) {
} else if (page.equals(Page.CREATE_FILTER_SCREEN_5)) {
// blank here to prevent data reset, tbh
} else if (page.equals(Page.ADMIN_SYSTEM)) {
// blank here , info set in servlet itself
} else if (page.equals(Page.VIEW_STUDY_SUBJECT) || page.equals(Page.LIST_EVENTS_FOR_SUBJECT)) {
// special case, unlocks study name, subject name, and
// visits
// TODO set all this up, tbh
/*
* set up the side info panel to create the following upon entry
* from the ViewStudyServlet Study X Subject Y StudyEventDef Z1
* StudyEventDef Z2 <status-tag> CRF A1 <status-tag> CRF A2 Z1
* should be collapsible/expandible, etc.
*
* We can pull things from the session and the request:
*/
/*
* StudyBean study = (StudyBean) request.getAttribute("study");
* StudySubjectBean studySubject = (StudySubjectBean)
* request.getAttribute("studySub"); EntityBeanTable table =
* (EntityBeanTable) request.getAttribute("table"); EventCRFBean
* ecb = (EventCRFBean)request.getAttribute("eventCRF");
* this.reset(); ArrayList rows = table.getRows(); ArrayList
* beans = DisplayStudyEventBean.generateBeansFromRows(rows);
*
*
* addStudyEventTree(study, studySubject, beans, ecb);
*/
// this.setIconInfoShown(false);
// this.setManageSubject(true);
this.reset();
this.setStudyInfoShown(true);
this.setOrderedData(true);
this.setExtractData(false);
this.setSubmitDataModule(false);
this.setCreateDataset(false);
this.setIconInfoShown(false);
this.setManageSubject(true);
request.setAttribute("showDDEIcon", Boolean.TRUE);
} else if (page.equals(Page.ENTER_DATA_FOR_STUDY_EVENT) || page.equals(Page.ENTER_DATA_FOR_STUDY_EVENT_SERVLET)) {
StudyBean study = (StudyBean) session.getAttribute("study");
StudySubjectBean studySubject = (StudySubjectBean) request.getAttribute("studySubject");
ArrayList beans = (ArrayList) request.getAttribute("beans");
EventCRFBean ecb = (EventCRFBean) request.getAttribute("eventCRF");
this.reset();
addStudyEventTree(study, studySubject, beans, ecb, true);
this.setStudyInfoShown(false);
this.setOrderedData(true);
this.setSubmitDataModule(true);
this.setExtractData(false);
this.setCreateDataset(false);
this.setIconInfoShown(false);
} else if (page.equals(Page.INTERVIEWER) || page.equals(Page.TABLE_OF_CONTENTS) || page.equals(Page.TABLE_OF_CONTENTS_SERVLET)
|| page.equals(Page.INITIAL_DATA_ENTRY) || page.equals(Page.INITIAL_DATA_ENTRY_SERVLET) || page.equals(Page.DOUBLE_DATA_ENTRY)
|| page.equals(Page.DOUBLE_DATA_ENTRY_SERVLET) || page.equals(Page.ADMIN_EDIT) || page.equals(Page.ADMIN_EDIT_SERVLET)) {
/*
* pages designed to also follow the above format; check to see
* if they are in the session already, and does not refresh.
* TODO refine and test
*/
StudyBean study = (StudyBean) session.getAttribute("study");
StudySubjectBean studySubject = (StudySubjectBean) request.getAttribute("studySubject");
ArrayList beans = (ArrayList) request.getAttribute("beans");
EventCRFBean ecb = (EventCRFBean) request.getAttribute("eventCRF");
this.reset();
addStudyEventTree(study, studySubject, beans, ecb, false);
this.setStudyInfoShown(false);
this.setOrderedData(true);
this.setSubmitDataModule(true);
this.setExtractData(false);
this.setCreateDataset(false);
this.setIconInfoShown(true);
} else if (page.equals(Page.EDIT_DATASET)) {
this.reset();
// HashMap eventlist = (HashMap)
// request.getAttribute("eventlist");
HashMap eventlist = (LinkedHashMap) session.getAttribute("eventsForCreateDataset");
ArrayList displayData = generateEventTree(eventlist, true);
this.setCreateDataset(true);
this.setOrderedData(true);
this.setUserOrderedData(displayData);
this.setStudyInfoShown(true);
this.setSubmitDataModule(false);
this.setExtractData(false);
DatasetBean dsb = (DatasetBean) request.getAttribute("dataset");
this.setData(resword.getString("dataset_name"), dsb.getName());
this.setData(resword.getString("date_created"), local_sdf.format(dsb.getCreatedDate()));
this.setData(resword.getString("dataset_owner"), dsb.getOwner().getName());
this.setData(resword.getString("date_last_run"), local_sdf.format(dsb.getDateLastRun()));
} else if (page.equals(Page.EXPORT_DATASETS)) {
this.setCreateDataset(false);
} else if (page.equals(Page.GENERATE_DATASET_HTML)) {
DatasetBean db = (DatasetBean) request.getAttribute("dataset");
ExtractBean exbean = (ExtractBean) request.getAttribute("extractBean");
this.reset();
ArrayList displayData = new ArrayList();
displayData = generateDatasetTree(exbean, db);
this.setUserOrderedData(displayData);
this.setStudyInfoShown(false);
this.setOrderedData(true);
this.setExtractData(true);
this.setSubmitDataModule(false);
this.setCreateDataset(false);
} else if (page.equals(Page.LIST_STUDY_SUBJECT) || page.equals(Page.LIST_STUDY_SUBJECTS) || page.equals(Page.SUBMIT_DATA)
|| page.equals(Page.SUBMIT_DATA_SERVLET)) {
this.reset();
this.setStudyInfoShown(true);
this.setOrderedData(true);
this.setExtractData(false);
this.setSubmitDataModule(false);
this.setCreateDataset(false);
this.setIconInfoShown(false);
this.setManageSubject(true);
// don't want to show DDE icon key for subject matrix page
request.setAttribute("showDDEIcon", Boolean.FALSE);
} else if (page.equals(Page.VIEW_SECTION_DATA_ENTRY) || page.equals(Page.VIEW_SECTION_DATA_ENTRY_SERVLET)) {
this.reset();
this.setStudyInfoShown(true);
this.setOrderedData(true);
this.setExtractData(false);
this.setSubmitDataModule(false);
this.setCreateDataset(false);
this.setIconInfoShown(true);
this.setManageSubject(false);
} else if (page.equals(Page.CREATE_SUBJECT_GROUP_CLASS) || page.equals(Page.CREATE_SUBJECT_GROUP_CLASS_CONFIRM)
|| page.equals(Page.UPDATE_SUBJECT_GROUP_CLASS) || page.equals(Page.UPDATE_SUBJECT_GROUP_CLASS_CONFIRM)) {
this.reset();
this.setStudyInfoShown(true);
this.setOrderedData(true);
this.setExtractData(false);
this.setSubmitDataModule(false);
this.setCreateDataset(false);
this.setIconInfoShown(true);
this.setManageSubject(false);
} else if (page.equals(Page.VIEW_RULE_SETS2)) {
HashMap eventlist = (HashMap) request.getAttribute("eventlist");
ArrayList displayData = generateEventTree(eventlist, false);
this.reset();
this.setUserOrderedData(displayData);
this.setStudyInfoShown(true);
this.setOrderedData(true);
this.setCreateDataset(false);
this.setSubmitDataModule(false);
this.setExtractData(false);
} else {
// automatically reset if we don't know what's happening
this.reset();
this.setStudyInfoShown(true);
this.setOrderedData(true);
this.setExtractData(false);
this.setSubmitDataModule(false);
this.setCreateDataset(false);
this.setIconInfoShown(true);
this.setManageSubject(false);
}
} catch (Exception e) {
this.reset();
}
}
/**
* @return Returns the studyInfoShown.
*/
public boolean isStudyInfoShown() {
return studyInfoShown;
}
/**
* @param studyInfoShown
* The studyInfoShown to set.
*/
public void setStudyInfoShown(boolean studyInfoShown) {
this.studyInfoShown = studyInfoShown;
}
/**
* @return Returns the orderedData.
*/
public boolean isOrderedData() {
return orderedData;
}
/**
* @param orderedData
* The orderedData to set.
*/
public void setOrderedData(boolean orderedData) {
this.orderedData = orderedData;
}
/**
* @return Returns the userOrderedData.
*/
public ArrayList getUserOrderedData() {
return userOrderedData;
}
/**
* @param userOrderedData
* The userOrderedData to set.
*/
public void setUserOrderedData(ArrayList userOrderedData) {
this.userOrderedData = userOrderedData;
}
/*
* note that this has to change if the texts change, so this might be
* something different in the future.
*/
public String getStageImageText(DataEntryStage stage) {
String answer = "";
if (stage.isInitialDE()) {
answer = "<img src='images/icon_InitialDE.gif' alt='Initial Data Entry'>";
} else if (stage.isInitialDE_Complete()) {
answer = "<img src='images/icon_InitialDEcomplete.gif' alt='Initial Data Entry Complete'>";
} else if (stage.isDoubleDE()) {
answer = "<img src='images/icon_DDE.gif' alt='Double Data Entry'>";
} else if (stage.isDoubleDE_Complete()) {
answer = "<img src='images/icon_DEcomplete.gif' alt='Data Entry Complete'>";
} else if (stage.isAdmin_Editing()) {
answer = "<img src='images/icon_AdminEdit.gif' alt='Administrative Editing'>";
} else if (stage.isLocked()) {
answer = "<img src='images/icon_Locked.gif' alt='Locked'>";
} else {
answer = "<img src='images/icon_Invalid.gif' alt='Invalid'>";
}
return answer;
}
public String getTOCLink(DisplayEventCRFBean dec) {
String answer = "";
if (!dec.getEventCRF().getStatus().equals(Status.DELETED) && !dec.getEventCRF().getStatus().equals(Status.AUTO_DELETED)) {
if (dec.isContinueInitialDataEntryPermitted()) {
answer = "InitialDataEntry?eventCRFId=" + dec.getEventCRF().getId();
} else if (dec.isStartDoubleDataEntryPermitted()) {
answer = "DoubleDataEntry?eventCRFId=" + dec.getEventCRF().getId();
} else if (dec.isContinueDoubleDataEntryPermitted()) {
answer = "DoubleDataEntry?eventCRFId=" + dec.getEventCRF().getId();
} else if (dec.isPerformAdministrativeEditingPermitted()) {
answer = "AdministrativeEditing?eventCRFId=" + dec.getEventCRF().getId();
} else if (dec.isLocked()) {
answer = "ViewSectionDataEntry?eventDefinitionCRFId=" + dec.getEventDefinitionCRF().getId() + "&ecId=" + dec.getEventCRF().getId() + "&tabId=1";
}
}
return answer;
}
public void addStudyEventRulesTree(StudyBean study, StudySubjectBean studySubject, ArrayList displayStudyEventBeans, EventCRFBean ecb, boolean withLink) {
// method behind madness: we want the other pages to show
// this information, but we don't want to hit the database when we do.
// so, we gather--and hide--the information here.
this.setStudyInfoShown(true);
this.setOrderedData(false);
ArrayList displayData = new ArrayList();
// displayData.add(new StudyInfoPanelLine("Study", study.getName(),
// true, false));
// displayData.add(new StudyInfoPanelLine("<span class='alert'>Subject",
// studySubject.getLabel() + "</span>", true, false));
if (withLink) {
displayData = generateTreeFromBeans(displayStudyEventBeans, displayData, studySubject, ecb);
} else {
displayData = generateTreeFromBeansWithoutLink(displayStudyEventBeans, displayData, studySubject, ecb);
}
this.setUserOrderedData(displayData);
}
public void addStudyEventTree(StudyBean study, StudySubjectBean studySubject, ArrayList displayStudyEventBeans, EventCRFBean ecb, boolean withLink) {
// method behind madness: we want the other pages to show
// this information, but we don't want to hit the database when we do.
// so, we gather--and hide--the information here.
this.setStudyInfoShown(true);
this.setOrderedData(false);
ArrayList displayData = new ArrayList();
// displayData.add(new StudyInfoPanelLine("Study", study.getName(),
// true, false));
// displayData.add(new StudyInfoPanelLine("<span class='alert'>Subject",
// studySubject.getLabel() + "</span>", true, false));
if (withLink) {
displayData = generateTreeFromBeans(displayStudyEventBeans, displayData, studySubject, ecb);
} else {
displayData = generateTreeFromBeansWithoutLink(displayStudyEventBeans, displayData, studySubject, ecb);
}
this.setUserOrderedData(displayData);
}
/**
* Generates a tree view in sdie info panel for submitting data page
*
* @param rows
* @param displayData
* @param studySubject
* @param ecb
* @return
*/
public ArrayList generateTreeFromBeans(ArrayList rows, ArrayList displayData, StudySubjectBean studySubject, EventCRFBean ecb) {
Iterator itRows = rows.iterator();
ResourceBundle resword = ResourceBundleProvider.getWordsBundle();
displayData.add(new StudyInfoPanelLine(resword.getString("study_events"), "(" + rows.size() + ")", true, false, false));
while (itRows.hasNext()) {
DisplayStudyEventBean dseBean = (DisplayStudyEventBean) itRows.next();
StudyEventBean seBean = dseBean.getStudyEvent();
// checks whether the event is the current one
if (ecb != null && ecb.getStudyEventId() == seBean.getId()) {
displayData.add(new StudyInfoPanelLine("Study Event", seBean.getStudyEventDefinition().getName(), true, false, true));
} else {
displayData.add(new StudyInfoPanelLine("Study Event", seBean.getStudyEventDefinition().getName(), true, false, false));
}
displayData.add(new StudyInfoPanelLine("<b>Status: </b>", "<a href='EnterDataForStudyEvent?eventId=" + seBean.getId() + "'>"
+ seBean.getSubjectEventStatus().getName() + "</a>", false, false, false));
ArrayList displayCRFs = dseBean.getDisplayEventCRFs();
int count = 0;
Iterator displayIt = displayCRFs.iterator();
while (displayIt.hasNext()) {
DisplayEventCRFBean dec = (DisplayEventCRFBean) displayIt.next();
if (count == displayCRFs.size() - 1 && dseBean.getUncompletedCRFs().size() == 0) {
// last event CRF for this event
// it's the current crf
//JN:Removing the linkx, since the links are being shown in the tree without access, Mantis:9964
if (ecb != null && ecb.getId() == dec.getEventCRF().getId()) {// was
// getName(),
// tbh
displayData.add(new StudyInfoPanelLine("" + getStageImageText(dec.getStage()), "<span class='alert'>"
+ dec.getEventCRF().getCrf().getName() + " " + dec.getEventCRF().getCrfVersion().getName() + "</span>", false, true, true));
} else {
displayData.add(new StudyInfoPanelLine("" + getStageImageText(dec.getStage()), " "
+ dec.getEventCRF().getCrf().getName() + " " + dec.getEventCRF().getCrfVersion().getName() + "</a>", false, true, false));
}
} else {
if (ecb != null && ecb.getId() == dec.getEventCRF().getId()) {
displayData.add(new StudyInfoPanelLine("" + getStageImageText(dec.getStage()), "<span class='alert'>"
+ dec.getEventCRF().getCrf().getName() + " " + dec.getEventCRF().getCrfVersion().getName() + "</span>", false, false, true));
} else {
displayData.add(new StudyInfoPanelLine("" + getStageImageText(dec.getStage()), " "
+ dec.getEventCRF().getCrf().getName() + " " + dec.getEventCRF().getCrfVersion().getName() + "</a>", false, false, false));
}
}
count++;
}
count = 0;
ArrayList uncompleted = dseBean.getUncompletedCRFs();
Iterator uncompIt = uncompleted.iterator();
while (uncompIt.hasNext()) {
DisplayEventDefinitionCRFBean dedc = (DisplayEventDefinitionCRFBean) uncompIt.next();
if (count == uncompleted.size() - 1) {
if (ecb != null && ecb.getId() == dedc.getEventCRF().getId() && ecb.getCrf().getId() == dedc.getEventCRF().getCrf().getId()) {
// logger.info("ecb id*******" + ecb.getId() +
// dedc.getEventCRF().getId());
displayData.add(new StudyInfoPanelLine("<img src='images/icon_NotStarted.gif' alt='Not Started'/>", "<span class='alert'>"
+ dedc.getEdc().getCrf().getName() + "</span>", false, true, true));
} else {
displayData.add(new StudyInfoPanelLine("<img src='images/icon_NotStarted.gif' alt='Not Started'/>",
"<span class='alert'>" + dedc.getEdc().getCrf().getName() + "</a>", false, true, false));
}
} else {
if (ecb != null && ecb.getId() == dedc.getEventCRF().getId()) {
// logger.info("ecb id*******" + ecb.getId() +
// dedc.getEventCRF().getId());
displayData.add(new StudyInfoPanelLine("<img src='images/icon_NotStarted.gif' alt='Not Started'/>", "<span class='alert'>"
+ dedc.getEdc().getCrf().getName() + "</span>", false, false, true));
} else {
displayData.add(new StudyInfoPanelLine("<img src='images/icon_NotStarted.gif' alt='Not Started'/>",
"<span class='alert'>" + dedc.getEdc().getCrf().getName() + "</a>", false, false, false));
}
}
count++;
}
}
return displayData;
}
/**
* Generates a tree view in sdie info panel for submitting data page
*
* @param rows
* @param displayData
* @param studySubject
* @param ecb
* @return
*/
public ArrayList generateTreeFromBeansWithoutLink(ArrayList rows, ArrayList displayData, StudySubjectBean studySubject, EventCRFBean ecb) {
Iterator itRows = rows.iterator();
displayData.add(new StudyInfoPanelLine("Study Events", "(" + rows.size() + ")", true, false, false));
while (itRows.hasNext()) {
DisplayStudyEventBean dseBean = (DisplayStudyEventBean) itRows.next();
StudyEventBean seBean = dseBean.getStudyEvent();
// checks whether the event is the current one
if (ecb != null && ecb.getStudyEventId() == seBean.getId()) {
displayData.add(new StudyInfoPanelLine("Study Event", seBean.getStudyEventDefinition().getName(), true, false, true));
} else {
displayData.add(new StudyInfoPanelLine("Study Event", seBean.getStudyEventDefinition().getName(), true, false, false));
}
displayData.add(new StudyInfoPanelLine("<b>Status: </b>", seBean.getSubjectEventStatus().getName(), false, false, false));
ArrayList displayCRFs = dseBean.getDisplayEventCRFs();
int count = 0;
Iterator displayIt = displayCRFs.iterator();
while (displayIt.hasNext()) {
DisplayEventCRFBean dec = (DisplayEventCRFBean) displayIt.next();
if (count == displayCRFs.size() - 1 && dseBean.getUncompletedCRFs().size() == 0) {
// last event CRF for this event
// it's the current crf
if (ecb != null && ecb.getId() == dec.getEventCRF().getId()) {
displayData.add(new StudyInfoPanelLine("" + getStageImageText(dec.getStage()), "<span class='alert'>"
+ dec.getEventCRF().getCrf().getName() + " " + dec.getEventCRF().getCrfVersion().getName() + "</span>", false, true, true));
} else {
displayData.add(new StudyInfoPanelLine("" + getStageImageText(dec.getStage()), dec.getEventCRF().getCrf().getName() + " "
+ dec.getEventCRF().getCrfVersion().getName(), false, true, false));
}
} else {
if (ecb != null && ecb.getId() == dec.getEventCRF().getId()) {
displayData.add(new StudyInfoPanelLine("" + getStageImageText(dec.getStage()), "<span class='alert'>"
+ dec.getEventCRF().getCrf().getName() + " " + dec.getEventCRF().getCrfVersion().getName() + "</span>", false, false, true));
} else {
displayData.add(new StudyInfoPanelLine("" + getStageImageText(dec.getStage()), dec.getEventCRF().getCrf().getName() + " "
+ dec.getEventCRF().getCrfVersion().getName(), false, false, false));
}
}
count++;
}
count = 0;
ArrayList uncompleted = dseBean.getUncompletedCRFs();
Iterator uncompIt = uncompleted.iterator();
while (uncompIt.hasNext()) {
DisplayEventDefinitionCRFBean dedc = (DisplayEventDefinitionCRFBean) uncompIt.next();
if (count == uncompleted.size() - 1) {
if (ecb != null && ecb.getId() == dedc.getEventCRF().getId() && ecb.getCrf().getId() == dedc.getEventCRF().getCrf().getId()) {
// logger.info("ecb id*******" + ecb.getId() +
// dedc.getEventCRF().getId());
displayData.add(new StudyInfoPanelLine("<img src='images/icon_NotStarted.gif' alt='Not Started'/>", "<span class='alert'>"
+ dedc.getEdc().getCrf().getName() + "</span>", false, true, true));
} else {
displayData.add(new StudyInfoPanelLine("<img src='images/icon_NotStarted.gif' alt='Not Started'/>", dedc.getEdc().getCrf().getName(),
false, true, false));
}
} else {
if (ecb != null && ecb.getId() == dedc.getEventCRF().getId()) {
// logger.info("ecb id*******" + ecb.getId() +
// dedc.getEventCRF().getId());
displayData.add(new StudyInfoPanelLine("<img src='images/icon_NotStarted.gif' alt='Not Started'/>", "<span class='alert'>"
+ dedc.getEdc().getCrf().getName() + "</span>", false, false, true));
} else {
displayData.add(new StudyInfoPanelLine("<img src='images/icon_NotStarted.gif' alt='Not Started'/>", dedc.getEdc().getCrf().getName(),
false, false, false));
}
}
count++;
}
}
return displayData;
}
private ArrayList generateDatasetTree(ExtractBean eb, DatasetBean db) {
ArrayList displayData = new ArrayList();
ArrayList seds = eb.getStudyEvents();
for (int i = 0; i < seds.size(); i++) {
// second, iterate through seds
StudyEventDefinitionBean sed = (StudyEventDefinitionBean) seds.get(i);
String repeating = "";
if (sed.isRepeating()) {
repeating = " (Repeating) ";
}
// if repeating:
// change string to (Repeating)
displayData.add(new StudyInfoPanelLine("Study Event Definition", sed.getName() + repeating, true, false));
ArrayList crfs = sed.getCrfs();
for (int j = 0; j < crfs.size(); j++) {
CRFBean cb = (CRFBean) crfs.get(j);
if (j < crfs.size() - 1 && crfs.size() > 1) {
displayData.add(new StudyInfoPanelLine("CRF", cb.getName() + " <b>" + ExtractBean.getSEDCRFCode(i + 1, j + 1) + "</b>", false, false));
} else {// last crf
displayData.add(new StudyInfoPanelLine("CRF", cb.getName() + " <b>" + ExtractBean.getSEDCRFCode(i + 1, j + 1) + "</b>", false, true));
}
// third, iterate through crf versions
}
}
return displayData;
}
private ArrayList generateEventTree(HashMap eventlist, Boolean isExtractData) {
ArrayList displayData = new ArrayList();
// Iterator keyIt = eventlist.keySet().iterator();
// logger.info("how many events =" + eventlist.size());
int count = 0;
for (Iterator keyIt = eventlist.keySet().iterator(); keyIt.hasNext();) {
StudyEventDefinitionBean sed = (StudyEventDefinitionBean) keyIt.next();
displayData.add(new StudyInfoPanelLine("Definition", sed.getName(), true, false));
ArrayList crfs = (ArrayList) eventlist.get(sed);
int ordinal_crf = 1;
for (int i = 0; i < crfs.size(); i++) {
CRFBean crf = (CRFBean) crfs.get(i);
if (ordinal_crf < crfs.size()) {
if (isExtractData) {
displayData.add(new StudyInfoPanelLine("CRF", "<a href='SelectItems?crfId=" + crf.getId() + "&defId=" + sed.getId() + "'>"
+ crf.getName() + "</a>", false, false));
} else {
displayData.add(new StudyInfoPanelLine("CRF", "<a href='ViewRuleAssignment?ruleAssignments_f_crfName=" + crf.getName() + "'>"
+ crf.getName() + "</a>", false, false));
}
} else {
if (isExtractData) {
displayData.add(new StudyInfoPanelLine("CRF", "<a href='SelectItems?crfId=" + crf.getId() + "&defId=" + sed.getId() + "'>"
+ crf.getName() + "</a>", false, true));
} else {
displayData.add(new StudyInfoPanelLine("CRF", "<a href='ViewRuleAssignment?ruleAssignments_f_studyEventDefinitionName=" + sed.getName()
+ "&ruleAssignments_f_crfName=" + crf.getName() + "'>" + crf.getName() + "</a>", false, true));
}
}
ordinal_crf++;
}
count++;
}
// logger.info("how many definitions =" + count);
return displayData;
}
/**
* @return Returns the createDataset.
*/
public boolean isCreateDataset() {
return createDataset;
}
/**
* @param createDataset
* The createDataset to set.
*/
public void setCreateDataset(boolean createDataset) {
this.createDataset = createDataset;
}
}