@Override public void processRequest() throws Exception { SubjectDAO sdao = new SubjectDAO(sm.getDataSource()); FormProcessor fp = new FormProcessor(request); int subjectId = fp.getInt("id"); String action = fp.getString("action"); if (subjectId == 0 || StringUtil.isBlank(action)) { addPageMessage(respage.getString("please_choose_a_subject_to_remove")); forwardPage(Page.SUBJECT_LIST_SERVLET); } else { SubjectBean subject = (SubjectBean) sdao.findByPK(subjectId); // find all study subjects StudySubjectDAO ssdao = new StudySubjectDAO(sm.getDataSource()); ArrayList studySubs = ssdao.findAllBySubjectId(subjectId); // find study events StudyEventDAO sedao = new StudyEventDAO(sm.getDataSource()); ArrayList events = sedao.findAllBySubjectId(subjectId); if ("confirm".equalsIgnoreCase(action)) { request.setAttribute("subjectToRemove", subject); request.setAttribute("studySubs", studySubs); request.setAttribute("events", events); forwardPage(Page.REMOVE_SUBJECT); } else { logger.info("submit to remove the subject"); // change all statuses to deleted subject.setStatus(Status.DELETED); subject.setUpdater(ub); subject.setUpdatedDate(new Date()); sdao.update(subject); // remove subject references from study for (int i = 0; i < studySubs.size(); i++) { StudySubjectBean studySub = (StudySubjectBean) studySubs.get(i); if (!studySub.getStatus().equals(Status.DELETED)) { studySub.setStatus(Status.AUTO_DELETED); studySub.setUpdater(ub); studySub.setUpdatedDate(new Date()); ssdao.update(studySub); } } EventCRFDAO ecdao = new EventCRFDAO(sm.getDataSource()); for (int j = 0; j < events.size(); j++) { StudyEventBean event = (StudyEventBean) events.get(j); if (!event.getStatus().equals(Status.DELETED)) { event.setStatus(Status.AUTO_DELETED); event.setUpdater(ub); event.setUpdatedDate(new Date()); sedao.update(event); ArrayList eventCRFs = ecdao.findAllByStudyEvent(event); ItemDataDAO iddao = new ItemDataDAO(sm.getDataSource()); for (int k = 0; k < eventCRFs.size(); k++) { EventCRFBean eventCRF = (EventCRFBean) eventCRFs.get(k); if (!eventCRF.getStatus().equals(Status.DELETED)) { eventCRF.setStatus(Status.AUTO_DELETED); eventCRF.setUpdater(ub); eventCRF.setUpdatedDate(new Date()); ecdao.update(eventCRF); // remove all the item data ArrayList itemDatas = iddao.findAllByEventCRFId(eventCRF.getId()); for (int a = 0; a < itemDatas.size(); a++) { ItemDataBean item = (ItemDataBean) itemDatas.get(a); if (!item.getStatus().equals(Status.DELETED)) { item.setStatus(Status.AUTO_DELETED); item.setUpdater(ub); item.setUpdatedDate(new Date()); iddao.update(item); } } } } } } String emailBody = respage.getString("the_subject") + " " + respage.getString("has_been_removed_succesfully"); addPageMessage(emailBody); // sendEmail(emailBody); forwardPage(Page.SUBJECT_LIST_SERVLET); } } }