use of org.akaza.openclinica.service.crfdata.HideCRFManager in project OpenClinica by OpenClinica.
the class CreateDatasetServlet method processRequest.
@Override
public void processRequest() throws Exception {
FormProcessor fp = new FormProcessor(request);
String action = fp.getString("action");
if (StringUtil.isBlank(action)) {
// step 1 -- instructions, and continue button
session.setAttribute("newDataset", new DatasetBean());
session.setAttribute("allItems", new ArrayList());
session.setAttribute("crf", new CRFBean());
session.setAttribute("allSelectedItems", new ArrayList());
forwardPage(Page.CREATE_DATASET_1);
} else {
StudyBean studyWithEventDefs = currentStudy;
if (currentStudy.getParentStudyId() > 0) {
studyWithEventDefs = new StudyBean();
studyWithEventDefs.setId(currentStudy.getParentStudyId());
}
if ("begin".equalsIgnoreCase(action)) {
// step 2 -- select study events/crfs
StudyEventDAO sedao = new StudyEventDAO(sm.getDataSource());
StudyEventDefinitionDAO seddao = new StudyEventDefinitionDAO(sm.getDataSource());
EventCRFDAO ecdao = new EventCRFDAO(sm.getDataSource());
StudyBean studyWithEventDefinitions = currentStudy;
if (currentStudy.getParentStudyId() > 0) {
studyWithEventDefinitions = new StudyBean();
studyWithEventDefinitions.setId(currentStudy.getParentStudyId());
}
ArrayList seds = seddao.findAllActiveByStudy(studyWithEventDefinitions);
CRFDAO crfdao = new CRFDAO(sm.getDataSource());
HashMap events = new LinkedHashMap();
for (int i = 0; i < seds.size(); i++) {
StudyEventDefinitionBean sed = (StudyEventDefinitionBean) seds.get(i);
ArrayList<CRFBean> crfs = (ArrayList<CRFBean>) crfdao.findAllActiveByDefinition(sed);
if (currentStudy.getParentStudyId() > 0) {
// sift through these CRFs and see which ones are hidden
HideCRFManager hideCRFs = HideCRFManager.createHideCRFManager();
crfs = hideCRFs.removeHiddenCRFBeans(studyWithEventDefinitions, sed, crfs, sm.getDataSource());
}
if (!crfs.isEmpty()) {
events.put(sed, crfs);
}
}
// datasets
if (events.isEmpty()) {
addPageMessage(respage.getString("not_have_study_definitions_assigned"));
forwardPage(Page.CREATE_DATASET_1);
} else {
crfdao = new CRFDAO(sm.getDataSource());
ItemDAO idao = new ItemDAO(sm.getDataSource());
ArrayList sedItemIds = CreateDatasetServlet.allSedItemIdsInStudy(events, crfdao, idao);
session.setAttribute("numberOfStudyItems", Integer.toString(sedItemIds.size()));
request.setAttribute("eventlist", events);
session.setAttribute(EVENTS_FOR_CREATE_DATASET, events);
session.setAttribute("newDataset", new DatasetBean());
session.setAttribute("allItems", new ArrayList());
session.setAttribute("crf", new CRFBean());
forwardPage(Page.CREATE_DATASET_2);
}
} else if ("beginsubmit".equalsIgnoreCase(action)) {
String saveItems = fp.getString(SAVE_BUTTON);
String saveContinue = fp.getString(SAVE_CONTINUE_BUTTON);
DatasetBean db = (DatasetBean) session.getAttribute("newDataset");
if (db == null) {
db = new DatasetBean();
}
extractIdsFromForm(db);
extractEventIds(db);
session.setAttribute("newDataset", db);
// +"");
if (!StringUtil.isBlank(saveItems)) {
request.setAttribute("eventlist", session.getAttribute(EVENTS_FOR_CREATE_DATASET));
// BWP 3095>>
String summary = respage.getString("you_have_selected") + " " + db.getItemIds().size() + " " + respage.getString("items_so_far");
summary += genAttMsg(db);
addPageMessage(summary);
int crfId = fp.getInt("crfId");
if (crfId > 0) {
// user choose a crf and select items
forwardPage(Page.CREATE_DATASET_2);
} else {
ArrayList sgclasses = (ArrayList) session.getAttribute("allSelectedGroups");
if (sgclasses == null || sgclasses.size() == 0) {
sgclasses = setUpStudyGroups();
}
session.setAttribute("allSelectedGroups", sgclasses);
request.setAttribute("allSelectedGroups", sgclasses);
// TODO push out list of subject groups here???
// form submitted from "view selected item ' or
// attribute page, so
// forward back to "view selected item " page
forwardPage(Page.CREATE_DATASET_VIEW_SELECTED);
}
} else {
if (db.getItemIds().size() == 0) {
request.setAttribute("eventlist", session.getAttribute(EVENTS_FOR_CREATE_DATASET));
addPageMessage(respage.getString("should_select_one_item_to_create_dataset"));
forwardPage(Page.CREATE_DATASET_2);
} else {
String summary = respage.getString("you_have_selected") + " " + db.getItemIds().size() + " " + respage.getString("items_totally_for_this_dataset");
summary += genAttMsg(db);
addPageMessage(summary);
// 0 means using
fp.addPresetValue("firstmonth", 0);
// default month
fp.addPresetValue("firstyear", 1900);
fp.addPresetValue("lastmonth", 0);
fp.addPresetValue("lastyear", 2100);
setPresetValues(fp.getPresetValues());
logger.warn("found preset values while setting date: " + fp.getPresetValues().toString());
request.setAttribute(BEAN_MONTHS, getMonths());
request.setAttribute(BEAN_YEARS, getYears());
forwardPage(Page.CREATE_DATASET_3);
}
}
} else if ("scopesubmit".equalsIgnoreCase(action)) {
ArrayList months = getMonths();
ArrayList years = getYears();
int firstMonth = fp.getInt("firstmonth");
int firstYear = fp.getInt("firstyear");
int lastMonth = fp.getInt("lastmonth");
int lastYear = fp.getInt("lastyear");
if (fp.getInt("firstmonth") == 0) {
// default value
firstMonth = 1;
}
if (fp.getInt("lastmonth") == 0) {
// default value
lastMonth = 12;
}
errors = new HashMap();
if (fp.getInt("firstmonth") > 0 && firstYear == 1900) {
Validator.addError(errors, "firstmonth", restext.getString("if_specify_month_also_specify_year"));
}
if (fp.getInt("lastmonth") > 0 && lastYear == 2100) {
Validator.addError(errors, "lastmonth", restext.getString("if_specify_month_also_specify_year"));
}
Date dateStart = getFirstDayOfMonth(firstYear, firstMonth);
Date dateEnd = getLastDayOfMonth(lastYear, lastMonth);
if (dateEnd.compareTo(dateStart) < 0) {
Validator.addError(errors, "firstmonth", restext.getString("the_from_should_be_come_before_to"));
}
if (!errors.isEmpty()) {
String[] fieldNames = { "firstmonth", "firstyear", "lastmonth", "lastyear" };
fp.setCurrentIntValuesAsPreset(fieldNames);
setInputMessages(errors);
addPageMessage(respage.getString("errors_in_submission_see_below"));
setPresetValues(fp.getPresetValues());
request.setAttribute(BEAN_MONTHS, getMonths());
request.setAttribute(BEAN_YEARS, getYears());
forwardPage(Page.CREATE_DATASET_3);
} else {
DatasetBean dsb = (DatasetBean) session.getAttribute("newDataset");
dsb.setDateStart(dateStart);
dsb.setDateEnd(dateEnd);
session.setAttribute("newDataset", dsb);
if (fp.getString("submit").equals(resword.getString("continue_to_apply_filter"))) {
// FilterDAO fdao = new FilterDAO(sm.getDataSource());
// Collection filters = fdao.findAll();
// TODO make findAllByProject
// request.setAttribute("filters",filters);
EntityBeanTable table = getFilterTable();
session.setAttribute("partOfCreateDataset", new Integer(1));
// to be used in createFiltersThree servlet, tbh
request.setAttribute("table", table);
forwardPage(Page.APPLY_FILTER);
} else {
request.setAttribute("statuses", Status.toActiveArrayList());
// YW, 2-20-2008 <<these attributes will show on the
// CREATE_DATASET_4
String temp = dsb.getODMMetaDataVersionOid();
request.setAttribute("mdvOID", temp != null && temp.length() > 0 ? temp : "v1.0.0");
temp = dsb.getODMMetaDataVersionName();
request.setAttribute("mdvName", temp != null && temp.length() > 0 ? temp : "MetaDataVersion_v1.0.0");
request.setAttribute("mdvPrevStudy", dsb.getODMPriorStudyOid());
request.setAttribute("mdvPrevOID", dsb.getODMPriorMetaDataVersionOid());
// YW >>
forwardPage(Page.CREATE_DATASET_4);
}
}
} else if ("specifysubmit".equalsIgnoreCase(action)) {
Validator v = new Validator(request);
v.addValidation("dsName", Validator.NO_BLANKS);
v.addValidation("dsName", Validator.NO_SEMI_COLONS_OR_COLONS);
v.addValidation("dsDesc", Validator.NO_BLANKS);
v.addValidation("dsStatus", Validator.IS_VALID_TERM, TermType.STATUS);
v.addValidation("dsName", Validator.LENGTH_NUMERIC_COMPARISON, NumericComparisonOperator.LESS_THAN_OR_EQUAL_TO, 255);
v.addValidation("dsDesc", Validator.LENGTH_NUMERIC_COMPARISON, NumericComparisonOperator.LESS_THAN_OR_EQUAL_TO, 2000);
String mdvOID = fp.getString("mdvOID");
String mdvName = fp.getString("mdvName");
String mdvPrevStudy = fp.getString("mdvPrevStudy");
if (mdvPrevStudy != null && mdvPrevStudy.length() > 0) {
v.addValidation("mdvPrevOID", Validator.NO_BLANKS);
}
String mdvPrevOID = fp.getString("mdvPrevOID");
errors = v.validate();
String dsName = fp.getString("dsName");
if (!StringUtil.isBlank(dsName)) {
// YW, << 3-19-2008
if (dsName.contains("/") || dsName.contains("\\")) {
v.addError(errors, "dsName", restext.getString("slash_not_allowed"));
}
// 2-20-2008, no check for editing dataset
if (((DatasetBean) session.getAttribute("newDataset")).getId() <= 0) {
// YW >>
// logger.info("dsName" + fp.getString("dsName"));
DatasetDAO dsdao = new DatasetDAO(sm.getDataSource());
DatasetBean dsBean = (DatasetBean) dsdao.findByNameAndStudy(fp.getString("dsName").trim(), currentStudy);
if (dsBean.getId() > 0) {
Validator.addError(errors, "dsName", restext.getString("dataset_name_used_by_another_choose_unique"));
}
}
}
if (!errors.isEmpty()) {
String[] fieldNames = { "dsName", "dsDesc" };
fp.setCurrentStringValuesAsPreset(fieldNames);
fp.addPresetValue("dsStatusId", fp.getInt("dsStatus"));
fp.addPresetValue("mdvOID", mdvOID);
fp.addPresetValue("mdvName", mdvName);
fp.addPresetValue("mdvPrevStudy", mdvPrevStudy);
fp.addPresetValue("mdvPrevOID", mdvPrevOID);
addPageMessage(respage.getString("errors_in_submission_see_below"));
setInputMessages(errors);
setPresetValues(fp.getPresetValues());
request.setAttribute("statuses", Status.toActiveArrayList());
forwardPage(Page.CREATE_DATASET_4);
} else {
session.setAttribute("mdvOID", mdvOID);
session.setAttribute("mdvName", mdvName);
session.setAttribute("mdvPrevStudy", mdvPrevStudy);
session.setAttribute("mdvPrevOID", mdvPrevOID);
if (mdvPrevOID != null && mdvPrevOID.length() > 0 && (mdvPrevStudy == null || mdvPrevStudy.length() <= 0)) {
mdvPrevStudy = currentStudy.getId() + "";
}
DatasetBean dsb = (DatasetBean) session.getAttribute("newDataset");
dsb.setSQLStatement(dsb.generateQuery());
String dbName = SQLInitServlet.getField("dataBase");
if ("oracle".equals(dbName)) {
dsb.setSQLStatement(dsb.generateOracleQuery());
}
// TODO set up oracle syntax for the query, grab the
// database
// from the session manager and feed it to the dataset bean
// possibly done, tbh 1/4/2005
// TODO look for the filter here, re-create the sql
// statement
// and put it in here
// possibly done need to test, tbh 1/7/2005
FilterBean fb = (FilterBean) session.getAttribute("newFilter");
if (fb != null) {
// FilterDAO fDAO = new FilterDAO(sm.getDataSource());
dsb.setSQLStatement(dsb.getSQLStatement() + " " + fb.getSQLStatement());
}
// dataset if dataset name has been changed.
if (dsb.getId() > 0 && !dsb.getName().equals(fp.getString("dsName"))) {
dsb.setId(0);
}
// YW >>
dsb.setODMMetaDataVersionName(mdvName);
dsb.setODMMetaDataVersionOid(mdvOID);
dsb.setODMPriorMetaDataVersionOid(mdvPrevOID);
dsb.setODMPriorStudyOid(mdvPrevStudy);
dsb.setName(fp.getString("dsName"));
dsb.setDescription(fp.getString("dsDesc"));
dsb.setStatus(Status.get(fp.getInt("dsStatus")));
dsb.setDatasetItemStatus(DatasetItemStatus.get(fp.getInt("itemStatus")));
session.removeAttribute("partOfCreateDataset");
Date ddate = new SimpleDateFormat("MM/dd/yyyy").parse("01/01/1900");
// done to remove the set up of going to get the filter, tbh
// set up dataset here, grab primary key???!!!???
// added by jxu
request.setAttribute("defaultStart", local_df.parse(local_df.format(ddate)));
request.setAttribute("defaultEnd", getLastDayOfMonth(2100, 12));
session.setAttribute("newDataset", dsb);
forwardPage(Page.CONFIRM_DATASET);
}
} else if ("confirmall".equalsIgnoreCase(action)) {
String submit = fp.getString("btnSubmit");
logger.info("reached confirm all");
if (!resword.getString("confirm_and_save").equalsIgnoreCase(submit)) {
// we're going back, so we should not destroy the
// data we've created, tbh
// session.removeAttribute("newDataset");
// session.removeAttribute("newFilter");
forwardPage(Page.CREATE_DATASET_4);
} else {
DatasetDAO ddao = new DatasetDAO(sm.getDataSource());
DatasetBean dsb = (DatasetBean) session.getAttribute("newDataset");
dsb.setStudyId(this.currentStudy.getId());
dsb.setOwner(ub);
// dsb.setOwnerId(ub.getId());
//
// at this point, dataset itemId will still be kept
// uniquely.
dsb = finalUpateDatasetBean(dsb);
if (dsb.getId() == 0) {
// if the bean hasn't been created already that is...
logger.info("*** about to create the dataset bean");
dsb = (DatasetBean) ddao.create(dsb);
logger.info("created dataset bean: " + dsb.getId() + ", name: " + dsb.getName());
if (!dsb.isActive()) {
addPageMessage(restext.getString("problem_creating_dataset_try_again"));
forwardPage(Page.EXTRACT_DATASETS_MAIN);
}
} else // YW, 2-20-2008 << for editing existing dataset
if (dsb.getId() > 0) {
dsb = (DatasetBean) ddao.updateAll(dsb);
if (!dsb.isActive()) {
addPageMessage(restext.getString("problem_creating_dataset_try_again"));
forwardPage(Page.EXTRACT_DATASETS_MAIN);
}
dsb = (DatasetBean) ddao.updateGroupMap(dsb);
if (!dsb.isActive()) {
addPageMessage(restext.getString("problem_updating_subject_group_class_when_updating_dataset"));
forwardPage(Page.EXTRACT_DATASETS_MAIN);
}
}
// YW >>
logger.info("setting data set id here");
// may be easier to just set the dataset bean
// back into the session?
request.setAttribute("dataset", dsb);
forwardPage(Page.EXPORT_DATASETS);
}
} else {
// refine this bit to catch errors, hopefully
addPageMessage(restext.getString("creating_new_dataset_cancelled"));
forwardPage(Page.CREATE_DATASET_1);
}
}
}
use of org.akaza.openclinica.service.crfdata.HideCRFManager in project OpenClinica by OpenClinica.
the class EnterDataForStudyEventServlet method processRequest.
/*
* (non-Javadoc)
*
* @see org.akaza.openclinica.control.core.SecureController#processRequest()
*/
@Override
protected void processRequest() throws Exception {
// removeLockedCRF(ub.getId());
getCrfLocker().unlockAllForUser(ub.getId());
FormProcessor fp = new FormProcessor(request);
int eventId = fp.getInt(INPUT_EVENT_ID, true);
request.setAttribute("eventId", eventId + "");
request.setAttribute("originatingPage", URLEncoder.encode("EnterDataForStudyEvent?eventId=" + eventId, "UTF-8"));
// so we can display the event for which we're entering data
StudyEventBean seb = getStudyEvent(eventId);
// so we can display the subject's label
StudySubjectDAO ssdao = new StudySubjectDAO(sm.getDataSource());
StudySubjectBean studySubjectBean = (StudySubjectBean) ssdao.findByPK(seb.getStudySubjectId());
int studyId = studySubjectBean.getStudyId();
StudyDAO studydao = new StudyDAO(sm.getDataSource());
StudyBean study = (StudyBean) studydao.findByPK(studyId);
// If the study subject derives from a site, and is being viewed from a
// parent study,
// then the study IDs will be different. However, since each note is
// saved with the specific
// study ID, then its study ID may be different than the study subject's
// ID.
boolean subjectStudyIsCurrentStudy = studyId == currentStudy.getId();
boolean isParentStudy = study.getParentStudyId() < 1;
// Get any disc notes for this study event
DiscrepancyNoteDAO discrepancyNoteDAO = new DiscrepancyNoteDAO(sm.getDataSource());
ArrayList<DiscrepancyNoteBean> allNotesforSubjectAndEvent = new ArrayList<DiscrepancyNoteBean>();
// These methods return only parent disc notes
if (subjectStudyIsCurrentStudy && isParentStudy) {
allNotesforSubjectAndEvent = discrepancyNoteDAO.findAllStudyEventByStudyAndId(currentStudy, studySubjectBean.getId());
} else {
// findAllStudyEventByStudiesAndSubjectId
if (!isParentStudy) {
StudyBean stParent = (StudyBean) studydao.findByPK(study.getParentStudyId());
allNotesforSubjectAndEvent = discrepancyNoteDAO.findAllStudyEventByStudiesAndSubjectId(stParent, study, studySubjectBean.getId());
} else {
allNotesforSubjectAndEvent = discrepancyNoteDAO.findAllStudyEventByStudiesAndSubjectId(currentStudy, study, studySubjectBean.getId());
}
}
if (!allNotesforSubjectAndEvent.isEmpty()) {
setRequestAttributesForNotes(allNotesforSubjectAndEvent);
}
// prepare to figure out what the display should look like
EventCRFDAO ecdao = new EventCRFDAO(sm.getDataSource());
ArrayList<EventCRFBean> eventCRFs = ecdao.findAllByStudyEvent(seb);
ArrayList<Boolean> doRuleSetsExist = new ArrayList<Boolean>();
RuleSetDAO ruleSetDao = new RuleSetDAO(sm.getDataSource());
for (EventCRFBean eventCrfBean : eventCRFs) {
// Boolean result = ruleSetDao.findByEventCrf(eventCrfBean) != null
// ? Boolean.TRUE : Boolean.FALSE;
// doRuleSetsExist.add(result);
}
EventDefinitionCRFDAO edcdao = new EventDefinitionCRFDAO(sm.getDataSource());
ArrayList eventDefinitionCRFs = (ArrayList) edcdao.findAllActiveByEventDefinitionId(study, seb.getStudyEventDefinitionId());
// get the event definition CRFs for which no event CRF exists
// the event definition CRFs must be populated with versions so we can
// let the user choose which version he will enter data for
// However, this method seems to be returning DisplayEventDefinitionCRFs
// that contain valid eventCRFs??
ArrayList uncompletedEventDefinitionCRFs = getUncompletedCRFs(eventDefinitionCRFs, eventCRFs);
populateUncompletedCRFsWithCRFAndVersions(uncompletedEventDefinitionCRFs);
// BWP 2816 << Attempt to provide the DisplayEventDefinitionCRF with a
// valid owner
// only if its container eventCRf has a valid id
populateUncompletedCRFsWithAnOwner(uncompletedEventDefinitionCRFs);
// >>BWP
// for the event definition CRFs for which event CRFs exist, get
// DisplayEventCRFBeans, which the JSP will use to determine what
// the user will see for each event CRF
// removing the below row in exchange for the ViewStudySubjectServlet
// version, for two
// reasons:
// 1. concentrate all business logic in one place
// 2. VSSS seems to handle the javascript creation correctly
// ArrayList displayEventCRFs = getDisplayEventCRFs(eventCRFs,
// eventDefinitionCRFs, seb.getSubjectEventStatus());
ArrayList displayEventCRFs = ViewStudySubjectServlet.getDisplayEventCRFs(sm.getDataSource(), eventCRFs, eventDefinitionCRFs, ub, currentRole, seb.getSubjectEventStatus(), study);
// Issue 3212 BWP << hide certain CRFs at the site level
if (currentStudy.getParentStudyId() > 0) {
HideCRFManager hideCRFManager = HideCRFManager.createHideCRFManager();
uncompletedEventDefinitionCRFs = hideCRFManager.removeHiddenEventDefinitionCRFBeans(uncompletedEventDefinitionCRFs);
displayEventCRFs = hideCRFManager.removeHiddenEventCRFBeans(displayEventCRFs);
}
// >>
request.setAttribute(BEAN_STUDY_EVENT, seb);
request.setAttribute("doRuleSetsExist", doRuleSetsExist);
request.setAttribute(BEAN_STUDY_SUBJECT, studySubjectBean);
request.setAttribute(BEAN_UNCOMPLETED_EVENTDEFINITIONCRFS, uncompletedEventDefinitionCRFs);
request.setAttribute(BEAN_DISPLAY_EVENT_CRFS, displayEventCRFs);
// @pgawade 31-Aug-2012 fix for issue #15315: Reverting to set the request variable "beans" back
// this is for generating side info panel
ArrayList beans = ViewStudySubjectServlet.getDisplayStudyEventsForStudySubject(studySubjectBean, sm.getDataSource(), ub, currentRole);
request.setAttribute("beans", beans);
EventCRFBean ecb = new EventCRFBean();
ecb.setStudyEventId(eventId);
request.setAttribute("eventCRF", ecb);
// Make available the study
request.setAttribute("study", currentStudy);
forwardPage(Page.ENTER_DATA_FOR_STUDY_EVENT);
}
use of org.akaza.openclinica.service.crfdata.HideCRFManager in project OpenClinica by OpenClinica.
the class ViewStudySubjectServlet method processRequest.
@Override
public void processRequest() throws Exception {
SubjectDAO sdao = new SubjectDAO(sm.getDataSource());
StudySubjectDAO subdao = new StudySubjectDAO(sm.getDataSource());
CRFVersionDAO cvdao = new CRFVersionDAO(sm.getDataSource());
FormProcessor fp = new FormProcessor(request);
// studySubjectId
int studySubId = fp.getInt("id", true);
String from = fp.getString("from");
String module = fp.getString(MODULE);
request.setAttribute(MODULE, module);
// if coming from change crf version -> display message
String crfVersionChangeMsg = fp.getString("isFromCRFVersionChange");
if (crfVersionChangeMsg != null && !crfVersionChangeMsg.equals("")) {
addPageMessage(crfVersionChangeMsg);
}
if (studySubId == 0) {
addPageMessage(respage.getString("please_choose_a_subject_to_view"));
forwardPage(Page.LIST_STUDY_SUBJECTS);
} else {
if (!StringUtil.isBlank(from)) {
// form ListSubject or
request.setAttribute("from", from);
// ListStudySubject
} else {
request.setAttribute("from", "");
}
StudySubjectBean studySub = (StudySubjectBean) subdao.findByPK(studySubId);
request.setAttribute("studySub", studySub);
request.setAttribute("originatingPage", URLEncoder.encode("ViewStudySubject?id=" + studySub.getId(), "UTF-8"));
int studyId = studySub.getStudyId();
int subjectId = studySub.getSubjectId();
StudyDAO studydao = new StudyDAO(sm.getDataSource());
StudyBean study = (StudyBean) studydao.findByPK(studyId);
// Check if this StudySubject would be accessed from the Current Study
if (studySub.getStudyId() != currentStudy.getId()) {
if (currentStudy.getParentStudyId() > 0) {
addPageMessage(respage.getString("no_have_correct_privilege_current_study") + " " + respage.getString("change_active_study_or_contact"));
forwardPage(Page.MENU_SERVLET);
return;
} else {
// The SubjectStudy is not belong to currentstudy and current study is not a site.
Collection sites = studydao.findOlnySiteIdsByStudy(currentStudy);
if (!sites.contains(study.getId())) {
addPageMessage(respage.getString("no_have_correct_privilege_current_study") + " " + respage.getString("change_active_study_or_contact"));
forwardPage(Page.MENU_SERVLET);
return;
}
}
}
// If the study subject derives from a site, and is being viewed
// from a parent study,
// then the study IDs will be different. However, since each note is
// saved with the specific
// study ID, then its study ID may be different than the study
// subject's ID.
boolean subjectStudyIsCurrentStudy = studyId == currentStudy.getId();
boolean isParentStudy = study.getParentStudyId() < 1;
// Get any disc notes for this subject : studySubId
DiscrepancyNoteDAO discrepancyNoteDAO = new DiscrepancyNoteDAO(sm.getDataSource());
List<DiscrepancyNoteBean> allNotesforSubject = new ArrayList<DiscrepancyNoteBean>();
// These methods return only parent disc notes
if (subjectStudyIsCurrentStudy && isParentStudy) {
allNotesforSubject = discrepancyNoteDAO.findAllSubjectByStudyAndId(study, subjectId);
allNotesforSubject.addAll(discrepancyNoteDAO.findAllStudySubjectByStudyAndId(study, studySubId));
} else {
if (!isParentStudy) {
StudyBean stParent = (StudyBean) studydao.findByPK(study.getParentStudyId());
allNotesforSubject = discrepancyNoteDAO.findAllSubjectByStudiesAndSubjectId(stParent, study, subjectId);
allNotesforSubject.addAll(discrepancyNoteDAO.findAllStudySubjectByStudiesAndStudySubjectId(stParent, study, studySubId));
} else {
allNotesforSubject = discrepancyNoteDAO.findAllSubjectByStudiesAndSubjectId(currentStudy, study, subjectId);
allNotesforSubject.addAll(discrepancyNoteDAO.findAllStudySubjectByStudiesAndStudySubjectId(currentStudy, study, studySubId));
}
}
if (!allNotesforSubject.isEmpty()) {
setRequestAttributesForNotes(allNotesforSubject);
}
SubjectBean subject = (SubjectBean) sdao.findByPK(subjectId);
if (currentStudy.getStudyParameterConfig().getCollectDob().equals("2")) {
Date dob = subject.getDateOfBirth();
if (dob != null) {
Calendar cal = Calendar.getInstance();
cal.setTime(dob);
int year = cal.get(Calendar.YEAR);
request.setAttribute("yearOfBirth", new Integer(year));
} else {
request.setAttribute("yearOfBirth", "");
}
}
request.setAttribute("subject", subject);
/*
* StudyDAO studydao = new StudyDAO(sm.getDataSource()); StudyBean
* study = (StudyBean) studydao.findByPK(studyId);
*/
// YW 11-26-2007 <<
StudyParameterValueDAO spvdao = new StudyParameterValueDAO(sm.getDataSource());
study.getStudyParameterConfig().setCollectDob(spvdao.findByHandleAndStudy(studyId, "collectDob").getValue());
// YW >>
request.setAttribute("subjectStudy", study);
if (study.getParentStudyId() > 0) {
// this is a site,find parent
StudyBean parentStudy2 = (StudyBean) studydao.findByPK(study.getParentStudyId());
request.setAttribute("parentStudy", parentStudy2);
} else {
request.setAttribute("parentStudy", new StudyBean());
}
ArrayList children = (ArrayList) sdao.findAllChildrenByPK(subjectId);
request.setAttribute("children", children);
// find study events
StudyEventDAO sedao = new StudyEventDAO(sm.getDataSource());
StudyEventDefinitionDAO seddao = new StudyEventDefinitionDAO(sm.getDataSource());
StudySubjectService studySubjectService = (StudySubjectService) WebApplicationContextUtils.getWebApplicationContext(getServletContext()).getBean("studySubjectService");
List<DisplayStudyEventBean> displayEvents = studySubjectService.getDisplayStudyEventsForStudySubject(studySub, ub, currentRole);
for (int i = 0; i < displayEvents.size(); i++) {
DisplayStudyEventBean decb = displayEvents.get(i);
if (!(currentRole.isDirector() || currentRole.isCoordinator()) && decb.getStudyEvent().getSubjectEventStatus().isLocked()) {
decb.getStudyEvent().setEditable(false);
}
}
if (currentStudy.getParentStudyId() > 0) {
HideCRFManager hideCRFManager = HideCRFManager.createHideCRFManager();
for (DisplayStudyEventBean displayStudyEventBean : displayEvents) {
hideCRFManager.removeHiddenEventCRF(displayStudyEventBean);
}
}
EntityBeanTable table = fp.getEntityBeanTable();
// sort by start
table.setSortingIfNotExplicitlySet(1, false);
// date, desc
ArrayList allEventRows = DisplayStudyEventRow.generateRowsFromBeans(displayEvents);
String[] columns = { resword.getString("event") + " (" + resword.getString("occurrence_number") + ")", resword.getString("start_date1"), resword.getString("location"), resword.getString("status"), resword.getString("actions"), resword.getString("CRFs_atrib") };
table.setColumns(new ArrayList(Arrays.asList(columns)));
table.hideColumnLink(4);
table.hideColumnLink(5);
if (!"removed".equalsIgnoreCase(studySub.getStatus().getName()) && !"auto-removed".equalsIgnoreCase(studySub.getStatus().getName())) {
if (currentStudy.getStatus().isAvailable() && !currentRole.getRole().equals(Role.MONITOR)) {
table.addLink(resword.getString("add_new_event"), "CreateNewStudyEvent?" + CreateNewStudyEventServlet.INPUT_STUDY_SUBJECT_ID_FROM_VIEWSUBJECT + "=" + studySub.getId());
}
}
HashMap args = new HashMap();
args.put("id", new Integer(studySubId).toString());
table.setQuery("ViewStudySubject", args);
table.setRows(allEventRows);
table.computeDisplay();
request.setAttribute("table", table);
SubjectGroupMapDAO sgmdao = new SubjectGroupMapDAO(sm.getDataSource());
ArrayList groupMaps = (ArrayList) sgmdao.findAllByStudySubject(studySubId);
request.setAttribute("groups", groupMaps);
// find audit log for events
AuditEventDAO aedao = new AuditEventDAO(sm.getDataSource());
ArrayList logs = aedao.findEventStatusLogByStudySubject(studySubId);
// logger.warning("^^^ retrieved logs");
UserAccountDAO udao = new UserAccountDAO(sm.getDataSource());
ArrayList eventLogs = new ArrayList();
// logger.warning("^^^ starting to iterate");
for (int i = 0; i < logs.size(); i++) {
AuditEventBean avb = (AuditEventBean) logs.get(i);
StudyEventAuditBean sea = new StudyEventAuditBean();
sea.setAuditEvent(avb);
StudyEventBean se = (StudyEventBean) sedao.findByPK(avb.getEntityId());
StudyEventDefinitionBean sed = (StudyEventDefinitionBean) seddao.findByPK(se.getStudyEventDefinitionId());
sea.setDefinition(sed);
String old = avb.getOldValue().trim();
try {
if (!StringUtil.isBlank(old)) {
SubjectEventStatus oldStatus = SubjectEventStatus.get(new Integer(old).intValue());
sea.setOldSubjectEventStatus(oldStatus);
}
String newValue = avb.getNewValue().trim();
if (!StringUtil.isBlank(newValue)) {
SubjectEventStatus newStatus = SubjectEventStatus.get(new Integer(newValue).intValue());
sea.setNewSubjectEventStatus(newStatus);
}
} catch (NumberFormatException e) {
e.printStackTrace();
}
UserAccountBean updater = (UserAccountBean) udao.findByPK(avb.getUserId());
sea.setUpdater(updater);
eventLogs.add(sea);
}
request.setAttribute("eventLogs", eventLogs);
forwardPage(Page.VIEW_STUDY_SUBJECT);
}
}
use of org.akaza.openclinica.service.crfdata.HideCRFManager in project OpenClinica by OpenClinica.
the class ListEventsForSubjectServlet method processRequest.
@Override
public void processRequest() throws Exception {
FormProcessor fp = new FormProcessor(request);
// checks which module the requests are from
String module = fp.getString(MODULE);
request.setAttribute(MODULE, module);
String pageNumber = fp.getString(ListStudySubjectServlet.SUBJECT_PAGE_NUMBER);
String filterKeyword = fp.getString(ListStudySubjectServlet.FILTER_KEYWORD);
String tmpSearch = fp.getString(ListStudySubjectServlet.SEARCH_SUBMITTED);
boolean searchSubmitted = !(tmpSearch == null || "".equalsIgnoreCase(tmpSearch)) && !"".equalsIgnoreCase(filterKeyword);
SubjectMatrixUtil matrixUtil = new SubjectMatrixUtil();
String query = matrixUtil.createPaginatingQuery(pageNumber);
StringBuilder extendedQuery = new StringBuilder(query);
// URL encode the search keyword, since it will be a parameter in the
// URL
String filterKeywordURLEncode = java.net.URLEncoder.encode(filterKeyword, "UTF-8");
if (searchSubmitted) {
extendedQuery.append("&ebl_sortColumnInd=0&submitted=1&ebl_sortAscending=1&ebl_filtered=1");
extendedQuery.append("&").append(ListStudySubjectServlet.FILTER_KEYWORD).append("=").append(filterKeywordURLEncode);
}
request.setAttribute(ListStudySubjectServlet.PAGINATING_QUERY, extendedQuery.toString());
int definitionId = fp.getInt("defId");
int tabId = fp.getInt("tab");
if (definitionId <= 0) {
addPageMessage(respage.getString("please_choose_an_ED_ta_to_vies_details"));
forwardPage(Page.LIST_STUDY_SUBJECTS);
return;
}
StudyEventDefinitionDAO seddao = new StudyEventDefinitionDAO(sm.getDataSource());
StudyEventDefinitionBean sed = (StudyEventDefinitionBean) seddao.findByPK(definitionId);
StudySubjectDAO sdao = new StudySubjectDAO(sm.getDataSource());
StudyEventDAO sedao = new StudyEventDAO(sm.getDataSource());
SubjectGroupMapDAO sgmdao = new SubjectGroupMapDAO(sm.getDataSource());
StudyGroupClassDAO sgcdao = new StudyGroupClassDAO(sm.getDataSource());
EventCRFDAO ecdao = new EventCRFDAO(sm.getDataSource());
EventDefinitionCRFDAO edcdao = new EventDefinitionCRFDAO(sm.getDataSource());
CRFDAO crfdao = new CRFDAO(sm.getDataSource());
// find all the groups in the current study
ArrayList studyGroupClasses = sgcdao.findAllActiveByStudy(currentStudy);
// information for the event tabs
ArrayList allDefs = seddao.findAllActiveByStudy(currentStudy);
boolean isASite = false;
if (currentStudy.getParentStudyId() > 0) {
StudyDAO stdao = new StudyDAO(sm.getDataSource());
StudyBean parent = (StudyBean) stdao.findByPK(currentStudy.getParentStudyId());
allDefs = seddao.findAllActiveByStudy(parent);
}
ArrayList eventDefinitionCRFs = (ArrayList) edcdao.findAllActiveByEventDefinitionId(this.currentStudy, definitionId);
for (int i = 0; i < eventDefinitionCRFs.size(); i++) {
EventDefinitionCRFBean edc = (EventDefinitionCRFBean) eventDefinitionCRFs.get(i);
CRFBean crf = (CRFBean) crfdao.findByPK(edc.getCrfId());
edc.setCrf(crf);
}
request.setAttribute("studyGroupClasses", studyGroupClasses);
request.setAttribute("allDefsArray", allDefs);
request.setAttribute("allDefsNumber", new Integer(allDefs.size()));
request.setAttribute("groupSize", new Integer(studyGroupClasses.size()));
request.setAttribute("eventDefCRFSize", new Integer(eventDefinitionCRFs.size()));
request.setAttribute("tabId", new Integer(tabId));
request.setAttribute("studyEventDef", sed);
request.setAttribute("eventDefCRFs", eventDefinitionCRFs);
// find all the subjects in current study
ArrayList subjects = sdao.findAllByStudyId(currentStudy.getId());
ArrayList displayStudySubs = new ArrayList();
for (int i = 0; i < subjects.size(); i++) {
StudySubjectBean studySub = (StudySubjectBean) subjects.get(i);
ArrayList groups = (ArrayList) sgmdao.findAllByStudySubject(studySub.getId());
ArrayList subGClasses = new ArrayList();
for (int j = 0; j < studyGroupClasses.size(); j++) {
StudyGroupClassBean sgc = (StudyGroupClassBean) studyGroupClasses.get(j);
boolean hasClass = false;
for (int k = 0; k < groups.size(); k++) {
SubjectGroupMapBean sgmb = (SubjectGroupMapBean) groups.get(k);
if (sgmb.getGroupClassName().equalsIgnoreCase(sgc.getName())) {
subGClasses.add(sgmb);
hasClass = true;
break;
}
}
if (!hasClass) {
subGClasses.add(new SubjectGroupMapBean());
}
}
// find all eventcrfs for each event, for each event tab
ArrayList displaySubjectEvents = new ArrayList();
ArrayList<DisplayStudyEventBean> displayEvents = new ArrayList<DisplayStudyEventBean>();
ArrayList events = sedao.findAllByStudySubjectAndDefinition(studySub, sed);
for (int k = 0; k < events.size(); k++) {
StudyEventBean seb = (StudyEventBean) events.get(k);
DisplayStudyEventBean dseb = ListStudySubjectServlet.getDisplayStudyEventsForStudySubject(studySub, seb, sm.getDataSource(), ub, currentRole, this.currentStudy);
// ArrayList eventCRFs = ecdao.findAllByStudyEvent(seb);
// ArrayList al =
// ViewStudySubjectServlet.getUncompletedCRFs(sm.getDataSource(),
// eventDefinitionCRFs, eventCRFs);
// dseb.getUncompletedCRFs().add(al);
displayEvents.add(dseb);
}
ArrayList al = new ArrayList();
for (int k = 0; k < displayEvents.size(); k++) {
DisplayStudyEventBean dseb = displayEvents.get(k);
ArrayList eventCRFs = dseb.getDisplayEventCRFs();
for (int a = 0; a < eventDefinitionCRFs.size(); a++) {
EventDefinitionCRFBean edc = (EventDefinitionCRFBean) eventDefinitionCRFs.get(a);
int crfId = edc.getCrfId();
boolean hasCRF = false;
for (int b = 0; b < eventCRFs.size(); b++) {
DisplayEventCRFBean decb = (DisplayEventCRFBean) eventCRFs.get(b);
// decb.getStage().getName() );
if (decb.getEventCRF().getCrf().getId() == crfId) {
dseb.getAllEventCRFs().add(decb);
// logger.info("hasCRf" + crfId +
// decb.getEventCRF().getCrf().getName());
hasCRF = true;
break;
}
}
if (hasCRF == false) {
DisplayEventCRFBean db = new DisplayEventCRFBean();
db.setEventDefinitionCRF(edc);
db.getEventDefinitionCRF().setCrf(edc.getCrf());
dseb.getAllEventCRFs().add(db);
// logger.info("noCRf" + crfId);
}
}
// Issue 3212 BWP <<
if (currentStudy.getParentStudyId() > 0) {
// check each eventDefCRFBean and set its isHidden property
// to true, if its
// persistent/database-derived hideCrf is true (domain rule:
// hide the CRF from users logged into a site)
HideCRFManager hideCRFManager = HideCRFManager.createHideCRFManager();
hideCRFManager.optionallyCheckHideCRFProperty(dseb);
// remove a DisplayEventCRFBean from a DisplayStudyEventBean
// in the list
// if it contains a hidden CRF in its event definition
hideCRFManager.removeHiddenEventCRF(dseb);
// generate a boolean request attribute indicating whether
// any of the CRFs
// should be hidden
boolean hideCRFs = hideCRFManager.studyEventHasAHideCRFProperty(dseb);
request.setAttribute("hideCRFs", hideCRFs);
}
// >>
}
DisplayStudySubjectBean dssb = new DisplayStudySubjectBean();
dssb.setStudySubject(studySub);
dssb.setStudyGroups(subGClasses);
dssb.setStudyEvents(displayEvents);
if (definitionId > 0) {
dssb.setSedId(definitionId);
} else {
dssb.setSedId(-1);
}
displayStudySubs.add(dssb);
}
EntityBeanTable table = fp.getEntityBeanTable();
ArrayList allStudyRows = DisplayStudySubjectEventsRow.generateRowsFromBeans(displayStudySubs);
ArrayList columnArray = new ArrayList();
columnArray.add(resword.getString("ID"));
columnArray.add(resword.getString("subject_status"));
columnArray.add(resword.getString("gender"));
for (int i = 0; i < studyGroupClasses.size(); i++) {
StudyGroupClassBean sgc = (StudyGroupClassBean) studyGroupClasses.get(i);
columnArray.add(sgc.getName());
}
// columnArray.add("Event Sequence");
columnArray.add(resword.getString("event_status"));
columnArray.add(resword.getString("event_date"));
// Issue 3212 BWP <<
HideCRFManager hideCRFMgr = HideCRFManager.createHideCRFManager();
hideCRFMgr.hideSpecifiedEventCRFDefBeans(eventDefinitionCRFs);
for (int i = 0; i < eventDefinitionCRFs.size(); i++) {
EventDefinitionCRFBean edc = (EventDefinitionCRFBean) eventDefinitionCRFs.get(i);
// Issue 3212 BWP <<
if (!(currentStudy.getParentStudyId() > 0)) {
columnArray.add(edc.getCrf().getName());
} else {
if (!edc.isHideCrf()) {
columnArray.add(edc.getCrf().getName());
}
}
// >>
}
columnArray.add(resword.getString("actions"));
String[] columns = new String[columnArray.size()];
columnArray.toArray(columns);
table.setColumns(new ArrayList(Arrays.asList(columns)));
table.setQuery("ListEventsForSubject?module=" + module + "&defId=" + definitionId + "&tab=" + tabId, new HashMap());
table.hideColumnLink(columnArray.size() - 1);
// if(currentStudy.getStatus().isAvailable()){
// table.addLink(resword.getString("add_new_subject"), "AddNewSubject");
// }
table.setRows(allStudyRows);
if (filterKeyword != null && !"".equalsIgnoreCase(filterKeyword)) {
table.setKeywordFilter(filterKeyword);
}
table.computeDisplay();
request.setAttribute("table", table);
forwardPage(Page.LIST_EVENTS_FOR_SUBJECT);
}
use of org.akaza.openclinica.service.crfdata.HideCRFManager in project OpenClinica by OpenClinica.
the class ViewRuleAssignmentNewServlet method createStudyEventForInfoPanel.
private void createStudyEventForInfoPanel() {
StudyEventDAO sedao = new StudyEventDAO(sm.getDataSource());
StudyEventDefinitionDAO seddao = new StudyEventDefinitionDAO(sm.getDataSource());
EventCRFDAO ecdao = new EventCRFDAO(sm.getDataSource());
ItemDAO itemdao = new ItemDAO(sm.getDataSource());
StudyBean studyWithEventDefinitions = currentStudy;
if (currentStudy.getParentStudyId() > 0) {
studyWithEventDefinitions = new StudyBean();
studyWithEventDefinitions.setId(currentStudy.getParentStudyId());
}
CRFDAO crfdao = new CRFDAO(sm.getDataSource());
ArrayList seds = seddao.findAllActiveByStudy(studyWithEventDefinitions);
HashMap events = new LinkedHashMap();
for (int i = 0; i < seds.size(); i++) {
StudyEventDefinitionBean sed = (StudyEventDefinitionBean) seds.get(i);
ArrayList<CRFBean> crfs = (ArrayList<CRFBean>) crfdao.findAllActiveByDefinition(sed);
if (currentStudy.getParentStudyId() > 0) {
// sift through these CRFs and see which ones are hidden
HideCRFManager hideCRFs = HideCRFManager.createHideCRFManager();
crfs = hideCRFs.removeHiddenCRFBeans(studyWithEventDefinitions, sed, crfs, sm.getDataSource());
}
if (!crfs.isEmpty()) {
events.put(sed, crfs);
}
}
request.setAttribute("eventlist", events);
request.setAttribute("crfCount", crfdao.getCountofActiveCRFs());
request.setAttribute("itemCount", itemdao.getCountofActiveItems());
request.setAttribute("ruleSetCount", getRuleSetService().getRuleSetDao().count(currentStudy));
}
Aggregations