use of org.akaza.openclinica.bean.managestudy.StudyEventBean in project OpenClinica by OpenClinica.
the class UrlRewriteServlet method getOpenClinicaResourceFromURL.
/**
* Method to parse the request URL parameters and get the respective
* database identifiers
*
* @param URLPath
* - example "S_CPCS/320999/SE_CPCS%5B1%5D/F_CPCS_1"
* @param queryString
* - example
* "format=html&mode=view&tabId=1&exitTo=ViewStudySubject"
* @return
*/
public OpenClinicaResource getOpenClinicaResourceFromURL(String URLPath) /*
* ,
* String
* queryString
*/
{
OpenClinicaResource openClinicaResource = new OpenClinicaResource();
if ((null != URLPath) && (!URLPath.equals(""))) {
if (URLPath.contains("/")) {
String[] tokens = URLPath.split("/");
if (tokens.length != 0) {
String URLParamValue = "";
StudyDAO stdao = new StudyDAO(getDataSource());
StudySubjectDAO ssubdao = new StudySubjectDAO(getDataSource());
StudyEventDefinitionDAO sedefdao = new StudyEventDefinitionDAO(getDataSource());
CRFDAO crfdao = new CRFDAO(getDataSource());
CRFVersionDAO crfvdao = new CRFVersionDAO(getDataSource());
ItemDAO idao = new ItemDAO(getDataSource());
ItemGroupDAO igdao = new ItemGroupDAO(getDataSource());
StudyEventDAO sedao = new StudyEventDAO(getDataSource());
StudyBean study = null;
StudySubjectBean subject = null;
StudyEventDefinitionBean sed = null;
CRFBean c = null;
CRFVersionBean cv = null;
ItemBean item = null;
ItemGroupBean ig = null;
StudyEventBean studyEvent = null;
Integer studySubjectId = 0;
Integer eventDefId = 0;
Integer eventRepeatKey = 0;
for (int i = 0; i < tokens.length; i++) {
// when interpreting these request URL parameters, the
// assumption is that the position of
// each type of parameters will be fixed. Meaning, study
// OID is always going to be at the start
// followed by StudySubjectKey followed by study event
// definition OID followed by
// study event repeat key followed by form OID followed
// by item group OID followed by
// item group repeat key followed by item OID
// It can also be done based on the start of OID value
// (example study OID presently
// starts with 'S_' but we will have to change it if we
// change the method of generating
// oID values in future.
URLParamValue = tokens[i].trim();
// System.out.println("URLParamValue::"+URLParamValue);
logger.info("URLPAramValue::" + URLParamValue);
if ((null != URLParamValue) && (!URLParamValue.equals(""))) {
switch(i) {
case 0:
{
// study OID
study = stdao.findByOid(URLParamValue);
// validate study OID
if (study == null) {
openClinicaResource.setInValid(true);
openClinicaResource.getMessages().add(resexception.getString("invalid_study_oid"));
return openClinicaResource;
} else {
openClinicaResource.setStudyOID(URLParamValue);
if (null != study) {
openClinicaResource.setStudyID(study.getId());
}
}
break;
}
case 1:
{
// StudySubjectKey
subject = ssubdao.findByOidAndStudy(URLParamValue, study.getId());
// validate subject OID
if (subject == null) {
openClinicaResource.setInValid(true);
openClinicaResource.getMessages().add(resexception.getString("invalid_subject_oid"));
return openClinicaResource;
} else {
openClinicaResource.setStudySubjectOID(URLParamValue);
if (null != subject) {
studySubjectId = subject.getId();
openClinicaResource.setStudySubjectID(studySubjectId);
}
}
break;
}
case 2:
{
// study event definition OID
// separate study event OID and study event
// repeat key
String seoid = "";
String eventOrdinal = "";
if (URLParamValue.contains("%5B") && URLParamValue.contains("%5D")) {
seoid = URLParamValue.substring(0, URLParamValue.indexOf("%5B"));
openClinicaResource.setStudyEventDefOID(seoid);
eventOrdinal = URLParamValue.substring(URLParamValue.indexOf("%5B") + 3, URLParamValue.indexOf("%5D"));
} else if (URLParamValue.contains("[") && URLParamValue.contains("]")) {
seoid = URLParamValue.substring(0, URLParamValue.indexOf("["));
logger.info("seoid" + seoid);
openClinicaResource.setStudyEventDefOID(seoid);
eventOrdinal = URLParamValue.substring(URLParamValue.indexOf("[") + 1, URLParamValue.indexOf("]"));
logger.info("eventOrdinal::" + eventOrdinal);
} else {
// event ordinal not specified
openClinicaResource.setInValid(true);
openClinicaResource.getMessages().add(resexception.getString("event_ordinal_not_specified"));
return openClinicaResource;
}
if ((null != seoid) && (null != study)) {
sed = sedefdao.findByOidAndStudy(seoid, study.getId(), study.getParentStudyId());
// validate study event oid
if (null == sed) {
openClinicaResource.setInValid(true);
openClinicaResource.getMessages().add(resexception.getString("invalid_event_oid"));
return openClinicaResource;
} else {
eventDefId = sed.getId();
openClinicaResource.setStudyEventDefID(eventDefId);
}
}
if (null != eventRepeatKey) {
eventRepeatKey = Integer.parseInt(eventOrdinal.trim());
// validate the event ordinal specified exists in database
studyEvent = (StudyEventBean) sedao.findByStudySubjectIdAndDefinitionIdAndOrdinal(subject.getId(), sed.getId(), eventRepeatKey);
// this method return new StudyEvent (not null) even if no studyEvent can be found
if (null == studyEvent || studyEvent.getId() == 0) {
openClinicaResource.setInValid(true);
openClinicaResource.getMessages().add(resexception.getString("invalid_event_ordinal"));
return openClinicaResource;
} else {
openClinicaResource.setStudyEventRepeatKey(eventRepeatKey);
}
}
break;
}
case 3:
{
// form OID
openClinicaResource.setFormVersionOID(URLParamValue);
// validate the crf version oid
cv = crfvdao.findByOid(URLParamValue);
if (cv == null) {
openClinicaResource.setInValid(true);
openClinicaResource.getMessages().add(resexception.getString("invalid_crf_oid"));
return openClinicaResource;
} else {
openClinicaResource.setFormVersionID(cv.getId());
// validate if crf is removed
if (cv.getStatus().equals(Status.DELETED)) {
openClinicaResource.setInValid(true);
openClinicaResource.getMessages().add(resexception.getString("removed_crf"));
return openClinicaResource;
} else {
if (null != study) {
// cv =
// crfvdao.findByCrfVersionOidAndStudy(URLParamValue,
// study.getId());
// if (null != cv) {
// openClinicaResource.setFormVersionID(cv.getId());
// openClinicaResource.setFormID(cv.getCrfId());
// }
HashMap studySubjectCRFDataDetails = sedao.getStudySubjectCRFData(study, studySubjectId, eventDefId, URLParamValue, eventRepeatKey);
if ((null != studySubjectCRFDataDetails) && (studySubjectCRFDataDetails.size() != 0)) {
if (studySubjectCRFDataDetails.containsKey("event_crf_id")) {
openClinicaResource.setEventCrfId((Integer) studySubjectCRFDataDetails.get("event_crf_id"));
}
if (studySubjectCRFDataDetails.containsKey("event_definition_crf_id")) {
openClinicaResource.setEventDefinitionCrfId((Integer) studySubjectCRFDataDetails.get("event_definition_crf_id"));
}
if (studySubjectCRFDataDetails.containsKey("study_event_id")) {
openClinicaResource.setStudyEventId((Integer) studySubjectCRFDataDetails.get("study_event_id"));
}
} else {
// no data was found in the database for the combination of parameters in the RESTful URL. There are 2 possible reasons:
// a. The data entry is not started yet for this event CRF. As of OpenClinica 3.1.3 we have not implemented the
// RESTful URL functionality in this case.
// b. The form version OID entered in the URL could be different than the one used in the data entry
openClinicaResource.setInValid(true);
openClinicaResource.getMessages().add(resexception.getString("either_no_data_for_crf_or_data_entry_not_started"));
return openClinicaResource;
}
}
}
}
break;
}
case 4:
{
// item group OID
// separate item group OID and item group
// repeat key
String igoid = "";
String igRepeatKey = "";
if (URLParamValue.contains("[")) {
igoid = URLParamValue.substring(1, URLParamValue.indexOf("["));
igRepeatKey = URLParamValue.substring(URLParamValue.indexOf("["), URLParamValue.indexOf("}]"));
}
if ((null != igoid) && (null != cv)) {
ig = igdao.findByOidAndCrf(URLParamValue, cv.getCrfId());
if (null != ig) {
openClinicaResource.setItemGroupID(ig.getId());
}
}
if (null != igRepeatKey) {
openClinicaResource.setItemGroupRepeatKey(Integer.parseInt(igRepeatKey));
}
break;
}
case 5:
{
// item = idao.find
break;
}
}
// switch end
}
}
}
}
}
return openClinicaResource;
}
use of org.akaza.openclinica.bean.managestudy.StudyEventBean in project OpenClinica by OpenClinica.
the class BatchCRFMigrationController method run.
@Override
public void run() {
dataSource = helperObject.getDataSource();
cBean = helperObject.getcBean();
reportLog = helperObject.getReportLog();
stBean = helperObject.getStBean();
resterms = helperObject.getResterms();
userAccountBean = helperObject.getUserAccountBean();
openClinicaMailSender = helperObject.getOpenClinicaMailSender();
sessionFactory = helperObject.getSessionFactory();
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
helperObject.setSession(session);
int i = 0;
for (EventCRFBean eventCrfToMigrate : helperObject.getEventCrfListToMigrate()) {
i++;
executeMigrationAction(helperObject, eventCrfToMigrate);
if (i % 50 == 0) {
session.flush();
session.clear();
}
StudySubjectBean ssBean = (StudySubjectBean) ssdao().findByPK(eventCrfToMigrate.getStudySubjectId());
StudyBean sBean = (StudyBean) sdao().findByPK(ssBean.getStudyId());
StudyEventBean seBean = (StudyEventBean) sedao().findByPK(eventCrfToMigrate.getStudyEventId());
StudyEventDefinitionBean sedBean = (StudyEventDefinitionBean) seddao().findByPK(seBean.getStudyEventDefinitionId());
reportLog.getLogs().add(cBean.getName() + "," + helperObject.getSourceCrfVersionBean().getName() + "," + helperObject.getTargetCrfVersionBean().getName() + "," + ssBean.getLabel() + "," + sBean.getName() + "," + sedBean.getName() + "," + seBean.getSampleOrdinal());
}
tx.commit();
session.close();
String fileName = new SimpleDateFormat("_yyyy-MM-dd-hhmmssSaa'.txt'").format(new Date());
fileName = "logFile" + fileName;
File file = createLogFile(fileName);
PrintWriter writer = null;
try {
writer = openFile(file);
} catch (FileNotFoundException | UnsupportedEncodingException e) {
e.printStackTrace();
} finally {
writer.print(toStringTextFormat(reportLog, resterms, stBean, cBean));
closeFile(writer);
}
String reportUrl = getReportUrl(fileName, helperObject.getUrlBase());
String fullName = userAccountBean.getFirstName() + " " + userAccountBean.getLastName();
StringBuilder body = new StringBuilder();
body.append(resterms.getString("Dear") + " " + fullName + ",<br><br>" + resterms.getString("Batch_CRF_version_migration_has_finished_running") + "<br>" + resterms.getString("Study") + ": " + stBean.getName() + "<br>" + resterms.getString("CRF") + ": " + cBean.getName() + "<br><br>" + resterms.getString("A_summary_report_of_the_migration_is_available_here") + ":<br>" + reportUrl + "<br><br>" + resterms.getString("Thank_you_Your_OpenClinica_System"));
logger.info(body.toString());
openClinicaMailSender.sendEmail(userAccountBean.getEmail(), EmailEngine.getAdminEmail(), resterms.getString("Batch_Migration_Complete_For") + " " + stBean.getName(), body.toString(), true);
}
use of org.akaza.openclinica.bean.managestudy.StudyEventBean in project OpenClinica by OpenClinica.
the class CrfBusinessLogicHelper method markCRFComplete.
/**
* The following methods are for 'mark CRF complete' Note that we will also wrap Study Event status changes in this
* code, possibly split out in a later release, tbh 06/2008
*
* @return
*/
public boolean markCRFComplete(EventCRFBean ecb, UserAccountBean ub) throws Exception {
// locale = LocaleResolver.getLocale(request);
// < respage =
// ResourceBundle.getBundle("org.akaza.openclinica.i18n.page_messages",
// locale);
// < restext =
// ResourceBundle.getBundle("org.akaza.openclinica.i18n.notes",locale);
// <
// resexception=ResourceBundle.getBundle(
// "org.akaza.openclinica.i18n.exceptions",locale);
// getEventCRFBean();
// getEventDefinitionCRFBean();
DataEntryStage stage = ecb.getStage();
EventCRFDAO eventCrfDao = new EventCRFDAO(ds);
ItemDataDAO itemDataDao = new ItemDataDAO(ds);
StudyDAO sdao = new StudyDAO(ds);
StudySubjectDAO ssdao = new StudySubjectDAO(ds);
StudyBean study = sdao.findByStudySubjectId(ecb.getStudySubjectId());
EventDefinitionCRFBean edcb = getEventDefinitionCrfByStudyEventAndCrfVersion(ecb, study);
// StudyEventDAO studyEventDao = new StudyEventDAO(ds);
// StudyEventBean studyEventBean = (StudyEventBean)
// studyEventDao.findByPK(ecb.getStudyEventId());
// Status studyEventStatus = studyEventBean.getStatus();
StudyEventDefinitionDAO studyEventDefinitionDao = new StudyEventDefinitionDAO(ds);
StudyEventDefinitionBean sedBean = (StudyEventDefinitionBean) studyEventDefinitionDao.findByPK(edcb.getStudyEventDefinitionId());
CRFDAO crfDao = new CRFDAO(ds);
ArrayList crfs = (ArrayList) crfDao.findAllActiveByDefinition(sedBean);
sedBean.setCrfs(crfs);
// request.setAttribute(TableOfContentsServlet.INPUT_EVENT_CRF_BEAN,
// ecb);
// request.setAttribute(INPUT_EVENT_CRF_ID, new
// Integer(ecb.getId()));
logger.debug("inout_event_crf_id:" + ecb.getId());
logger.debug("inout_study_event_def_id:" + sedBean.getId());
// below bit is from DataEntryServlet, is more appropriate for filling
// in by hand than by automatic
// removing this in favor of the more streamlined effect below, tbh
// 06/2008
// Page errorPage = getJSPPage();
// if (stage.equals(DataEntryStage.UNCOMPLETED) ||
// stage.equals(DataEntryStage.DOUBLE_DATA_ENTRY_COMPLETE) ||
// stage.equals(DataEntryStage.LOCKED)) {
// logger.info(
// "addPageMessage(respage.getString(\"not_mark_CRF_complete1\"))");
// return false;
// }
//
// if (stage.equals(DataEntryStage.INITIAL_DATA_ENTRY_COMPLETE) ||
// stage.equals(DataEntryStage.DOUBLE_DATA_ENTRY)) {
//
// /*
// * if (!edcb.isDoubleEntry()) {
// *
// logger.info(
// "addPageMessage(respage.getString(\"not_mark_CRF_complete2\"))");
// * return false; }
// *
// */
// }
//
// /*
// * if (!isEachSectionReviewedOnce()) { addPageMessage("You may not
// mark
// * this Event CRF complete, because there are some sections which have
// * not been reviewed once."); return false; }
// */
//
// if (!isEachRequiredFieldFillout(ecb)) {
// logger.info(
// "addPageMessage(respage.getString(\"not_mark_CRF_complete4\"))");
// return false;
// }
//
// /*
// * if (ecb.getInterviewerName().trim().equals("")) { throw new
// * InconsistentStateException(errorPage, "You may not mark this Event
// * CRF complete, because the interviewer name is blank."); }
// */
Status newStatus = ecb.getStatus();
DataEntryStage newStage = ecb.getStage();
boolean ide = true;
// currently we are setting the event crf status to complete, so this
// block is all to
// complete, tbh
// if (stage.equals(DataEntryStage.INITIAL_DATA_ENTRY) &&
// edcb.isDoubleEntry()) {
// newStatus = Status.PENDING;
// ecb.setUpdaterId(ub.getId());
// ecb.setUpdater(ub);
// ecb.setUpdatedDate(new Date());
// ecb.setDateCompleted(new Date());
// } else if (stage.equals(DataEntryStage.INITIAL_DATA_ENTRY) &&
// !edcb.isDoubleEntry()) {
// newStatus = Status.UNAVAILABLE;
// ecb.setUpdaterId(ub.getId());
// ecb.setUpdater(ub);
// ecb.setUpdatedDate(new Date());
// ecb.setDateCompleted(new Date());
// ecb.setDateValidateCompleted(new Date());
// } else if
// (stage.equals(DataEntryStage.INITIAL_DATA_ENTRY_COMPLETE)
// || stage.equals(DataEntryStage.DOUBLE_DATA_ENTRY)) {
// newStatus = Status.UNAVAILABLE;
// ecb.setDateValidateCompleted(new Date());
// ide = false;
// }
newStatus = Status.UNAVAILABLE;
// ecb.setUpdaterId(ub.getId());
ecb.setUpdater(ub);
ecb.setUpdatedDate(new Date());
ecb.setDateCompleted(new Date());
ecb.setDateValidateCompleted(new Date());
/*
* //for the non-reviewed sections, no item data in DB yet, need to //create them if
* (!isEachSectionReviewedOnce()) { boolean canSave = saveItemsToMarkComplete(newStatus); if (canSave == false){
* addPageMessage("You may not mark this Event CRF complete, because there are some required entries which have
* not been filled out."); return false; } }
*/
ecb.setStatus(newStatus);
ecb.setStage(newStage);
ecb = (EventCRFBean) eventCrfDao.update(ecb);
logger.debug("just updated event crf id: " + ecb.getId());
// note the below statement only updates the DATES, not the STATUS
eventCrfDao.markComplete(ecb, ide);
// update all the items' status to complete
itemDataDao.updateStatusByEventCRF(ecb, newStatus);
// change status for study event
StudyEventDAO sedao = new StudyEventDAO(ds);
StudyEventBean seb = (StudyEventBean) sedao.findByPK(ecb.getStudyEventId());
seb.setUpdatedDate(new Date());
seb.setUpdater(ub);
// updates with Pauls observation from bug:2488:
// 1. If there is only one CRF in the event (whether the CRF was
// required or not), and data was imported for it, the status of the
// event should be Completed.
//
logger.debug("sed bean get crfs get size: " + sedBean.getCrfs().size());
logger.debug("edcb get crf id: " + edcb.getCrfId() + " version size? " + edcb.getVersions().size());
logger.debug("ecb get crf id: " + ecb.getCrf().getId());
logger.debug("ecb get crf version id: " + ecb.getCRFVersionId());
if (sedBean.getCrfs().size() == 1) {
seb.setSubjectEventStatus(SubjectEventStatus.COMPLETED);
logger.info("just set subj event status to -- COMPLETED --");
} else // removing sedBean.getCrfs().size() > 1 &&
if (areAllRequired(seb, study) && !areAllCompleted(seb, study)) {
seb.setSubjectEventStatus(SubjectEventStatus.DATA_ENTRY_STARTED);
logger.info("just set subj event status to -- DATAENTRYSTARTED --");
} else // removing sedBean.getCrfs().size() > 1 &&
if (!areAllRequired(seb, study)) {
if (areAllRequiredCompleted(seb, study)) {
seb.setSubjectEventStatus(SubjectEventStatus.COMPLETED);
logger.info("just set subj event status to -- 3completed3 --");
} else {
seb.setSubjectEventStatus(SubjectEventStatus.DATA_ENTRY_STARTED);
logger.info("just set subj event status to -- DATAENTRYSTARTED --");
}
} else if (noneAreRequired(seb, study)) {
seb.setSubjectEventStatus(SubjectEventStatus.COMPLETED);
logger.info("just set subj event status to -- 5completed5 --");
}
logger.debug("just set subj event status, final status is " + seb.getSubjectEventStatus().getName());
logger.debug("final overall status is " + seb.getStatus().getName());
seb = (StudyEventBean) sedao.update(seb);
return true;
}
use of org.akaza.openclinica.bean.managestudy.StudyEventBean in project OpenClinica by OpenClinica.
the class StudyEventRow method compareColumn.
/*
* (non-Javadoc)
*
* @see org.akaza.openclinica.core.EntityBeanRow#compareColumn(java.lang.Object,
* int)
*/
@Override
protected int compareColumn(Object row, int sortingColumn) {
if (!row.getClass().equals(StudyEventRow.class)) {
return 0;
}
StudyEventBean thisEvent = (StudyEventBean) bean;
StudyEventBean argEvent = (StudyEventBean) ((StudyEventRow) row).bean;
int answer = 0;
switch(sortingColumn) {
case COL_STUDY_SUBJECT_LABEL:
answer = thisEvent.getStudySubjectLabel().toLowerCase().compareTo(argEvent.getStudySubjectLabel().toLowerCase());
break;
case COL_START_DATE:
answer = compareDate(thisEvent.getDateStarted(), argEvent.getDateStarted());
break;
case COL_SUBJECT_EVENT_STATUS:
answer = thisEvent.getSubjectEventStatus().compareTo(argEvent.getSubjectEventStatus());
break;
}
return answer;
}
use of org.akaza.openclinica.bean.managestudy.StudyEventBean in project OpenClinica by OpenClinica.
the class SubjectIdSDVFactory method getNumberCompletedEventCRFs.
private int getNumberCompletedEventCRFs(List<EventCRFBean> eventCRFBeans) {
StudyEventDAO studyEventDAO = new StudyEventDAO(dataSource);
StudyEventBean studyEventBean = null;
int counter = 0;
int statusId = 0;
for (EventCRFBean eventBean : eventCRFBeans) {
studyEventBean = (StudyEventBean) studyEventDAO.findByPK(eventBean.getStudyEventId());
statusId = studyEventBean.getSubjectEventStatus().getId();
if (statusId == 4) {
counter++;
}
}
return counter;
}
Aggregations