Search in sources :

Example 76 with StudyDAO

use of org.akaza.openclinica.dao.managestudy.StudyDAO in project OpenClinica by OpenClinica.

the class ViewSectionDataEntryRESTUrlServlet method processRequest.

@Override
public void processRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
    FormProcessor fp = new FormProcessor(request);
    StudyBean currentStudy = (StudyBean) request.getSession().getAttribute("study");
    EventCRFBean ecb = (EventCRFBean) request.getAttribute(INPUT_EVENT_CRF);
    SectionBean sb = (SectionBean) request.getAttribute(SECTION_BEAN);
    boolean isSubmitted = false;
    EventDefinitionCRFBean edcb = (EventDefinitionCRFBean) request.getAttribute(EVENT_DEF_CRF_BEAN);
    if (!fp.getString("exitTo").equals("")) {
        request.setAttribute("exitTo", request.getContextPath() + "/" + fp.getString("exitTo"));
    }
    int crfVersionId = fp.getInt("crfVersionId", true);
    Integer sectionId = (Integer) request.getAttribute("sectionId");
    if (sectionId == null || sectionId == 0) {
        sectionId = new Integer(1);
    }
    int eventCRFId = fp.getInt(EVENT_CRF_ID, true);
    int studySubjectId = fp.getInt("studySubjectId", true);
    String action = fp.getString("action");
    HttpSession session = request.getSession();
    String fromResolvingNotes = fp.getString("fromResolvingNotes", true);
    if (StringUtil.isBlank(fromResolvingNotes)) {
        session.removeAttribute(ViewNotesServlet.WIN_LOCATION);
        session.removeAttribute(ViewNotesServlet.NOTES_TABLE);
    }
    // Added for
    request.setAttribute("studySubjectId", studySubjectId + "");
    // Mantis
    // Issue
    // 2268
    // Added
    request.setAttribute("crfListPage", fp.getString("crfListPage"));
    // for
    // Mantis
    // Issue
    // 2268
    // Added for
    request.setAttribute("eventId", fp.getString("eventId"));
    // Mantis
    // Issue
    // 2268
    // YW <<
    int sedId = fp.getInt("sedId");
    request.setAttribute("sedId", sedId + "");
    int crfId = fp.getInt("crfId");
    // BWP>> ... try to get crfId from crfVersionId
    if (crfId == 0 && crfVersionId > 0) {
        CRFVersionDAO crfVDao = new CRFVersionDAO(getDataSource());
        CRFVersionBean crvVBean = (CRFVersionBean) crfVDao.findByPK(crfVersionId);
        if (crvVBean != null) {
            crfId = crvVBean.getCrfId();
        }
    }
    // YW >>
    // int eventDefinitionCRFId = fp.getInt("eventDefinitionCRFId");
    Integer eventDefinitionCRFId = (Integer) (request.getAttribute("eventDefinitionCRFId"));
    EventDefinitionCRFDAO eventCrfDao = new EventDefinitionCRFDAO(getDataSource());
    edcb = (EventDefinitionCRFBean) eventCrfDao.findByPK(eventDefinitionCRFId);
    if (eventCRFId == 0 && edcb.getStudyId() != currentStudy.getParentStudyId() && edcb.getStudyId() != currentStudy.getId()) {
        addPageMessage(respage.getString("no_have_correct_privilege_current_study") + " " + respage.getString("change_study_contact_sysadmin"), request);
        throw new InsufficientPermissionException(Page.MENU_SERVLET, resexception.getString("not_director"), "1");
    }
    if (crfId == 0 && eventDefinitionCRFId > 0) {
        // eventCrfDao.findByPK(eventDefinitionCRFId);
        if (edcb != null) {
            crfId = edcb.getCrfId();
        }
    }
    request.setAttribute("crfId", crfId + "");
    request.setAttribute("eventDefinitionCRFId", eventDefinitionCRFId + "");
    String printVersion = fp.getString("print");
    // BWP>> this has to be removed for CRFs that do not display an
    // interviewdate
    // for a particular event
    session.removeAttribute("presetValues");
    EventCRFDAO ecdao = new EventCRFDAO(getDataSource());
    SectionDAO sdao = new SectionDAO(getDataSource());
    String age = "";
    if (sectionId == 0 && crfVersionId == 0 && eventCRFId == 0) {
        addPageMessage(respage.getString("please_choose_a_CRF_to_view"), request);
        // forwardPage(Page.SUBMIT_DATA_SERVLET);
        forwardPage(Page.LIST_STUDY_SUBJECTS_SERVLET, request, response);
        // >> changed tbh, 06/2009
        return;
    }
    if (studySubjectId > 0) {
        StudySubjectDAO ssdao = new StudySubjectDAO(getDataSource());
        StudySubjectBean sub = (StudySubjectBean) ssdao.findByPK(studySubjectId);
        request.setAttribute("studySubject", sub);
    }
    if (eventCRFId > 0) {
        // for event crf, the input crfVersionId from url =0
        ecb = (EventCRFBean) ecdao.findByPK(eventCRFId);
        StudyEventDAO sedao = new StudyEventDAO(getDataSource());
        StudyEventBean event = (StudyEventBean) sedao.findByPK(ecb.getStudyEventId());
        // event.getSubjectEventStatus().getName());
        if (event.getSubjectEventStatus().equals(SubjectEventStatus.LOCKED)) {
            request.setAttribute("isLocked", "yes");
        // System.out.println("this event crf is locked");
        } else // @pgawade 28-Aug-2012 Reverted the change no. 2 in
        // https://issuetracker.openclinica.com/view.php?id=12343#c56722
        {
            request.setAttribute("isLocked", "no");
        }
        if (studySubjectId <= 0) {
            studySubjectId = event.getStudySubjectId();
            request.setAttribute("studySubjectId", studySubjectId + "");
        }
        // Get the status/number of item discrepancy notes
        DiscrepancyNoteDAO dndao = new DiscrepancyNoteDAO(getDataSource());
        ArrayList<DiscrepancyNoteBean> allNotes = new ArrayList<DiscrepancyNoteBean>();
        List<DiscrepancyNoteBean> eventCrfNotes = new ArrayList<DiscrepancyNoteBean>();
        List<DiscrepancyNoteThread> noteThreads = new ArrayList<DiscrepancyNoteThread>();
        // if (eventCRFId > 0) {
        // this method finds only parent notes
        allNotes = dndao.findAllTopNotesByEventCRF(eventCRFId);
        // add interviewer.jsp related notes to this Collection
        eventCrfNotes = dndao.findOnlyParentEventCRFDNotesFromEventCRF(ecb);
        if (!eventCrfNotes.isEmpty()) {
            allNotes.addAll(eventCrfNotes);
            // make sure a necessary request attribute "hasNameNote" is set
            // properly
            this.setAttributeForInterviewerDNotes(eventCrfNotes, request);
        }
        // }
        // Create disc note threads out of the various notes
        DiscrepancyNoteUtil dNoteUtil = new DiscrepancyNoteUtil();
        noteThreads = dNoteUtil.createThreadsOfParents(allNotes, getDataSource(), currentStudy, null, -1, true);
        // variables that provide values for the CRF discrepancy note header
        int updatedNum = 0;
        int openNum = 0;
        int closedNum = 0;
        int resolvedNum = 0;
        int notAppNum = 0;
        DiscrepancyNoteBean tempBean;
        for (DiscrepancyNoteThread dnThread : noteThreads) {
            /*
                 * 3014: do not count parent beans, only the last child disc
                 * note of the thread.
                 */
            tempBean = dnThread.getLinkedNoteList().getLast();
            if (tempBean != null) {
                if (ResolutionStatus.UPDATED.equals(tempBean.getResStatus())) {
                    updatedNum++;
                } else if (ResolutionStatus.OPEN.equals(tempBean.getResStatus())) {
                    openNum++;
                } else if (ResolutionStatus.CLOSED.equals(tempBean.getResStatus())) {
                    // if (dn.getParentDnId() > 0){
                    closedNum++;
                // }
                } else if (ResolutionStatus.RESOLVED.equals(tempBean.getResStatus())) {
                    // if (dn.getParentDnId() > 0){
                    resolvedNum++;
                // }
                } else if (ResolutionStatus.NOT_APPLICABLE.equals(tempBean.getResStatus())) {
                    notAppNum++;
                }
            }
        }
        request.setAttribute("updatedNum", updatedNum + "");
        request.setAttribute("openNum", openNum + "");
        request.setAttribute("closedNum", closedNum + "");
        request.setAttribute("resolvedNum", resolvedNum + "");
        request.setAttribute("notAppNum", notAppNum + "");
        DisplayTableOfContentsBean displayBean = TableOfContentsServlet.getDisplayBean(ecb, getDataSource(), currentStudy);
        // Make sure that the interviewDate in the eventCRF is properly
        // formatted
        // for viewSectionDataEntry.jsp --> interviewer.jsp
        // int studyEventId = (Integer)request.getAttribute("studyEvent");
        // SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy");
        // 
        Date tmpDate = displayBean.getEventCRF().getDateInterviewed();
        String formattedInterviewerDate;
        try {
            DateFormat local_df = new SimpleDateFormat(resformat.getString("date_format_string"), ResourceBundleProvider.getLocale());
            formattedInterviewerDate = local_df.format(tmpDate);
        } catch (Exception e) {
            formattedInterviewerDate = "";
        }
        HashMap presetVals = (HashMap) session.getAttribute("presetValues");
        if (presetVals == null) {
            presetVals = new HashMap();
            session.setAttribute("presetValues", presetVals);
        }
        presetVals.put("interviewDate", formattedInterviewerDate);
        request.setAttribute("toc", displayBean);
        ArrayList sections = displayBean.getSections();
        request.setAttribute("sectionNum", sections.size() + "");
        if (!sections.isEmpty()) {
            if (sectionId == 0) {
                SectionBean firstSec = (SectionBean) sections.get(0);
                sectionId = firstSec.getId();
            }
        } else {
            addPageMessage(respage.getString("there_are_no_sections_ins_this_CRF"), request);
            // forwardPage(Page.SUBMIT_DATA_SERVLET);
            forwardPage(Page.LIST_STUDY_SUBJECTS_SERVLET, request, response);
            // >> changed tbh, 06/2009
            return;
        }
    } else if (crfVersionId > 0) {
        // for viewing blank CRF
        DisplayTableOfContentsBean displayBean = ViewTableOfContentServlet.getDisplayBean(getDataSource(), crfVersionId);
        request.setAttribute("toc", displayBean);
        ArrayList sections = displayBean.getSections();
        request.setAttribute("sectionNum", sections.size() + "");
        if (!sections.isEmpty()) {
            if (sectionId == 0) {
                SectionBean firstSec = (SectionBean) sections.get(0);
                sectionId = firstSec.getId();
            }
        } else {
            addPageMessage(respage.getString("there_are_no_sections_ins_this_CRF_version"), request);
            if (eventCRFId == 0) {
                forwardPage(Page.CRF_LIST_SERVLET, request, response);
            } else {
                // forwardPage(Page.SUBMIT_DATA_SERVLET);
                forwardPage(Page.LIST_STUDY_SUBJECTS_SERVLET, request, response);
            // >> changed tbh, 06/2009
            }
            return;
        }
    }
    sb = (SectionBean) sdao.findByPK(sectionId);
    if (eventCRFId == 0) {
        ecb = new EventCRFBean();
        ecb.setCRFVersionId(sb.getCRFVersionId());
        if (currentStudy.getParentStudyId() > 0) {
            // this is a site,find parent
            StudyDAO studydao = new StudyDAO(getDataSource());
            StudyBean parentStudy = (StudyBean) studydao.findByPK(currentStudy.getParentStudyId());
            request.setAttribute("studyTitle", parentStudy.getName());
            request.setAttribute("siteTitle", currentStudy.getName());
        } else {
            request.setAttribute("studyTitle", currentStudy.getName());
        }
    } else {
        ecb = (EventCRFBean) ecdao.findByPK(eventCRFId);
        request.setAttribute(INPUT_EVENT_CRF, ecb);
        request.setAttribute(SECTION_BEAN, sb);
        // This is the StudySubjectBean
        StudySubjectDAO ssdao = new StudySubjectDAO(getDataSource());
        StudySubjectBean sub = (StudySubjectBean) ssdao.findByPK(ecb.getStudySubjectId());
        // This is the SubjectBean
        SubjectDAO subjectDao = new SubjectDAO(getDataSource());
        int subjectId = sub.getSubjectId();
        int studyId = sub.getStudyId();
        SubjectBean subject = (SubjectBean) subjectDao.findByPK(subjectId);
        // Let us process the age
        if (currentStudy.getStudyParameterConfig().getCollectDob().equals("1")) {
            StudyEventDAO sedao = new StudyEventDAO(getDataSource());
            StudyEventBean se = (StudyEventBean) sedao.findByPK(ecb.getStudyEventId());
            StudyEventDefinitionDAO seddao = new StudyEventDefinitionDAO(getDataSource());
            StudyEventDefinitionBean sed = (StudyEventDefinitionBean) seddao.findByPK(se.getStudyEventDefinitionId());
            se.setStudyEventDefinition(sed);
            request.setAttribute("studyEvent", se);
            // YW 11-16-2007 enrollment-date is used for computing age
            age = Utils.getInstacne().processAge(sub.getEnrollmentDate(), subject.getDateOfBirth());
        }
        // Get the study then the parent study
        StudyDAO studydao = new StudyDAO(getDataSource());
        StudyBean study = (StudyBean) studydao.findByPK(studyId);
        if (study.getParentStudyId() > 0) {
            // this is a site,find parent
            StudyBean parentStudy = (StudyBean) studydao.findByPK(study.getParentStudyId());
            request.setAttribute("studyTitle", parentStudy.getName());
            request.setAttribute("siteTitle", study.getName());
        } else {
            request.setAttribute("studyTitle", study.getName());
        }
        request.setAttribute("studySubject", sub);
        request.setAttribute("subject", subject);
        request.setAttribute("age", age);
    }
    // FormBeanUtil formUtil = new FormBeanUtil();
    // DisplaySectionBean newDisplayBean = new DisplaySectionBean();
    boolean hasItemGroup = false;
    // we will look into db to see if any repeating items for this CRF
    // section
    ItemGroupDAO igdao = new ItemGroupDAO(getDataSource());
    List<ItemGroupBean> itemGroups = igdao.findLegitGroupBySectionId(sectionId);
    if (!itemGroups.isEmpty()) {
        hasItemGroup = true;
    }
    // if the List of DisplayFormGroups is empty, then the servlet defers to
    // the prior method
    // of generating a DisplaySectionBean for the application
    DisplaySectionBean dsb;
    // want to get displayBean with grouped and ungrouped items
    request.setAttribute(EVENT_DEF_CRF_BEAN, edcb);
    request.setAttribute(INPUT_EVENT_CRF, ecb);
    request.setAttribute(SECTION_BEAN, sb);
    dsb = super.getDisplayBean(hasItemGroup, false, request, isSubmitted);
    FormDiscrepancyNotes discNotes = (FormDiscrepancyNotes) session.getAttribute(AddNewSubjectServlet.FORM_DISCREPANCY_NOTES_NAME);
    if (discNotes == null) {
        discNotes = new FormDiscrepancyNotes();
        session.setAttribute(AddNewSubjectServlet.FORM_DISCREPANCY_NOTES_NAME, discNotes);
    }
    /*
         * if (hasItemGroup) { //
         * dsb.setDisplayItemGroups(newDisplayBean.getDisplayItemGroups());
         * request.setAttribute("new_table", true); }
         */
    // If the Horizontal type table will be used, then set the
    // DisplaySectionBean's
    // DisplayFormGroups List to the ones we have just generated
    // @pgawade 30-May-2012 Fix for issue 13963 - added an extra parameter
    // 'isSubmitted' to method createItemWithGroups
    List<DisplayItemWithGroupBean> displayItemWithGroups = super.createItemWithGroups(dsb, hasItemGroup, eventDefinitionCRFId, request, isSubmitted);
    dsb.setDisplayItemGroups(displayItemWithGroups);
    super.populateNotesWithDBNoteCounts(discNotes, dsb, request);
    if (fp.getString("fromViewNotes") != null && "1".equals(fp.getString("fromViewNotes"))) {
        request.setAttribute("fromViewNotes", fp.getString("fromViewNotes"));
    } else {
        session.removeAttribute("viewNotesURL");
    }
    if ("saveNotes".equalsIgnoreCase(action)) {
        LOGGER.info("33333how many group rows:" + dsb.getDisplayItemGroups().size());
        // let's save notes for the blank items
        DiscrepancyNoteDAO dndao = new DiscrepancyNoteDAO(getDataSource());
        discNotes = (FormDiscrepancyNotes) session.getAttribute(AddNewSubjectServlet.FORM_DISCREPANCY_NOTES_NAME);
        for (int i = 0; i < dsb.getDisplayItemGroups().size(); i++) {
            DisplayItemWithGroupBean diwb = dsb.getDisplayItemGroups().get(i);
            if (diwb.isInGroup()) {
                List<DisplayItemGroupBean> dgbs = diwb.getItemGroups();
                LOGGER.info("dgbs size: " + dgbs.size());
                for (int j = 0; j < dgbs.size(); j++) {
                    DisplayItemGroupBean displayGroup = dgbs.get(j);
                    List<DisplayItemBean> items = displayGroup.getItems();
                    LOGGER.info("item size: " + items.size());
                    for (DisplayItemBean displayItem : items) {
                        String inputName = getGroupItemInputName(displayGroup, j, displayItem);
                        LOGGER.info("inputName:" + inputName);
                        LOGGER.info("item data id:" + displayItem.getData().getId());
                        AddNewSubjectServlet.saveFieldNotes(inputName, discNotes, dndao, displayItem.getData().getId(), "itemData", currentStudy);
                    }
                }
            } else {
                DisplayItemBean dib = diwb.getSingleItem();
                // TODO work on this line
                String inputName = getInputName(dib);
                AddNewSubjectServlet.saveFieldNotes(inputName, discNotes, dndao, dib.getData().getId(), DiscrepancyNoteBean.ITEM_DATA, currentStudy);
                ArrayList childItems = dib.getChildren();
                for (int j = 0; j < childItems.size(); j++) {
                    DisplayItemBean child = (DisplayItemBean) childItems.get(j);
                    inputName = getInputName(child);
                    AddNewSubjectServlet.saveFieldNotes(inputName, discNotes, dndao, dib.getData().getId(), DiscrepancyNoteBean.ITEM_DATA, currentStudy);
                }
            }
        }
        addPageMessage("Discrepancy notes are saved successfully.", request);
        request.setAttribute("id", studySubjectId + "");
        forwardPage(Page.VIEW_STUDY_SUBJECT_SERVLET, request, response);
        // "ViewStudySubject?id=" + studySubjectId));
        return;
    } else {
        request.setAttribute(BEAN_DISPLAY, dsb);
        request.setAttribute(BEAN_ANNOTATIONS, ecb.getAnnotations());
        request.setAttribute("sec", sb);
        request.setAttribute("EventCRFBean", ecb);
        int tabNum = 1;
        if ("".equalsIgnoreCase(fp.getString("tabId"))) {
            tabNum = 1;
        } else {
            tabNum = fp.getInt("tabId");
        }
        request.setAttribute("tabId", new Integer(tabNum).toString());
        // 2808: Signal interviewer.jsp that the containing page is
        // viewSectionData,
        // for the purpose of suppressing discrepancy note icons for the
        // interview date and name fields
        request.setAttribute(ENCLOSING_PAGE, "viewSectionData");
        if ("yes".equalsIgnoreCase(printVersion)) {
            forwardPage(Page.VIEW_SECTION_DATA_ENTRY_PRINT, request, response);
        } else {
            forwardPage(Page.VIEW_SECTION_DATA_ENTRY, request, response);
        }
    }
}
Also used : HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) ItemGroupDAO(org.akaza.openclinica.dao.submit.ItemGroupDAO) StudyEventDefinitionBean(org.akaza.openclinica.bean.managestudy.StudyEventDefinitionBean) StudyEventBean(org.akaza.openclinica.bean.managestudy.StudyEventBean) EventCRFBean(org.akaza.openclinica.bean.submit.EventCRFBean) StudyEventDAO(org.akaza.openclinica.dao.managestudy.StudyEventDAO) DiscrepancyNoteUtil(org.akaza.openclinica.service.DiscrepancyNoteUtil) StudyDAO(org.akaza.openclinica.dao.managestudy.StudyDAO) DiscrepancyNoteDAO(org.akaza.openclinica.dao.managestudy.DiscrepancyNoteDAO) CRFVersionDAO(org.akaza.openclinica.dao.submit.CRFVersionDAO) FormDiscrepancyNotes(org.akaza.openclinica.control.form.FormDiscrepancyNotes) FormProcessor(org.akaza.openclinica.control.form.FormProcessor) DisplayItemWithGroupBean(org.akaza.openclinica.bean.submit.DisplayItemWithGroupBean) StudyBean(org.akaza.openclinica.bean.managestudy.StudyBean) EventDefinitionCRFDAO(org.akaza.openclinica.dao.managestudy.EventDefinitionCRFDAO) SectionBean(org.akaza.openclinica.bean.submit.SectionBean) DisplaySectionBean(org.akaza.openclinica.bean.submit.DisplaySectionBean) SubjectBean(org.akaza.openclinica.bean.submit.SubjectBean) StudySubjectBean(org.akaza.openclinica.bean.managestudy.StudySubjectBean) StudySubjectBean(org.akaza.openclinica.bean.managestudy.StudySubjectBean) StudyEventDefinitionDAO(org.akaza.openclinica.dao.managestudy.StudyEventDefinitionDAO) DiscrepancyNoteBean(org.akaza.openclinica.bean.managestudy.DiscrepancyNoteBean) EventDefinitionCRFBean(org.akaza.openclinica.bean.managestudy.EventDefinitionCRFBean) ItemGroupBean(org.akaza.openclinica.bean.submit.ItemGroupBean) DisplayItemGroupBean(org.akaza.openclinica.bean.submit.DisplayItemGroupBean) SectionDAO(org.akaza.openclinica.dao.submit.SectionDAO) StudySubjectDAO(org.akaza.openclinica.dao.managestudy.StudySubjectDAO) SubjectDAO(org.akaza.openclinica.dao.submit.SubjectDAO) InsufficientPermissionException(org.akaza.openclinica.web.InsufficientPermissionException) DisplayItemBean(org.akaza.openclinica.bean.submit.DisplayItemBean) EventCRFDAO(org.akaza.openclinica.dao.submit.EventCRFDAO) DiscrepancyNoteThread(org.akaza.openclinica.service.DiscrepancyNoteThread) DisplayItemGroupBean(org.akaza.openclinica.bean.submit.DisplayItemGroupBean) HttpSession(javax.servlet.http.HttpSession) DisplayTableOfContentsBean(org.akaza.openclinica.bean.submit.DisplayTableOfContentsBean) StudySubjectDAO(org.akaza.openclinica.dao.managestudy.StudySubjectDAO) Date(java.util.Date) InsufficientPermissionException(org.akaza.openclinica.web.InsufficientPermissionException) DisplaySectionBean(org.akaza.openclinica.bean.submit.DisplaySectionBean) DateFormat(java.text.DateFormat) SimpleDateFormat(java.text.SimpleDateFormat) CRFVersionBean(org.akaza.openclinica.bean.submit.CRFVersionBean) SimpleDateFormat(java.text.SimpleDateFormat)

Example 77 with StudyDAO

use of org.akaza.openclinica.dao.managestudy.StudyDAO in project OpenClinica by OpenClinica.

the class AddNewSubjectServlet method processRequest.

// YW >>
/*
     * (non-Javadoc)
     * 
     * @see org.akaza.openclinica.control.core.SecureController#processRequest()
     */
@Override
protected void processRequest() throws Exception {
    checkStudyLocked(Page.LIST_STUDY_SUBJECTS, respage.getString("current_study_locked"));
    checkStudyFrozen(Page.LIST_STUDY_SUBJECTS, respage.getString("current_study_frozen"));
    StudySubjectDAO ssd = new StudySubjectDAO(sm.getDataSource());
    StudyDAO stdao = new StudyDAO(sm.getDataSource());
    StudyGroupClassDAO sgcdao = new StudyGroupClassDAO(sm.getDataSource());
    ArrayList classes = new ArrayList();
    panel.setStudyInfoShown(false);
    FormProcessor fp = new FormProcessor(request);
    FormDiscrepancyNotes discNotes;
    SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
    // TODO l10n for dates? Note that in some places we hard-code the YOB by
    // using "01/01/"+yob,
    // not exactly supporting i18n...tbh
    // YW << update study parameters of current study.
    // "collectDob" and "genderRequired" are set as the same as the parent
    // study
    int parentStudyId = currentStudy.getParentStudyId();
    if (parentStudyId <= 0) {
        parentStudyId = currentStudy.getId();
        classes = sgcdao.findAllActiveByStudy(currentStudy);
    } else {
        StudyBean parentStudy = (StudyBean) stdao.findByPK(parentStudyId);
        classes = sgcdao.findAllActiveByStudy(parentStudy);
    }
    StudyParameterValueDAO spvdao = new StudyParameterValueDAO(sm.getDataSource());
    StudyParameterValueBean parentSPV = spvdao.findByHandleAndStudy(parentStudyId, "collectDob");
    currentStudy.getStudyParameterConfig().setCollectDob(parentSPV.getValue());
    parentSPV = spvdao.findByHandleAndStudy(parentStudyId, "genderRequired");
    currentStudy.getStudyParameterConfig().setGenderRequired(parentSPV.getValue());
    // YW >>
    // tbh
    StudyParameterValueBean checkPersonId = spvdao.findByHandleAndStudy(parentStudyId, "subjectPersonIdRequired");
    currentStudy.getStudyParameterConfig().setSubjectPersonIdRequired(checkPersonId.getValue());
    if (!fp.isSubmitted()) {
        if (fp.getBoolean("instr")) {
            session.removeAttribute(FORM_DISCREPANCY_NOTES_NAME);
            forwardPage(Page.INSTRUCTIONS_ENROLL_SUBJECT);
        } else {
            setUpBeans(classes);
            Date today = new Date(System.currentTimeMillis());
            String todayFormatted = local_df.format(today);
            fp.addPresetValue(INPUT_ENROLLMENT_DATE, todayFormatted);
            // YW 10-07-2007 <<
            String idSetting = "";
            if (currentStudy.getParentStudyId() > 0) {
                parentSPV = spvdao.findByHandleAndStudy(parentStudyId, "subjectIdGeneration");
                currentStudy.getStudyParameterConfig().setSubjectIdGeneration(parentSPV.getValue());
            }
            idSetting = currentStudy.getStudyParameterConfig().getSubjectIdGeneration();
            // YW >>
            logger.info("subject id setting :" + idSetting);
            // available ID (label) for now
            if (idSetting.equals("auto editable") || idSetting.equals("auto non-editable")) {
                // Shaoyu Su
                // int nextLabel = ssd.findTheGreatestLabel() + 1;
                // fp.addPresetValue(INPUT_LABEL, new Integer(nextLabel).toString());
                fp.addPresetValue(INPUT_LABEL, resword.getString("id_generated_Save_Add"));
            }
            setPresetValues(fp.getPresetValues());
            discNotes = new FormDiscrepancyNotes();
            session.setAttribute(FORM_DISCREPANCY_NOTES_NAME, discNotes);
            forwardPage(Page.ADD_NEW_SUBJECT);
        }
    } else {
        // values in database <subject> table for "add existing subject"
        if (!fp.getBoolean(EXISTING_SUB_SHOWN)) {
            DOB = fp.getString(INPUT_DOB);
            YOB = fp.getString(INPUT_YOB);
            GENDER = fp.getString(INPUT_GENDER);
        }
        // YW >>
        discNotes = (FormDiscrepancyNotes) session.getAttribute(FORM_DISCREPANCY_NOTES_NAME);
        if (discNotes == null) {
            discNotes = new FormDiscrepancyNotes();
        }
        DiscrepancyValidator v = new DiscrepancyValidator(request, discNotes);
        v.addValidation(INPUT_LABEL, Validator.NO_BLANKS);
        String subIdSetting = currentStudy.getStudyParameterConfig().getSubjectIdGeneration();
        if (!subIdSetting.equalsIgnoreCase("auto non-editable") && !subIdSetting.equalsIgnoreCase("auto editable")) {
            v.addValidation(INPUT_LABEL, Validator.LENGTH_NUMERIC_COMPARISON, NumericComparisonOperator.LESS_THAN_OR_EQUAL_TO, 30);
        }
        if (currentStudy.getStudyParameterConfig().getSubjectPersonIdRequired().equals("required")) {
            v.addValidation(INPUT_UNIQUE_IDENTIFIER, Validator.NO_BLANKS);
        }
        v.addValidation(INPUT_UNIQUE_IDENTIFIER, Validator.LENGTH_NUMERIC_COMPARISON, NumericComparisonOperator.LESS_THAN_OR_EQUAL_TO, 255);
        if (!StringUtils.isBlank(fp.getString(INPUT_SECONDARY_LABEL))) {
            v.addValidation(INPUT_SECONDARY_LABEL, Validator.LENGTH_NUMERIC_COMPARISON, NumericComparisonOperator.LESS_THAN_OR_EQUAL_TO, 30);
        }
        String dobSetting = currentStudy.getStudyParameterConfig().getCollectDob();
        if (dobSetting.equals("1")) {
            // date of birth
            v.addValidation(INPUT_DOB, Validator.IS_A_DATE);
            if (!StringUtils.isBlank(fp.getString("INPUT_DOB"))) {
                v.alwaysExecuteLastValidation(INPUT_DOB);
            }
            v.addValidation(INPUT_DOB, Validator.DATE_IN_PAST);
        } else if (dobSetting.equals("2")) {
            // year of birth
            v.addValidation(INPUT_YOB, Validator.IS_AN_INTEGER);
            v.alwaysExecuteLastValidation(INPUT_YOB);
            v.addValidation(INPUT_YOB, Validator.COMPARES_TO_STATIC_VALUE, NumericComparisonOperator.GREATER_THAN_OR_EQUAL_TO, 1000);
            // get today's year
            Date today = new Date();
            Calendar c = Calendar.getInstance();
            c.setTime(today);
            int currentYear = c.get(Calendar.YEAR);
            v.addValidation(INPUT_YOB, Validator.COMPARES_TO_STATIC_VALUE, NumericComparisonOperator.LESS_THAN_OR_EQUAL_TO, currentYear);
        } else {
            // DOB not used, added tbh 102007
            logger.info("should read this only if DOB not used");
        }
        ArrayList acceptableGenders = new ArrayList();
        acceptableGenders.add("m");
        acceptableGenders.add("f");
        if (!currentStudy.getStudyParameterConfig().getGenderRequired().equals("false")) {
            v.addValidation(INPUT_GENDER, Validator.IS_IN_SET, acceptableGenders);
        }
        v.addValidation(INPUT_ENROLLMENT_DATE, Validator.IS_A_DATE);
        v.alwaysExecuteLastValidation(INPUT_ENROLLMENT_DATE);
        v.addValidation(INPUT_ENROLLMENT_DATE, Validator.DATE_IN_PAST);
        boolean locationError = false;
        if (fp.getBoolean("addWithEvent")) {
            v.addValidation(INPUT_EVENT_START_DATE, Validator.IS_A_DATE);
            v.alwaysExecuteLastValidation(INPUT_EVENT_START_DATE);
            if (currentStudy.getStudyParameterConfig().getEventLocationRequired().equalsIgnoreCase("required")) {
                v.addValidation("location", Validator.NO_BLANKS);
                locationError = true;
            }
        }
        HashMap errors = v.validate();
        SubjectDAO sdao = new SubjectDAO(sm.getDataSource());
        // global
        String uniqueIdentifier = fp.getString(INPUT_UNIQUE_IDENTIFIER);
        // Id
        SubjectBean subjectWithSameId = new SubjectBean();
        SubjectBean subjectWithSameIdInParent = new SubjectBean();
        boolean showExistingRecord = false;
        if (!uniqueIdentifier.equals("")) {
            boolean subjectWithSameIdInCurrentStudyTree = false;
            // checks whether there is a subject with same id inside current
            // study/site
            subjectWithSameId = sdao.findByUniqueIdentifierAndStudy(uniqueIdentifier, currentStudy.getId());
            // tbh
            if (subjectWithSameId.isActive()) {
                // ||
                // subjectWithSameIdInParent.isActive())
                // {
                Validator.addError(errors, INPUT_UNIQUE_IDENTIFIER, resexception.getString("subject_with_person_ID") + " " + uniqueIdentifier + " " + resexception.getString("is_already_enrolled_in_this_study"));
                subjectWithSameIdInCurrentStudyTree = true;
                logger.info("just added unique id in study tree");
            } else {
                // checks whether there is a subject with same id inside
                // sites of
                // current study
                subjectWithSameId = sdao.findByUniqueIdentifierAndParentStudy(uniqueIdentifier, currentStudy.getId());
                if (subjectWithSameId.isActive()) {
                    StudySubjectBean ssub = ssd.findBySubjectIdAndStudy(subjectWithSameId.getId(), currentStudy);
                    StudyBean site = (StudyBean) stdao.findByPK(ssub.getStudyId());
                    Validator.addError(errors, INPUT_UNIQUE_IDENTIFIER, resexception.getString("this_subject_person_ID") + " " + uniqueIdentifier + resexception.getString("has_already_enrolled_site") + site.getName() + resexception.getString("of_current_study_need_to_move") + resexception.getString("please_have_user_manage_privileges"));
                    subjectWithSameIdInCurrentStudyTree = true;
                } else {
                    // check whether there is a subject with same id in the
                    // parent study
                    subjectWithSameId = sdao.findByUniqueIdentifierAndStudy(uniqueIdentifier, currentStudy.getParentStudyId());
                    if (subjectWithSameId.isActive()) {
                        Validator.addError(errors, INPUT_UNIQUE_IDENTIFIER, resexception.getString("this_subject_with_person_ID") + " " + uniqueIdentifier + resexception.getString("has_already_enrolled_parent_study"));
                        subjectWithSameIdInCurrentStudyTree = true;
                    } else {
                        // YW 11-26-2007 << check whether there is a subject
                        // with the same id in other sites of the same study
                        subjectWithSameId = sdao.findByUniqueIdentifierAndParentStudy(uniqueIdentifier, currentStudy.getParentStudyId());
                        if (subjectWithSameId.isActive()) {
                            Validator.addError(errors, INPUT_UNIQUE_IDENTIFIER, resexception.getString("this_subject_with_person_ID") + " " + uniqueIdentifier + resexception.getString("has_already_enrolled_site_study"));
                            subjectWithSameIdInCurrentStudyTree = true;
                        }
                    // YW >>
                    }
                }
            }
            if (!subjectWithSameIdInCurrentStudyTree) {
                subjectWithSameId = sdao.findByUniqueIdentifier(uniqueIdentifier);
                // found subject with same id in other study
                if (subjectWithSameId.isActive()) {
                    showExistingRecord = true;
                }
            }
        }
        // end of the block if(!uniqueIdentifier.equals(""))
        String label = fp.getString(INPUT_LABEL);
        String personId = fp.getString(INPUT_UNIQUE_IDENTIFIER);
        String secondaryLable = fp.getString(INPUT_SECONDARY_LABEL);
        // then Study Subject ID should be created when db row is inserted.
        if (label.contains("<") || label.contains(">")) {
            Validator.addError(errors, INPUT_LABEL, resexception.getString("study_subject_id_can_not_contain_html_lessthan_or_greaterthan_elements"));
        }
        if (secondaryLable.contains("<") || secondaryLable.contains(">")) {
            Validator.addError(errors, INPUT_SECONDARY_LABEL, resexception.getString("secondary_id_can_not_contain_html_lessthan_or_greaterthan_elements"));
        }
        if (personId.contains("<") || personId.contains(">")) {
            Validator.addError(errors, INPUT_UNIQUE_IDENTIFIER, resexception.getString("person_id_can_not_contain_html_lessthan_or_greaterthan_elements"));
        }
        if (!label.equalsIgnoreCase(resword.getString("id_generated_Save_Add"))) {
            StudySubjectBean subjectWithSameLabel = ssd.findByLabelAndStudy(label, currentStudy);
            StudySubjectBean subjectWithSameLabelInParent = new StudySubjectBean();
            // tbh
            if (currentStudy.getParentStudyId() > 0) {
                // <
                subjectWithSameLabelInParent = ssd.findSameByLabelAndStudy(label, currentStudy.getParentStudyId(), 0);
            // --
            // blank
            // id
            // since
            // the
            // ss
            // hasn't
            // been
            // created
            // yet,
            // tbh
            }
            // tbh
            if (subjectWithSameLabel.isActive() || subjectWithSameLabelInParent.isActive()) {
                Validator.addError(errors, INPUT_LABEL, resexception.getString("another_assigned_this_ID_choose_unique"));
            }
        }
        if (!classes.isEmpty()) {
            for (int i = 0; i < classes.size(); i++) {
                StudyGroupClassBean sgc = (StudyGroupClassBean) classes.get(i);
                int groupId = fp.getInt("studyGroupId" + i);
                String notes = fp.getString("notes" + i);
                if ("Required".equals(sgc.getSubjectAssignment()) && groupId == 0) {
                    Validator.addError(errors, "studyGroupId" + i, resexception.getString("group_class_is_required"));
                }
                if (notes.trim().length() > 255) {
                    Validator.addError(errors, "notes" + i, resexception.getString("notes_cannot_longer_255"));
                }
                sgc.setStudyGroupId(groupId);
                sgc.setGroupNotes(notes);
            }
        }
        if (!errors.isEmpty()) {
            addPageMessage(respage.getString("there_were_some_errors_submission"));
            if (locationError) {
                addPageMessage(respage.getString("location_blank_error"));
            }
            setInputMessages(errors);
            fp.addPresetValue(INPUT_DOB, fp.getString(INPUT_DOB));
            fp.addPresetValue(INPUT_YOB, fp.getString(INPUT_YOB));
            fp.addPresetValue(INPUT_GENDER, fp.getString(INPUT_GENDER));
            fp.addPresetValue(INPUT_UNIQUE_IDENTIFIER, uniqueIdentifier);
            fp.addPresetValue(INPUT_LABEL, label);
            fp.addPresetValue(INPUT_SECONDARY_LABEL, fp.getString(INPUT_SECONDARY_LABEL));
            fp.addPresetValue(INPUT_ENROLLMENT_DATE, fp.getString(INPUT_ENROLLMENT_DATE));
            fp.addPresetValue(INPUT_EVENT_START_DATE, fp.getString(INPUT_EVENT_START_DATE));
            fp.addPresetValue(STUDY_EVENT_DEFINITION, fp.getInt(STUDY_EVENT_DEFINITION));
            fp.addPresetValue(LOCATION, fp.getString(LOCATION));
            fp.addPresetValue(EDIT_DOB, fp.getString(EDIT_DOB));
            setPresetValues(fp.getPresetValues());
            setUpBeans(classes);
            boolean existingSubShown = fp.getBoolean(EXISTING_SUB_SHOWN);
            if (!existingSubShown) {
                Object isSubjectOverlay = fp.getRequest().getParameter("subjectOverlay");
                if (isSubjectOverlay != null) {
                    int eventId = fp.getInt("studyEventDefinition");
                    if (eventId < 1) {
                        Validator.addError(errors, STUDY_EVENT_DEFINITION, resexception.getString("input_not_acceptable_option"));
                    }
                    String location = fp.getString(LOCATION);
                    if (location == null && location.length() == 0) {
                        Validator.addError(errors, LOCATION, resexception.getString("field_not_blank"));
                    }
                    request.setAttribute("showOverlay", true);
                    forwardPage(Page.LIST_STUDY_SUBJECTS_SERVLET);
                } else {
                    forwardPage(Page.ADD_NEW_SUBJECT);
                }
            } else {
                forwardPage(Page.ADD_EXISTING_SUBJECT);
            }
        } else {
            // no errors
            StudySubjectBean studySubject = new StudySubjectBean();
            SubjectBean subject = new SubjectBean();
            boolean existingSubShown = fp.getBoolean(EXISTING_SUB_SHOWN);
            if (showExistingRecord && !existingSubShown) {
                needUpdate = false;
                subject = subjectWithSameId;
                Calendar cal = Calendar.getInstance();
                int year = 0;
                if (subject.getDateOfBirth() != null) {
                    cal.setTime(subject.getDateOfBirth());
                    year = cal.get(Calendar.YEAR);
                    fp.addPresetValue(INPUT_DOB, local_df.format(subject.getDateOfBirth()));
                } else {
                    fp.addPresetValue(INPUT_DOB, "");
                }
                if (currentStudy.getStudyParameterConfig().getCollectDob().equals("1") && !subject.isDobCollected()) {
                    // fp.addPresetValue(EDIT_DOB, "yes");
                    fp.addPresetValue(INPUT_DOB, fp.getString(INPUT_DOB));
                }
                // YW << it has been taken off to solve bug0001125
                /*
                     * else { fp.addPresetValue(INPUT_DOB, ""); }
                     */
                // YW >>
                fp.addPresetValue(INPUT_YOB, String.valueOf(year));
                if (!currentStudy.getStudyParameterConfig().getGenderRequired().equals("false")) {
                    fp.addPresetValue(INPUT_GENDER, subject.getGender() + "");
                } else {
                    fp.addPresetValue(INPUT_GENDER, "");
                }
                // Shaoyu Su: delay setting INPUT_LABEL field
                if (!label.equalsIgnoreCase(resword.getString("id_generated_Save_Add"))) {
                    fp.addPresetValue(INPUT_LABEL, label);
                }
                fp.addPresetValue(INPUT_SECONDARY_LABEL, fp.getString(INPUT_SECONDARY_LABEL));
                fp.addPresetValue(INPUT_ENROLLMENT_DATE, fp.getString(INPUT_ENROLLMENT_DATE));
                fp.addPresetValue(INPUT_EVENT_START_DATE, fp.getString(INPUT_EVENT_START_DATE));
                // YW >>
                fp.addPresetValue(INPUT_UNIQUE_IDENTIFIER, subject.getUniqueIdentifier());
                setPresetValues(fp.getPresetValues());
                setUpBeans(classes);
                // YW <<
                int warningCount = 0;
                if (currentStudy.getStudyParameterConfig().getGenderRequired().equalsIgnoreCase("true")) {
                    if (String.valueOf(subjectWithSameId.getGender()).equals(" ")) {
                        fp.addPresetValue(G_WARNING, "emptytrue");
                        fp.addPresetValue(INPUT_GENDER, GENDER);
                        needUpdate = true;
                        updateSubject = subjectWithSameId;
                        updateSubject.setGender(GENDER.toCharArray()[0]);
                        warningCount++;
                    } else if (!String.valueOf(subjectWithSameId.getGender()).equals(GENDER)) {
                        fp.addPresetValue(G_WARNING, "true");
                        warningCount++;
                    } else {
                        fp.addPresetValue(G_WARNING, "false");
                    }
                } else {
                    fp.addPresetValue(G_WARNING, "false");
                }
                // Current study required DOB
                if (currentStudy.getStudyParameterConfig().getCollectDob().equals("1")) {
                    // date-of-birth in subject table is not completed
                    if (subjectWithSameId.isDobCollected() == false) {
                        needUpdate = true;
                        updateSubject = subjectWithSameId;
                        updateSubject.setDobCollected(true);
                        if (subjectWithSameId.getDateOfBirth() == null) {
                            fp.addPresetValue(INPUT_DOB, DOB);
                            updateSubject.setDateOfBirth(new Date(DOB));
                        } else {
                            String y = String.valueOf(subjectWithSameId.getDateOfBirth()).split("\\-")[0];
                            String[] d = DOB.split("\\/");
                            // if year-of-birth in subject table
                            if (!y.equals("0001")) {
                                // year, use year-of-birth
                                if (!y.equals(d[2])) {
                                    fp.addPresetValue(D_WARNING, "dobYearWrong");
                                    fp.addPresetValue(INPUT_DOB, d[0] + "/" + d[1] + "/" + y);
                                    updateSubject.setDateOfBirth(sdf.parse(d[0] + "/" + d[1] + "/" + y));
                                } else {
                                    fp.addPresetValue(D_WARNING, "dobUsed");
                                    fp.addPresetValue(INPUT_DOB, DOB);
                                    updateSubject.setDateOfBirth(sdf.parse(DOB));
                                }
                            } else // date-of-birth is not required in subject
                            // table
                            {
                                fp.addPresetValue(D_WARNING, "emptyD");
                                fp.addPresetValue(INPUT_DOB, DOB);
                                updateSubject.setDateOfBirth(sdf.parse(DOB));
                            }
                        }
                        warningCount++;
                    } else // date-of-birth in subject table but doesn't match DOB
                    if (!local_df.format(subjectWithSameId.getDateOfBirth()).toString().equals(DOB)) {
                        // System.out.println("comparing " +
                        // local_df.format(
                        // subjectWithSameId.getDateOfBirth()).toString());
                        fp.addPresetValue(D_WARNING, "currentDOBWrong");
                        warningCount++;
                    } else // date-of-birth in subject table matchs DOB
                    {
                        fp.addPresetValue(D_WARNING, "false");
                    }
                } else // current Study require YOB
                if (currentStudy.getStudyParameterConfig().getCollectDob().equals("2")) {
                    String y = String.valueOf(subjectWithSameId.getDateOfBirth()).split("\\-")[0];
                    // year of date-of-birth in subject table is avaible
                    if (!y.equals("0001")) {
                        // year in subject table doesn't match YOB,
                        if (!y.equals(YOB)) {
                            fp.addPresetValue(Y_WARNING, "yobWrong");
                            warningCount++;
                        } else // year in subject table matches YOB
                        {
                            fp.addPresetValue(Y_WARNING, "false");
                        }
                    } else // year of date-of-birth in the subject talbe is not
                    // availbe, YOB is used
                    {
                        needUpdate = true;
                        updateSubject = subjectWithSameId;
                        fp.addPresetValue(Y_WARNING, "yearEmpty");
                        fp.addPresetValue(INPUT_YOB, YOB);
                        updateSubject.setDateOfBirth(sdf.parse("01/01/" + YOB));
                        warningCount++;
                    }
                } else // current study require no DOB, there is no need to check
                // date-of-birth in the subject table
                {
                    fp.addPresetValue(Y_WARNING, "false");
                }
                if (warningCount > 0) {
                    warningCount = 0;
                    forwardPage(Page.ADD_EXISTING_SUBJECT);
                    return;
                }
            // forwardPage(Page.ADD_EXISTING_SUBJECT);
            // return;
            // YW >>
            }
            // to be inserted into both <subject> and <studysubject> tables
            if (!showExistingRecord) {
                // YW >>
                if (!StringUtil.isBlank(fp.getString(INPUT_GENDER))) {
                    subject.setGender(fp.getString(INPUT_GENDER).charAt(0));
                } else {
                    subject.setGender(' ');
                }
                subject.setUniqueIdentifier(uniqueIdentifier);
                if (currentStudy.getStudyParameterConfig().getCollectDob().equals("1")) {
                    if (!StringUtil.isBlank(fp.getString(INPUT_DOB))) {
                        subject.setDateOfBirth(fp.getDate(INPUT_DOB));
                        subject.setDobCollected(true);
                    } else {
                        subject.setDateOfBirth(null);
                        subject.setDobCollected(false);
                    }
                } else if (currentStudy.getStudyParameterConfig().getCollectDob().equals("2")) {
                    // generate a fake birthday in 01/01/YYYY format, only
                    // the year is
                    // valid
                    // added the "2" to make sure that 'not used' is kept to
                    // null, tbh 102007
                    subject.setDobCollected(false);
                    int yob = fp.getInt(INPUT_YOB);
                    Date fakeDate = new Date("01/01/" + yob);
                    // Calendar fakeCal = Calendar.getInstance();
                    // fakeCal.set(Calendar.YEAR, yob);
                    // fakeCal.set(Calendar.MONTH, 1);
                    // fakeCal.set(Calendar.DAY_OF_MONTH, 1);
                    // String dobString = "01/01/" + yob;
                    String dobString = local_df.format(fakeDate);
                    try {
                        Date fakeDOB = local_df.parse(dobString);
                        subject.setDateOfBirth(fakeDOB);
                    } catch (ParseException pe) {
                        subject.setDateOfBirth(new Date());
                        addPageMessage(respage.getString("problem_happened_saving_year"));
                    }
                }
                subject.setStatus(Status.AVAILABLE);
                subject.setOwner(ub);
                subject = sdao.create(subject);
                if (!subject.isActive()) {
                    throw new OpenClinicaException(resexception.getString("could_not_create_subject"), "3");
                }
            // YW << for showExistingRecord && existingSubShown,
            // If input value(s) is(are) different from database,
            // warning will be shown.
            // If value(s) in database is(are) empty, entered value(s)
            // could be used;
            // Otherwise, value(s) in database will be used.
            // For date-of-birth, if database only has year-of-birth,
            // the year in database will be used for year part
            } else if (existingSubShown) {
                if (!needUpdate) {
                    subject = subjectWithSameId;
                } else {
                    updateSubject.setUpdater(ub);
                    updateSubject = (SubjectBean) sdao.update(updateSubject);
                    if (!updateSubject.isActive()) {
                        throw new OpenClinicaException("Could not create subject.", "5");
                    }
                    subject = updateSubject;
                    needUpdate = false;
                }
            }
            // YW >>
            // enroll the subject in the active study
            studySubject.setSubjectId(subject.getId());
            studySubject.setStudyId(currentStudy.getId());
            studySubject.setLabel(fp.getString(INPUT_LABEL));
            studySubject.setSecondaryLabel(fp.getString(INPUT_SECONDARY_LABEL));
            studySubject.setStatus(Status.AVAILABLE);
            studySubject.setEnrollmentDate(fp.getDate(INPUT_ENROLLMENT_DATE));
            if (fp.getBoolean("addWithEvent")) {
                studySubject.setEventStartDate(fp.getDate(INPUT_EVENT_START_DATE));
            }
            studySubject.setOwner(ub);
            // Shaoyu Su: prevent same label ("Study Subject ID")
            if (fp.getString(INPUT_LABEL).equalsIgnoreCase(resword.getString("id_generated_Save_Add"))) {
                synchronized (simpleLockObj) {
                    int nextLabel = ssd.findTheGreatestLabel() + 1;
                    studySubject.setLabel(nextLabel + "");
                    studySubject = ssd.createWithoutGroup(studySubject);
                    if (showExistingRecord && !existingSubShown) {
                        fp.addPresetValue(INPUT_LABEL, label);
                    }
                }
            } else {
                studySubject = ssd.createWithoutGroup(studySubject);
            }
            if (!classes.isEmpty() && studySubject.isActive()) {
                SubjectGroupMapDAO sgmdao = new SubjectGroupMapDAO(sm.getDataSource());
                for (int i = 0; i < classes.size(); i++) {
                    StudyGroupClassBean group = (StudyGroupClassBean) classes.get(i);
                    int studyGroupId = group.getStudyGroupId();
                    String notes = group.getGroupNotes();
                    SubjectGroupMapBean map = new SubjectGroupMapBean();
                    map.setNotes(group.getGroupNotes());
                    map.setStatus(Status.AVAILABLE);
                    map.setStudyGroupId(group.getStudyGroupId());
                    map.setStudySubjectId(studySubject.getId());
                    map.setStudyGroupClassId(group.getId());
                    map.setOwner(ub);
                    if (map.getStudyGroupId() > 0) {
                        sgmdao.create(map);
                    }
                }
            }
            if (!studySubject.isActive()) {
                throw new OpenClinicaException(resexception.getString("could_not_create_study_subject"), "4");
            }
            // save discrepancy notes into DB
            FormDiscrepancyNotes fdn = (FormDiscrepancyNotes) session.getAttribute(FORM_DISCREPANCY_NOTES_NAME);
            DiscrepancyNoteDAO dndao = new DiscrepancyNoteDAO(sm.getDataSource());
            String[] subjectFields = { INPUT_DOB, INPUT_YOB, INPUT_GENDER };
            for (String element : subjectFields) {
                saveFieldNotes(element, fdn, dndao, subject.getId(), "subject", currentStudy);
            }
            saveFieldNotes(INPUT_ENROLLMENT_DATE, fdn, dndao, studySubject.getId(), "studySub", currentStudy);
            request.removeAttribute(FormProcessor.FIELD_SUBMITTED);
            request.setAttribute(CreateNewStudyEventServlet.INPUT_STUDY_SUBJECT, studySubject);
            request.setAttribute(CreateNewStudyEventServlet.INPUT_REQUEST_STUDY_SUBJECT, "no");
            request.setAttribute(FormProcessor.FIELD_SUBMITTED, "0");
            addPageMessage(respage.getString("subject_with_unique_identifier") + studySubject.getLabel() + respage.getString("X_was_created_succesfully"));
            if (fp.getBoolean("addWithEvent")) {
                createStudyEvent(fp, studySubject);
                // YW <<
                request.setAttribute("id", studySubject.getId() + "");
                // String url= response.encodeRedirectURL("ViewStudySubject?id=" + studySubject.getId());
                // response.sendRedirect(url);
                forwardPage(Page.VIEW_STUDY_SUBJECT_SERVLET);
                // + studySubject.getId()));
                return;
            }
            String submitEvent = fp.getString(SUBMIT_EVENT_BUTTON);
            String submitEnroll = fp.getString(SUBMIT_ENROLL_BUTTON);
            String submitDone = fp.getString(SUBMIT_DONE_BUTTON);
            session.removeAttribute(FORM_DISCREPANCY_NOTES_NAME);
            if (!StringUtil.isBlank(submitEvent)) {
                forwardPage(Page.CREATE_NEW_STUDY_EVENT_SERVLET);
            } else if (!StringUtil.isBlank(submitEnroll)) {
                // NEW MANTIS ISSUE 4770
                setUpBeans(classes);
                Date today = new Date(System.currentTimeMillis());
                String todayFormatted = local_df.format(today);
                fp.addPresetValue(INPUT_ENROLLMENT_DATE, todayFormatted);
                // YW 10-07-2007 <<
                String idSetting = "";
                if (currentStudy.getParentStudyId() > 0) {
                    parentSPV = spvdao.findByHandleAndStudy(parentStudyId, "subjectIdGeneration");
                    currentStudy.getStudyParameterConfig().setSubjectIdGeneration(parentSPV.getValue());
                }
                idSetting = currentStudy.getStudyParameterConfig().getSubjectIdGeneration();
                // YW >>
                logger.info("subject id setting :" + idSetting);
                // set up auto study subject id
                if (idSetting.equals("auto editable") || idSetting.equals("auto non-editable")) {
                    // Shaoyu Su
                    // int nextLabel = ssd.findTheGreatestLabel() + 1;
                    // fp.addPresetValue(INPUT_LABEL, new Integer(nextLabel).toString());
                    fp.addPresetValue(INPUT_LABEL, resword.getString("id_generated_Save_Add"));
                }
                setPresetValues(fp.getPresetValues());
                discNotes = new FormDiscrepancyNotes();
                session.setAttribute(FORM_DISCREPANCY_NOTES_NAME, discNotes);
                // End of 4770
                forwardPage(Page.ADD_NEW_SUBJECT);
            } else {
                // forwardPage(Page.VIEW_STUDY_SUBJECT_SERVLET);
                // forwardPage(Page.SUBMIT_DATA_SERVLET);
                request.setAttribute("id", studySubject.getId() + "");
                // String url=response.encodeRedirectURL("ViewStudySubject?id=" + studySubject.getId());
                // response.sendRedirect(url);
                forwardPage(Page.VIEW_STUDY_SUBJECT_SERVLET);
                return;
            }
        }
    // end of no error (errors.isEmpty())
    }
// end of fp.isSubmitted()
}
Also used : SubjectGroupMapBean(org.akaza.openclinica.bean.submit.SubjectGroupMapBean) HashMap(java.util.HashMap) StudyGroupClassDAO(org.akaza.openclinica.dao.managestudy.StudyGroupClassDAO) StudySubjectDAO(org.akaza.openclinica.dao.managestudy.StudySubjectDAO) SubjectDAO(org.akaza.openclinica.dao.submit.SubjectDAO) ArrayList(java.util.ArrayList) OpenClinicaException(org.akaza.openclinica.exception.OpenClinicaException) StudyParameterValueBean(org.akaza.openclinica.bean.service.StudyParameterValueBean) StudyGroupClassBean(org.akaza.openclinica.bean.managestudy.StudyGroupClassBean) StudyDAO(org.akaza.openclinica.dao.managestudy.StudyDAO) DiscrepancyNoteDAO(org.akaza.openclinica.dao.managestudy.DiscrepancyNoteDAO) FormDiscrepancyNotes(org.akaza.openclinica.control.form.FormDiscrepancyNotes) SubjectGroupMapDAO(org.akaza.openclinica.dao.submit.SubjectGroupMapDAO) FormProcessor(org.akaza.openclinica.control.form.FormProcessor) StudyBean(org.akaza.openclinica.bean.managestudy.StudyBean) Calendar(java.util.Calendar) StudySubjectDAO(org.akaza.openclinica.dao.managestudy.StudySubjectDAO) Date(java.util.Date) SubjectBean(org.akaza.openclinica.bean.submit.SubjectBean) DisplaySubjectBean(org.akaza.openclinica.bean.submit.DisplaySubjectBean) StudySubjectBean(org.akaza.openclinica.bean.managestudy.StudySubjectBean) DiscrepancyValidator(org.akaza.openclinica.control.form.DiscrepancyValidator) StudySubjectBean(org.akaza.openclinica.bean.managestudy.StudySubjectBean) ParseException(java.text.ParseException) StudyParameterValueDAO(org.akaza.openclinica.dao.service.StudyParameterValueDAO) SimpleDateFormat(java.text.SimpleDateFormat)

Example 78 with StudyDAO

use of org.akaza.openclinica.dao.managestudy.StudyDAO in project OpenClinica by OpenClinica.

the class ViewStudySubjectServlet method getDisplayStudyEventsForStudySubject.

public static ArrayList<DisplayStudyEventBean> getDisplayStudyEventsForStudySubject(StudySubjectBean studySub, DataSource ds, UserAccountBean ub, StudyUserRoleBean currentRole) {
    StudyEventDefinitionDAO seddao = new StudyEventDefinitionDAO(ds);
    StudyEventDAO sedao = new StudyEventDAO(ds);
    EventCRFDAO ecdao = new EventCRFDAO(ds);
    EventDefinitionCRFDAO edcdao = new EventDefinitionCRFDAO(ds);
    StudySubjectDAO ssdao = new StudySubjectDAO(ds);
    StudyDAO sdao = new StudyDAO(ds);
    ArrayList events = sedao.findAllByStudySubject(studySub);
    ArrayList displayEvents = new ArrayList();
    for (int i = 0; i < events.size(); i++) {
        StudyEventBean event = (StudyEventBean) events.get(i);
        StudySubjectBean studySubject = (StudySubjectBean) ssdao.findByPK(event.getStudySubjectId());
        StudyEventDefinitionBean sed = (StudyEventDefinitionBean) seddao.findByPK(event.getStudyEventDefinitionId());
        event.setStudyEventDefinition(sed);
        // find all active crfs in the definition
        StudyBean study = (StudyBean) sdao.findByPK(studySubject.getStudyId());
        ArrayList eventDefinitionCRFs = (ArrayList) edcdao.findAllActiveByEventDefinitionId(study, sed.getId());
        ArrayList eventCRFs = ecdao.findAllByStudyEvent(event);
        // construct info needed on view study event page
        DisplayStudyEventBean de = new DisplayStudyEventBean();
        de.setStudyEvent(event);
        de.setDisplayEventCRFs(getDisplayEventCRFs(ds, eventCRFs, eventDefinitionCRFs, ub, currentRole, event.getSubjectEventStatus(), study));
        ArrayList al = getUncompletedCRFs(ds, eventDefinitionCRFs, eventCRFs, event.getSubjectEventStatus());
        populateUncompletedCRFsWithCRFAndVersions(ds, al);
        de.setUncompletedCRFs(al);
        de.setMaximumSampleOrdinal(sedao.getMaxSampleOrdinal(sed, studySubject));
        displayEvents.add(de);
    // event.setEventCRFs(createAllEventCRFs(eventCRFs,
    // eventDefinitionCRFs));
    }
    return displayEvents;
}
Also used : StudyBean(org.akaza.openclinica.bean.managestudy.StudyBean) ArrayList(java.util.ArrayList) StudyEventDefinitionBean(org.akaza.openclinica.bean.managestudy.StudyEventDefinitionBean) EventDefinitionCRFDAO(org.akaza.openclinica.dao.managestudy.EventDefinitionCRFDAO) StudyEventBean(org.akaza.openclinica.bean.managestudy.StudyEventBean) DisplayStudyEventBean(org.akaza.openclinica.bean.managestudy.DisplayStudyEventBean) StudySubjectDAO(org.akaza.openclinica.dao.managestudy.StudySubjectDAO) DisplayStudyEventBean(org.akaza.openclinica.bean.managestudy.DisplayStudyEventBean) StudyEventDefinitionDAO(org.akaza.openclinica.dao.managestudy.StudyEventDefinitionDAO) StudySubjectBean(org.akaza.openclinica.bean.managestudy.StudySubjectBean) StudyEventDAO(org.akaza.openclinica.dao.managestudy.StudyEventDAO) StudyDAO(org.akaza.openclinica.dao.managestudy.StudyDAO) EventCRFDAO(org.akaza.openclinica.dao.submit.EventCRFDAO)

Example 79 with StudyDAO

use of org.akaza.openclinica.dao.managestudy.StudyDAO in project OpenClinica by OpenClinica.

the class ViewSubjectGroupClassServlet method processRequest.

@Override
public void processRequest() throws Exception {
    String action = request.getParameter("action");
    FormProcessor fp = new FormProcessor(request);
    int classId = fp.getInt("id");
    if (classId == 0) {
        addPageMessage(respage.getString("please_choose_a_subject_group_class_to_view"));
        forwardPage(Page.SUBJECT_GROUP_CLASS_LIST_SERVLET);
    } else {
        StudyGroupClassDAO sgcdao = new StudyGroupClassDAO(sm.getDataSource());
        StudyGroupDAO sgdao = new StudyGroupDAO(sm.getDataSource());
        SubjectGroupMapDAO sgmdao = new SubjectGroupMapDAO(sm.getDataSource());
        StudyDAO studyDao = new StudyDAO(sm.getDataSource());
        StudyGroupClassBean sgcb = (StudyGroupClassBean) sgcdao.findByPK(classId);
        StudyBean study = (StudyBean) studyDao.findByPK(sgcb.getStudyId());
        checkRoleByUserAndStudy(ub, sgcb.getStudyId(), study.getParentStudyId());
        // YW 09-19-2007 <<
        sgcb.setGroupClassTypeName(GroupClassType.get(sgcb.getGroupClassTypeId()).getName());
        // YW >>
        ArrayList groups = sgdao.findAllByGroupClass(sgcb);
        ArrayList studyGroups = new ArrayList();
        for (int i = 0; i < groups.size(); i++) {
            StudyGroupBean sg = (StudyGroupBean) groups.get(i);
            ArrayList subjectMaps = sgmdao.findAllByStudyGroupClassAndGroup(sgcb.getId(), sg.getId());
            sg.setSubjectMaps(subjectMaps);
            // YW<<
            studyGroups.add(sg);
        // YW>>
        }
        request.setAttribute("group", sgcb);
        // request.setAttribute("studyGroups", groups);
        request.setAttribute("studyGroups", studyGroups);
        forwardPage(Page.VIEW_SUBJECT_GROUP_CLASS);
    }
}
Also used : SubjectGroupMapDAO(org.akaza.openclinica.dao.submit.SubjectGroupMapDAO) FormProcessor(org.akaza.openclinica.control.form.FormProcessor) StudyGroupClassDAO(org.akaza.openclinica.dao.managestudy.StudyGroupClassDAO) StudyBean(org.akaza.openclinica.bean.managestudy.StudyBean) StudyGroupClassBean(org.akaza.openclinica.bean.managestudy.StudyGroupClassBean) ArrayList(java.util.ArrayList) StudyGroupDAO(org.akaza.openclinica.dao.managestudy.StudyGroupDAO) StudyDAO(org.akaza.openclinica.dao.managestudy.StudyDAO) StudyGroupBean(org.akaza.openclinica.bean.managestudy.StudyGroupBean)

Example 80 with StudyDAO

use of org.akaza.openclinica.dao.managestudy.StudyDAO in project OpenClinica by OpenClinica.

the class ViewStudySubjectAuditLogServlet method processRequest.

@Override
public void processRequest() throws Exception {
    StudySubjectDAO subdao = new StudySubjectDAO(sm.getDataSource());
    SubjectDAO sdao = new SubjectDAO(sm.getDataSource());
    AuditDAO adao = new AuditDAO(sm.getDataSource());
    FormProcessor fp = new FormProcessor(request);
    StudyEventDAO sedao = new StudyEventDAO(sm.getDataSource());
    StudyEventDefinitionDAO seddao = new StudyEventDefinitionDAO(sm.getDataSource());
    EventDefinitionCRFDAO edcdao = new EventDefinitionCRFDAO(sm.getDataSource());
    EventCRFDAO ecdao = new EventCRFDAO(sm.getDataSource());
    StudyDAO studydao = new StudyDAO(sm.getDataSource());
    CRFDAO cdao = new CRFDAO(sm.getDataSource());
    CRFVersionDAO cvdao = new CRFVersionDAO(sm.getDataSource());
    ArrayList studySubjectAudits = new ArrayList();
    ArrayList eventCRFAudits = new ArrayList();
    ArrayList studyEventAudits = new ArrayList();
    ArrayList allDeletedEventCRFs = new ArrayList();
    String attachedFilePath = Utils.getAttachedFilePath(currentStudy);
    // studySubjectId
    int studySubId = fp.getInt("id", true);
    request.setAttribute("id", studySubId);
    if (studySubId == 0) {
        addPageMessage(respage.getString("please_choose_a_subject_to_view"));
        forwardPage(Page.LIST_STUDY_SUBJECTS);
    } else {
        StudySubjectBean studySubject = (StudySubjectBean) subdao.findByPK(studySubId);
        StudyBean study = (StudyBean) studydao.findByPK(studySubject.getStudyId());
        // Check if this StudySubject would be accessed from the Current Study
        if (studySubject.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;
                }
            }
        }
        request.setAttribute("studySub", studySubject);
        SubjectBean subject = (SubjectBean) sdao.findByPK(studySubject.getSubjectId());
        StudyParameterValueDAO spvdao = new StudyParameterValueDAO(sm.getDataSource());
        study.getStudyParameterConfig().setCollectDob(spvdao.findByHandleAndStudy(study.getId(), "collectDob").getValue());
        String collectdob = "used";
        if (study.getStudyParameterConfig().getCollectDob().equals("2")) {
            collectdob = "yearOnly";
        } else if (study.getStudyParameterConfig().getCollectDob().equals("3")) {
            collectdob = "notUsed";
        } else if (study.getStudyParameterConfig().getCollectDob().equals("1")) {
            collectdob = "used";
        }
        request.setAttribute("collectdob", collectdob);
        request.setAttribute("subject", subject);
        request.setAttribute("study", study);
        /* Show both study subject and subject audit events together */
        // Study subject value changed
        Collection studySubjectAuditEvents = adao.findStudySubjectAuditEvents(studySubject.getId());
        // integer values.
        for (Iterator iterator = studySubjectAuditEvents.iterator(); iterator.hasNext(); ) {
            AuditBean auditBean = (AuditBean) iterator.next();
            if (auditBean.getAuditEventTypeId() == 3) {
                auditBean.setOldValue(Status.get(Integer.parseInt(auditBean.getOldValue())).getName());
                auditBean.setNewValue(Status.get(Integer.parseInt(auditBean.getNewValue())).getName());
            }
        }
        studySubjectAudits.addAll(studySubjectAuditEvents);
        // Global subject value changed
        studySubjectAudits.addAll(adao.findSubjectAuditEvents(subject.getId()));
        studySubjectAudits.addAll(adao.findStudySubjectGroupAssignmentAuditEvents(studySubject.getId()));
        request.setAttribute("studySubjectAudits", studySubjectAudits);
        // Get the list of events
        ArrayList events = sedao.findAllByStudySubject(studySubject);
        for (int i = 0; i < events.size(); i++) {
            // Link study event definitions
            StudyEventBean studyEvent = (StudyEventBean) events.get(i);
            studyEvent.setStudyEventDefinition((StudyEventDefinitionBean) seddao.findByPK(studyEvent.getStudyEventDefinitionId()));
            // Link event CRFs
            studyEvent.setEventCRFs(ecdao.findAllByStudyEvent(studyEvent));
            // Find deleted Event CRFs
            List deletedEventCRFs = adao.findDeletedEventCRFsFromAuditEventByEventCRFStatus(studyEvent.getId());
            allDeletedEventCRFs.addAll(deletedEventCRFs);
            logger.info("deletedEventCRFs size[" + deletedEventCRFs.size() + "]");
        }
        for (int i = 0; i < events.size(); i++) {
            StudyEventBean studyEvent = (StudyEventBean) events.get(i);
            studyEventAudits.addAll(adao.findStudyEventAuditEvents(studyEvent.getId()));
            ArrayList eventCRFs = studyEvent.getEventCRFs();
            for (int j = 0; j < eventCRFs.size(); j++) {
                // Link CRF and CRF Versions
                EventCRFBean eventCRF = (EventCRFBean) eventCRFs.get(j);
                eventCRF.setCrfVersion((CRFVersionBean) cvdao.findByPK(eventCRF.getCRFVersionId()));
                eventCRF.setCrf(cdao.findByVersionId(eventCRF.getCRFVersionId()));
                // Get the event crf audits
                eventCRFAudits.addAll(adao.findEventCRFAuditEventsWithItemDataType(eventCRF.getId()));
                logger.info("eventCRFAudits size [" + eventCRFAudits.size() + "] eventCRF id [" + eventCRF.getId() + "]");
            }
        }
        ItemDataDAO itemDataDao = new ItemDataDAO(sm.getDataSource());
        for (Object o : eventCRFAudits) {
            AuditBean ab = (AuditBean) o;
            if (ab.getAuditTable().equalsIgnoreCase("item_data")) {
                ItemDataBean idBean = (ItemDataBean) itemDataDao.findByPK(ab.getEntityId());
                ab.setOrdinal(idBean.getOrdinal());
            }
        }
        request.setAttribute("events", events);
        request.setAttribute("eventCRFAudits", eventCRFAudits);
        request.setAttribute("studyEventAudits", studyEventAudits);
        request.setAttribute("allDeletedEventCRFs", allDeletedEventCRFs);
        request.setAttribute("attachedFilePath", attachedFilePath);
        forwardPage(Page.VIEW_STUDY_SUBJECT_AUDIT);
    }
}
Also used : StudySubjectDAO(org.akaza.openclinica.dao.managestudy.StudySubjectDAO) SubjectDAO(org.akaza.openclinica.dao.submit.SubjectDAO) ArrayList(java.util.ArrayList) StudyEventBean(org.akaza.openclinica.bean.managestudy.StudyEventBean) ItemDataDAO(org.akaza.openclinica.dao.submit.ItemDataDAO) AuditDAO(org.akaza.openclinica.dao.admin.AuditDAO) EventCRFBean(org.akaza.openclinica.bean.submit.EventCRFBean) ItemDataBean(org.akaza.openclinica.bean.submit.ItemDataBean) StudyEventDAO(org.akaza.openclinica.dao.managestudy.StudyEventDAO) Iterator(java.util.Iterator) ArrayList(java.util.ArrayList) List(java.util.List) StudyDAO(org.akaza.openclinica.dao.managestudy.StudyDAO) EventCRFDAO(org.akaza.openclinica.dao.submit.EventCRFDAO) EventDefinitionCRFDAO(org.akaza.openclinica.dao.managestudy.EventDefinitionCRFDAO) EventCRFDAO(org.akaza.openclinica.dao.submit.EventCRFDAO) CRFDAO(org.akaza.openclinica.dao.admin.CRFDAO) CRFVersionDAO(org.akaza.openclinica.dao.submit.CRFVersionDAO) FormProcessor(org.akaza.openclinica.control.form.FormProcessor) StudyBean(org.akaza.openclinica.bean.managestudy.StudyBean) EventDefinitionCRFDAO(org.akaza.openclinica.dao.managestudy.EventDefinitionCRFDAO) AuditBean(org.akaza.openclinica.bean.admin.AuditBean) StudySubjectDAO(org.akaza.openclinica.dao.managestudy.StudySubjectDAO) SubjectBean(org.akaza.openclinica.bean.submit.SubjectBean) StudySubjectBean(org.akaza.openclinica.bean.managestudy.StudySubjectBean) StudyEventDefinitionDAO(org.akaza.openclinica.dao.managestudy.StudyEventDefinitionDAO) StudySubjectBean(org.akaza.openclinica.bean.managestudy.StudySubjectBean) Collection(java.util.Collection) StudyParameterValueDAO(org.akaza.openclinica.dao.service.StudyParameterValueDAO)

Aggregations

StudyDAO (org.akaza.openclinica.dao.managestudy.StudyDAO)205 StudyBean (org.akaza.openclinica.bean.managestudy.StudyBean)184 ArrayList (java.util.ArrayList)116 FormProcessor (org.akaza.openclinica.control.form.FormProcessor)73 StudySubjectDAO (org.akaza.openclinica.dao.managestudy.StudySubjectDAO)59 StudyEventDefinitionDAO (org.akaza.openclinica.dao.managestudy.StudyEventDefinitionDAO)57 StudySubjectBean (org.akaza.openclinica.bean.managestudy.StudySubjectBean)50 Date (java.util.Date)49 StudyEventDAO (org.akaza.openclinica.dao.managestudy.StudyEventDAO)49 StudyEventBean (org.akaza.openclinica.bean.managestudy.StudyEventBean)47 EventCRFDAO (org.akaza.openclinica.dao.submit.EventCRFDAO)46 StudyEventDefinitionBean (org.akaza.openclinica.bean.managestudy.StudyEventDefinitionBean)45 UserAccountDAO (org.akaza.openclinica.dao.login.UserAccountDAO)43 EventDefinitionCRFDAO (org.akaza.openclinica.dao.managestudy.EventDefinitionCRFDAO)43 HashMap (java.util.HashMap)42 UserAccountBean (org.akaza.openclinica.bean.login.UserAccountBean)39 EventCRFBean (org.akaza.openclinica.bean.submit.EventCRFBean)37 CRFVersionDAO (org.akaza.openclinica.dao.submit.CRFVersionDAO)35 CRFDAO (org.akaza.openclinica.dao.admin.CRFDAO)34 CRFVersionBean (org.akaza.openclinica.bean.submit.CRFVersionBean)30