Search in sources :

Example 6 with DataEntryStage

use of org.akaza.openclinica.bean.core.DataEntryStage in project OpenClinica by OpenClinica.

the class ImportCRFDataServlet method processRequest.

@Override
public void processRequest() throws Exception {
    resetPanel();
    panel.setStudyInfoShown(false);
    panel.setOrderedData(true);
    FormProcessor fp = new FormProcessor(request);
    // checks which module the requests are from
    String module = fp.getString(MODULE);
    // keep the module in the session
    session.setAttribute(MODULE, module);
    String action = request.getParameter("action");
    CRFVersionBean version = (CRFVersionBean) session.getAttribute("version");
    File xsdFile = new File(SpringServletAccess.getPropertiesDir(context) + "ODM1-3-0.xsd");
    File xsdFile2 = new File(SpringServletAccess.getPropertiesDir(context) + "ODM1-2-1.xsd");
    if (StringUtil.isBlank(action)) {
        logger.info("action is blank");
        request.setAttribute("version", version);
        forwardPage(Page.IMPORT_CRF_DATA);
    }
    if ("confirm".equalsIgnoreCase(action)) {
        String dir = SQLInitServlet.getField("filePath");
        if (!new File(dir).exists()) {
            logger.info("The filePath in datainfo.properties is invalid " + dir);
            addPageMessage(respage.getString("filepath_you_defined_not_seem_valid"));
            forwardPage(Page.IMPORT_CRF_DATA);
        }
        // All the uploaded files will be saved in filePath/crf/original/
        String theDir = dir + "crf" + File.separator + "original" + File.separator;
        if (!new File(theDir).isDirectory()) {
            new File(theDir).mkdirs();
            logger.info("Made the directory " + theDir);
        }
        // MultipartRequest multi = new MultipartRequest(request, theDir, 50 * 1024 * 1024);
        File f = null;
        try {
            f = uploadFile(theDir, version);
        } catch (Exception e) {
            logger.warn("*** Found exception during file upload***");
            e.printStackTrace();
        }
        if (f == null) {
            forwardPage(Page.IMPORT_CRF_DATA);
        }
        // TODO
        // validation steps
        // 1. valid xml - validated by file uploader below
        // LocalConfiguration config = LocalConfiguration.getInstance();
        // config.getProperties().setProperty(
        // "org.exolab.castor.parser.namespaces",
        // "true");
        // config
        // .getProperties()
        // .setProperty("org.exolab.castor.sax.features",
        // "http://xml.org/sax/features/validation,
        // http://apache.org/xml/features/validation/schema,
        // http://apache.org/xml/features/validation/schema-full-checking");
        // // above sets to validate against namespace
        Mapping myMap = new Mapping();
        // @pgawade 18-April-2011 Fix for issue 8394
        String ODM_MAPPING_DIRPath = CoreResources.ODM_MAPPING_DIR;
        myMap.loadMapping(ODM_MAPPING_DIRPath + File.separator + "cd_odm_mapping.xml");
        Unmarshaller um1 = new Unmarshaller(myMap);
        // um1.addNamespaceToPackageMapping("http://www.openclinica.org/ns/odm_ext_v130/v3.1", "OpenClinica");
        // um1.addNamespaceToPackageMapping("http://www.cdisc.org/ns/odm/v1.3"
        // ,
        // "ODMContainer");
        boolean fail = false;
        ODMContainer odmContainer = new ODMContainer();
        session.removeAttribute("odmContainer");
        try {
            // schemaValidator.validateAgainstSchema(f, xsdFile);
            // utf-8 compliance, tbh 06/2009
            InputStreamReader isr = new InputStreamReader(new FileInputStream(f), "UTF-8");
            odmContainer = (ODMContainer) um1.unmarshal(isr);
            logger.debug("Found crf data container for study oid: " + odmContainer.getCrfDataPostImportContainer().getStudyOID());
            logger.debug("found length of subject list: " + odmContainer.getCrfDataPostImportContainer().getSubjectData().size());
            // 2. validates against ODM 1.3
            // check it all below, throw an exception and route to a
            // different
            // page if not working
            // TODO this block of code needs the xerces serializer in order
            // to
            // work
            // StringWriter myWriter = new StringWriter();
            // Marshaller m1 = new Marshaller(myWriter);
            //
            // m1.setProperty("org.exolab.castor.parser.namespaces",
            // "true");
            // m1
            // .setProperty("org.exolab.castor.sax.features",
            // "http://xml.org/sax/features/validation,
            // http://apache.org/xml/features/validation/schema,
            // http://apache.org/xml/features/validation/schema-full-checking
            // ");
            //
            // m1.setMapping(myMap);
            // m1.setNamespaceMapping("",
            // "http://www.cdisc.org/ns/odm/v1.3");
            // m1.setSchemaLocation("http://www.cdisc.org/ns/odm/v1.3
            // ODM1-3.xsd");
            // m1.marshal(odmContainer);
            // if you havent thrown it, you wont throw it here
            addPageMessage(respage.getString("passed_xml_validation"));
        } catch (Exception me1) {
            me1.printStackTrace();
            // expanding it to all exceptions, but hoping to catch Marshal
            // Exception or SAX Exceptions
            logger.info("found exception with xml transform");
            //
            logger.info("trying 1.2.1");
            try {
                schemaValidator.validateAgainstSchema(f, xsdFile2);
                // for backwards compatibility, we also try to validate vs
                // 1.2.1 ODM 06/2008
                InputStreamReader isr = new InputStreamReader(new FileInputStream(f), "UTF-8");
                odmContainer = (ODMContainer) um1.unmarshal(isr);
            } catch (Exception me2) {
                // not sure if we want to report me2
                MessageFormat mf = new MessageFormat("");
                mf.applyPattern(respage.getString("your_xml_is_not_well_formed"));
                Object[] arguments = { me1.getMessage() };
                addPageMessage(mf.format(arguments));
                //
                // addPageMessage("Your XML is not well-formed, and does not
                // comply with the ODM 1.3 Schema. Please check it, and try
                // again. It returned the message: "
                // + me1.getMessage());
                // me1.printStackTrace();
                forwardPage(Page.IMPORT_CRF_DATA);
            // you can't really wait to forward because then you throw
            // NPEs
            // in the next few parts of the code
            }
        }
        // TODO need to output further here
        // 2.a. is the study the same one that the user is in right now?
        // 3. validates against study metadata
        // 3.a. is that study subject in that study?
        // 3.b. is that study event def in that study?
        // 3.c. is that site in that study?
        // 3.d. is that crf version in that study event def?
        // 3.e. are those item groups in that crf version?
        // 3.f. are those items in that item group?
        List<String> errors = getImportCRFDataService().validateStudyMetadata(odmContainer, ub.getActiveStudyId());
        if (errors != null) {
            // add to session
            // forward to another page
            logger.info(errors.toString());
            for (String error : errors) {
                addPageMessage(error);
            }
            if (errors.size() > 0) {
                // fail = true;
                forwardPage(Page.IMPORT_CRF_DATA);
            } else {
                addPageMessage(respage.getString("passed_study_check"));
                addPageMessage(respage.getString("passed_oid_metadata_check"));
            }
        }
        logger.debug("passed error check");
        // TODO ADD many validation steps before we get to the
        // session-setting below
        // 4. is the event in the correct status to accept data import?
        // -- scheduled, data entry started, completed
        // (and the event should already be created)
        // (and the event should be independent, ie not affected by other
        // events)
        Boolean eventCRFStatusesValid = getImportCRFDataService().eventCRFStatusesValid(odmContainer, ub);
        ImportCRFInfoContainer importCrfInfo = new ImportCRFInfoContainer(odmContainer, sm.getDataSource());
        // The eventCRFBeans list omits EventCRFs that don't match UpsertOn rules. If EventCRF did not exist and
        // doesn't match upsert, it won't be created.
        List<EventCRFBean> eventCRFBeans = getImportCRFDataService().fetchEventCRFBeans(odmContainer, ub);
        List<DisplayItemBeanWrapper> displayItemBeanWrappers = new ArrayList<DisplayItemBeanWrapper>();
        HashMap<String, String> totalValidationErrors = new HashMap<String, String>();
        HashMap<String, String> hardValidationErrors = new HashMap<String, String>();
        // The following map is used for setting the EventCRF status post import.
        HashMap<Integer, String> importedCRFStatuses = getImportCRFDataService().fetchEventCRFStatuses(odmContainer);
        // method in the ImportCRFDataService is modified for this fix.
        if (eventCRFBeans == null) {
            fail = true;
            addPageMessage(respage.getString("no_event_status_matching"));
        } else {
            ArrayList<Integer> permittedEventCRFIds = new ArrayList<Integer>();
            logger.info("found a list of eventCRFBeans: " + eventCRFBeans.toString());
            // List<DisplayItemBeanWrapper> displayItemBeanWrappers = new ArrayList<DisplayItemBeanWrapper>();
            // HashMap<String, String> totalValidationErrors = new
            // HashMap<String, String>();
            // HashMap<String, String> hardValidationErrors = new
            // HashMap<String, String>();
            logger.debug("found event crfs " + eventCRFBeans.size());
            // -- does the event already exist? if not, fail
            if (!eventCRFBeans.isEmpty()) {
                for (EventCRFBean eventCRFBean : eventCRFBeans) {
                    DataEntryStage dataEntryStage = eventCRFBean.getStage();
                    Status eventCRFStatus = eventCRFBean.getStatus();
                    logger.info("Event CRF Bean: id " + eventCRFBean.getId() + ", data entry stage " + dataEntryStage.getName() + ", status " + eventCRFStatus.getName());
                    if (eventCRFStatus.equals(Status.AVAILABLE) || dataEntryStage.equals(DataEntryStage.INITIAL_DATA_ENTRY) || dataEntryStage.equals(DataEntryStage.INITIAL_DATA_ENTRY_COMPLETE) || dataEntryStage.equals(DataEntryStage.DOUBLE_DATA_ENTRY_COMPLETE) || dataEntryStage.equals(DataEntryStage.DOUBLE_DATA_ENTRY)) {
                        // actually want the negative
                        // was status == available and the stage questions, but
                        // when you are at 'data entry complete' your status is
                        // set to 'unavailable'.
                        // >> tbh 09/2008
                        // HOWEVER, when one event crf is removed and the rest
                        // are good, what happens???
                        // need to create a list and inform that one is blocked
                        // and the rest are not...
                        //
                        permittedEventCRFIds.add(new Integer(eventCRFBean.getId()));
                    } else {
                    // fail = true;
                    // addPageMessage(respage.getString(
                    // "the_event_crf_not_correct_status"));
                    // forwardPage(Page.IMPORT_CRF_DATA);
                    }
                }
                // did we exclude all the event CRFs? if not, pass, else fail
                if (eventCRFBeans.size() >= permittedEventCRFIds.size()) {
                    addPageMessage(respage.getString("passed_event_crf_status_check"));
                } else {
                    fail = true;
                    addPageMessage(respage.getString("the_event_crf_not_correct_status"));
                }
                try {
                    List<DisplayItemBeanWrapper> tempDisplayItemBeanWrappers = new ArrayList<DisplayItemBeanWrapper>();
                    tempDisplayItemBeanWrappers = getImportCRFDataService().lookupValidationErrors(request, odmContainer, ub, totalValidationErrors, hardValidationErrors, permittedEventCRFIds);
                    logger.debug("generated display item bean wrappers " + tempDisplayItemBeanWrappers.size());
                    logger.debug("size of total validation errors: " + totalValidationErrors.size());
                    displayItemBeanWrappers.addAll(tempDisplayItemBeanWrappers);
                } catch (NullPointerException npe1) {
                    // what if you have 2 event crfs but the third is a fake?
                    fail = true;
                    logger.debug("threw a NPE after calling lookup validation errors");
                    System.out.println(ExceptionUtils.getStackTrace(npe1));
                    addPageMessage(respage.getString("an_error_was_thrown_while_validation_errors"));
                // npe1.printStackTrace();
                } catch (OpenClinicaException oce1) {
                    fail = true;
                    logger.debug("threw an OCE after calling lookup validation errors " + oce1.getOpenClinicaMessage());
                    addPageMessage(oce1.getOpenClinicaMessage());
                }
            } else if (!eventCRFStatusesValid) {
                fail = true;
                addPageMessage(respage.getString("the_event_crf_not_correct_status"));
            } else {
                fail = true;
                addPageMessage(respage.getString("no_event_crfs_matching_the_xml_metadata"));
            }
        // for (HashMap<String, String> crfData : importedData) {
        // DisplayItemBeanWrapper displayItemBeanWrapper =
        // testing(request,
        // crfData);
        // displayItemBeanWrappers.add(displayItemBeanWrapper);
        // errors = displayItemBeanWrapper.getValidationErrors();
        //
        // }
        }
        if (fail) {
            logger.debug("failed here - forwarding...");
            forwardPage(Page.IMPORT_CRF_DATA);
        } else {
            addPageMessage(respage.getString("passing_crf_edit_checks"));
            session.setAttribute("odmContainer", odmContainer);
            session.setAttribute("importedData", displayItemBeanWrappers);
            session.setAttribute("validationErrors", totalValidationErrors);
            session.setAttribute("hardValidationErrors", hardValidationErrors);
            session.setAttribute("importedCRFStatuses", importedCRFStatuses);
            session.setAttribute("importCrfInfo", importCrfInfo);
            // above are updated 'statically' by the method that originally
            // generated the wrappers; soon the only thing we will use
            // wrappers for is the 'overwrite' flag
            logger.debug("+++ content of total validation errors: " + totalValidationErrors.toString());
            SummaryStatsBean ssBean = getImportCRFDataService().generateSummaryStatsBean(odmContainer, displayItemBeanWrappers, importCrfInfo);
            session.setAttribute("summaryStats", ssBean);
            // will have to set hard edit checks here as well
            session.setAttribute("subjectData", odmContainer.getCrfDataPostImportContainer().getSubjectData());
            forwardPage(Page.VERIFY_IMPORT_SERVLET);
        }
    // }
    }
}
Also used : HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) Mapping(org.exolab.castor.mapping.Mapping) SummaryStatsBean(org.akaza.openclinica.bean.submit.crfdata.SummaryStatsBean) OpenClinicaException(org.akaza.openclinica.exception.OpenClinicaException) ODMContainer(org.akaza.openclinica.bean.submit.crfdata.ODMContainer) EventCRFBean(org.akaza.openclinica.bean.submit.EventCRFBean) Unmarshaller(org.exolab.castor.xml.Unmarshaller) DisplayItemBeanWrapper(org.akaza.openclinica.bean.submit.DisplayItemBeanWrapper) Status(org.akaza.openclinica.bean.core.Status) InputStreamReader(java.io.InputStreamReader) MessageFormat(java.text.MessageFormat) FormProcessor(org.akaza.openclinica.control.form.FormProcessor) OpenClinicaException(org.akaza.openclinica.exception.OpenClinicaException) InsufficientPermissionException(org.akaza.openclinica.web.InsufficientPermissionException) FileInputStream(java.io.FileInputStream) DataEntryStage(org.akaza.openclinica.bean.core.DataEntryStage) CRFVersionBean(org.akaza.openclinica.bean.submit.CRFVersionBean) File(java.io.File)

Example 7 with DataEntryStage

use of org.akaza.openclinica.bean.core.DataEntryStage in project OpenClinica by OpenClinica.

the class MarkEventCRFCompleteServlet method isEachSectionReviewedOnce.

private boolean isEachSectionReviewedOnce() {
    SectionDAO sdao = new SectionDAO(sm.getDataSource());
    DataEntryStage stage = ecb.getStage();
    ArrayList sections = sdao.findAllByCRFVersionId(ecb.getCRFVersionId());
    HashMap numItemsHM = sdao.getNumItemsBySectionId();
    HashMap numItemsPendingHM = sdao.getNumItemsPendingBySectionId(ecb);
    HashMap numItemsCompletedHM = sdao.getNumItemsCompletedBySectionId(ecb);
    for (int i = 0; i < sections.size(); i++) {
        SectionBean sb = (SectionBean) sections.get(i);
        Integer key = new Integer(sb.getId());
        int numItems = TableOfContentsServlet.getIntById(numItemsHM, key);
        int numItemsPending = TableOfContentsServlet.getIntById(numItemsPendingHM, key);
        int numItemsCompleted = TableOfContentsServlet.getIntById(numItemsCompletedHM, key);
        if (stage.equals(DataEntryStage.INITIAL_DATA_ENTRY) && edcb.isDoubleEntry()) {
            if (numItemsPending == 0 && numItems > 0) {
                return false;
            }
        } else {
            if (numItemsCompleted == 0 && numItems > 0) {
                return false;
            }
        }
    }
    return true;
}
Also used : SectionBean(org.akaza.openclinica.bean.submit.SectionBean) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) SectionDAO(org.akaza.openclinica.dao.submit.SectionDAO) DataEntryStage(org.akaza.openclinica.bean.core.DataEntryStage)

Example 8 with DataEntryStage

use of org.akaza.openclinica.bean.core.DataEntryStage in project OpenClinica by OpenClinica.

the class MarkEventCRFCompleteServlet method processRequest.

/*
     * (non-Javadoc)
     *
     * @see org.akaza.openclinica.control.core.SecureController#processRequest()
     */
@Override
protected void processRequest() throws Exception {
    // FormDiscrepancyNotes discNotes =
    // (FormDiscrepancyNotes)session.getAttribute(AddNewSubjectServlet.
    // FORM_DISCREPANCY_NOTES_NAME);
    getEventCRFBean();
    getEventDefinitionCRFBean();
    DataEntryStage stage = ecb.getStage();
    request.setAttribute(TableOfContentsServlet.INPUT_EVENT_CRF_BEAN, ecb);
    // Page errorPage = Page.TABLE_OF_CONTENTS_SERVLET;
    Page errorPage = Page.LIST_STUDY_SUBJECTS_SERVLET;
    if (stage.equals(DataEntryStage.UNCOMPLETED) || stage.equals(DataEntryStage.DOUBLE_DATA_ENTRY_COMPLETE) || stage.equals(DataEntryStage.LOCKED)) {
        throw new InconsistentStateException(errorPage, respage.getString("not_mark_CRF_complete1"));
    }
    if (stage.equals(DataEntryStage.INITIAL_DATA_ENTRY_COMPLETE) || stage.equals(DataEntryStage.DOUBLE_DATA_ENTRY)) {
        if (!edcb.isDoubleEntry()) {
            throw new InconsistentStateException(errorPage, respage.getString("not_mark_CRF_complete2"));
        }
    }
    if (!isEachRequiredFieldFillout()) {
        throw new InconsistentStateException(errorPage, respage.getString("not_mark_CRF_complete4"));
    }
    if (ecb.getInterviewerName().trim().equals("")) {
        throw new InconsistentStateException(errorPage, respage.getString("not_mark_CRF_complete5"));
    }
    if (!fp.isSubmitted()) {
        DisplayTableOfContentsBean toc = TableOfContentsServlet.getDisplayBean(ecb, sm.getDataSource(), currentStudy);
        toc = TableOfContentsServlet.getDisplayBeanWithShownSections(sm.getDataSource(), toc, (DynamicsMetadataService) SpringServletAccess.getApplicationContext(getServletContext()).getBean("dynamicsMetadataService"));
        request.setAttribute(BEAN_DISPLAY, toc);
        resetPanel();
        panel.setStudyInfoShown(false);
        panel.setOrderedData(true);
        setToPanel(resword.getString("subject"), toc.getStudySubject().getLabel());
        setToPanel(resword.getString("study_event_definition"), toc.getStudyEventDefinition().getName());
        StudyEventBean seb = toc.getStudyEvent();
        setToPanel(resword.getString("location"), seb.getLocation());
        setToPanel(resword.getString("start_date"), seb.getDateStarted().toString());
        setToPanel(resword.getString("end_date"), seb.getDateEnded().toString());
        setToPanel(resword.getString("CRF"), toc.getCrf().getName());
        setToPanel(resword.getString("CRF_version"), toc.getCrfVersion().getName());
        forwardPage(Page.MARK_EVENT_CRF_COMPLETE);
    } else {
        boolean markComplete = fp.getString(INPUT_MARK_COMPLETE).equals(VALUE_YES);
        if (markComplete) {
            Status newStatus = ecb.getStatus();
            boolean ide = true;
            if (stage.equals(DataEntryStage.INITIAL_DATA_ENTRY) && edcb.isDoubleEntry()) {
                newStatus = Status.PENDING;
                ecb.setUpdaterId(ub.getId());
                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.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;
            }
            ecb.setStatus(newStatus);
            ecb = (EventCRFBean) ecdao.update(ecb);
            ecdao.markComplete(ecb, ide);
            ItemDataDAO iddao = new ItemDataDAO(sm.getDataSource());
            iddao.updateStatusByEventCRF(ecb, newStatus);
            // change status for event
            StudyEventDAO sedao = new StudyEventDAO(sm.getDataSource());
            StudyEventBean seb = (StudyEventBean) sedao.findByPK(ecb.getStudyEventId());
            seb.setUpdatedDate(new Date());
            seb.setUpdater(ub);
            EventDefinitionCRFDAO edcdao = new EventDefinitionCRFDAO(sm.getDataSource());
            ArrayList allCRFs = ecdao.findAllByStudyEvent(seb);
            ArrayList allEDCs = edcdao.findAllActiveByEventDefinitionId(seb.getStudyEventDefinitionId());
            boolean eventCompleted = true;
            for (int i = 0; i < allCRFs.size(); i++) {
                EventCRFBean ec = (EventCRFBean) allCRFs.get(i);
                if (!ec.getStatus().equals(Status.UNAVAILABLE)) {
                    eventCompleted = false;
                    break;
                }
            }
            if (eventCompleted && allCRFs.size() >= allEDCs.size()) {
                seb.setSubjectEventStatus(SubjectEventStatus.COMPLETED);
            }
            seb = (StudyEventBean) sedao.update(seb);
            addPageMessage(respage.getString("event_CRF_marked_complete"));
            request.setAttribute(EnterDataForStudyEventServlet.INPUT_EVENT_ID, String.valueOf(ecb.getStudyEventId()));
            forwardPage(Page.ENTER_DATA_FOR_STUDY_EVENT_SERVLET);
        } else {
            request.setAttribute(DataEntryServlet.INPUT_IGNORE_PARAMETERS, Boolean.TRUE);
            addPageMessage(respage.getString("event_CRF_not_marked_complete"));
            forwardPage(errorPage);
        }
    }
}
Also used : Status(org.akaza.openclinica.bean.core.Status) SubjectEventStatus(org.akaza.openclinica.bean.core.SubjectEventStatus) ArrayList(java.util.ArrayList) Page(org.akaza.openclinica.view.Page) DisplayTableOfContentsBean(org.akaza.openclinica.bean.submit.DisplayTableOfContentsBean) EventDefinitionCRFDAO(org.akaza.openclinica.dao.managestudy.EventDefinitionCRFDAO) StudyEventBean(org.akaza.openclinica.bean.managestudy.StudyEventBean) InconsistentStateException(org.akaza.openclinica.web.InconsistentStateException) Date(java.util.Date) ItemDataDAO(org.akaza.openclinica.dao.submit.ItemDataDAO) DataEntryStage(org.akaza.openclinica.bean.core.DataEntryStage) EventCRFBean(org.akaza.openclinica.bean.submit.EventCRFBean) StudyEventDAO(org.akaza.openclinica.dao.managestudy.StudyEventDAO) DynamicsMetadataService(org.akaza.openclinica.service.crfdata.DynamicsMetadataService)

Example 9 with DataEntryStage

use of org.akaza.openclinica.bean.core.DataEntryStage in project OpenClinica by OpenClinica.

the class TableOfContentsServlet method isConsistentAction.

/**
     * Determines if the action requested is consistent with the specified Event
     * CRF's data entry stage.
     * 
     * @param action
     *            The action requested.
     * @param ecb
     *            The Event CRF whose data entry stage is being checked for
     *            consistency with the action.
     * @return <code>true</code> if the action is consistent with the Event
     *         CRF's stage, <code>false</code> otherwise.
     */
private boolean isConsistentAction(String action, EventCRFBean ecb) {
    DataEntryStage stage = ecb.getStage();
    boolean isConsistent = true;
    if (action.equals(ACTION_START_INITIAL_DATA_ENTRY) && !stage.equals(DataEntryStage.UNCOMPLETED)) {
        isConsistent = false;
    } else if (action.equals(ACTION_CONTINUE_INITIAL_DATA_ENTRY) && !stage.equals(DataEntryStage.INITIAL_DATA_ENTRY)) {
        isConsistent = false;
    } else if (action.equals(ACTION_START_DOUBLE_DATA_ENTRY) && !stage.equals(DataEntryStage.INITIAL_DATA_ENTRY_COMPLETE)) {
        isConsistent = false;
    } else if (action.equals(ACTION_CONTINUE_DOUBLE_DATA_ENTRY) && !stage.equals(DataEntryStage.DOUBLE_DATA_ENTRY)) {
        isConsistent = false;
    } else if (action.equals(ACTION_ADMINISTRATIVE_EDITING) && !stage.equals(DataEntryStage.DOUBLE_DATA_ENTRY_COMPLETE)) {
        isConsistent = false;
    }
    return isConsistent;
}
Also used : DataEntryStage(org.akaza.openclinica.bean.core.DataEntryStage)

Example 10 with DataEntryStage

use of org.akaza.openclinica.bean.core.DataEntryStage in project OpenClinica by OpenClinica.

the class DisplayStudySubjectEventsRow method compareColumn.

@Override
protected int compareColumn(Object row, int sortingColumn) {
    if (!row.getClass().equals(DisplayStudySubjectEventsRow.class)) {
        return 0;
    }
    DisplayStudySubjectBean thisStudy = (DisplayStudySubjectBean) bean;
    DisplayStudySubjectBean argStudy = (DisplayStudySubjectBean) ((DisplayStudySubjectEventsRow) row).bean;
    int answer = 0;
    // YW <<
    int groupSize = thisStudy.getStudyGroups().size();
    int code;
    if (sortingColumn > 4 + groupSize) {
        code = COL_STUDYCRF;
    } else if (sortingColumn > 4 && sortingColumn <= 4 + groupSize) {
        code = COL_STUDYGROUP;
    } else {
        code = sortingColumn;
    }
    switch(code) {
        case COL_SUBJECT_LABEL:
            answer = thisStudy.getStudySubject().getLabel().toLowerCase().compareTo(argStudy.getStudySubject().getLabel().toLowerCase());
            break;
        case COL_GENDER:
            answer = (thisStudy.getStudySubject().getGender() + "").compareTo(argStudy.getStudySubject().getGender() + "");
            break;
        case COL_STATUS:
            answer = thisStudy.getStudySubject().getStatus().compareTo(argStudy.getStudySubject().getStatus());
            break;
        case COL_EVENT_STATUS:
            if (thisStudy.getStudyEvents() == null || thisStudy.getStudyEvents().isEmpty()) {
                answer = -1;
                break;
            }
            if (argStudy.getStudyEvents() == null || argStudy.getStudyEvents().isEmpty()) {
                answer = 1;
                break;
            }
            answer = ((DisplayStudyEventBean) thisStudy.getStudyEvents().get(0)).getStudyEvent().getSubjectEventStatus().compareTo(((DisplayStudyEventBean) argStudy.getStudyEvents().get(0)).getStudyEvent().getSubjectEventStatus());
            break;
        case COL_EVENT_DATE:
            if (thisStudy.getStudyEvents() == null || thisStudy.getStudyEvents().isEmpty()) {
                answer = -1;
                break;
            }
            if (argStudy.getStudyEvents() == null || argStudy.getStudyEvents().isEmpty()) {
                answer = 1;
                break;
            }
            answer = ((DisplayStudyEventBean) thisStudy.getStudyEvents().get(0)).getStudyEvent().getDateStarted().compareTo(((DisplayStudyEventBean) argStudy.getStudyEvents().get(0)).getStudyEvent().getDateStarted());
            break;
        case COL_STUDYGROUP:
            answer = ((SubjectGroupMapBean) thisStudy.getStudyGroups().get(sortingColumn - 5)).getStudyGroupName().toLowerCase().compareTo(((SubjectGroupMapBean) argStudy.getStudyGroups().get(sortingColumn - 5)).getStudyGroupName().toLowerCase());
            break;
        case COL_STUDYCRF:
            if (thisStudy.getStudyEvents() == null || thisStudy.getStudyEvents().isEmpty()) {
                answer = -1;
                break;
            }
            if (argStudy.getStudyEvents() == null || argStudy.getStudyEvents().isEmpty()) {
                answer = 1;
                break;
            }
            ArrayList thisAllEventCRFs = ((DisplayStudyEventBean) thisStudy.getStudyEvents().get(0)).getAllEventCRFs();
            ArrayList argAllEventCRFs = ((DisplayStudyEventBean) argStudy.getStudyEvents().get(0)).getAllEventCRFs();
            if (thisAllEventCRFs == null || thisAllEventCRFs.isEmpty()) {
                answer = -1;
                break;
            }
            if (argAllEventCRFs == null || argAllEventCRFs.isEmpty()) {
                answer = 1;
                break;
            }
            // Event crf status comparision
            DataEntryStage thisDes = ((DisplayEventCRFBean) thisAllEventCRFs.get(sortingColumn - 5)).getEventCRF().getStage();
            DataEntryStage argDes = ((DisplayEventCRFBean) argAllEventCRFs.get(sortingColumn - 5)).getEventCRF().getStage();
            /*Event crf status is ordered in this sequence, Not Started=1,Data Entry Started=2,Initial Data Entry Completed=3,
                Double Data Entry Started=4,Double Data Entry Complete=5,Complete=6,Locked=7,Invalid/Removed=0*/
            switch(thisDes.getId()) {
                //DataEntryStage.INVALID
                case 0:
                    if (thisDes.getId() == argDes.getId()) {
                        answer = 0;
                    } else {
                        answer = 1;
                    }
                    break;
                //DataEntryStage.UNCOMPLETED
                case 1:
                    if (thisDes.getId() == argDes.getId()) {
                        answer = 0;
                    } else {
                        answer = -1;
                    }
                    break;
                //DataEntryStage.INITIAL_DATA_ENTRY
                case 2:
                    if (thisDes.getId() == argDes.getId()) {
                        answer = 0;
                    } else if (argDes.getId() == 1) {
                        answer = 1;
                    } else {
                        answer = -1;
                    }
                    break;
                //DataEntryStage.INITIAL_DATA_ENTRY_COMPLETE
                case 3:
                    if (thisDes.getId() == argDes.getId()) {
                        answer = 0;
                    } else if (argDes.getId() == 1 || argDes.getId() == 2) {
                        answer = 1;
                    } else {
                        answer = -1;
                    }
                    break;
                //DataEntryStage.DOUBLE_DATA_ENTRY
                case 4:
                    if (thisDes.getId() == argDes.getId()) {
                        answer = 0;
                    } else if (argDes.getId() == 1 || argDes.getId() == 2 || argDes.getId() == 3) {
                        answer = 1;
                    } else {
                        answer = -1;
                    }
                    break;
                //DataEntryStage.DOUBLE_DATA_ENTRY_COMPLETE
                case 5:
                    if (thisDes.getId() == argDes.getId()) {
                        answer = 0;
                    } else if (argDes.getId() == 0 || argDes.getId() == 7) {
                        answer = -1;
                    } else {
                        answer = 1;
                    }
                    break;
                //DataEntryStage.ADMINISTRATIVE_EDITING
                case 6:
                    if (thisDes.getId() == argDes.getId()) {
                        answer = 0;
                    } else if (argDes.getId() == 7 || argDes.getId() == 0) {
                        answer = -1;
                    } else {
                        answer = 1;
                    }
                    break;
                //DataEntryStage.LOCKED
                case 7:
                    if (thisDes.getId() == argDes.getId()) {
                        answer = 0;
                    } else if (argDes.getId() == 0) {
                        answer = -1;
                    } else {
                        answer = 1;
                    }
                    break;
                default:
                    answer = 1;
            }
    }
    return answer;
}
Also used : DisplayStudyEventBean(org.akaza.openclinica.bean.managestudy.DisplayStudyEventBean) DisplayStudySubjectBean(org.akaza.openclinica.bean.managestudy.DisplayStudySubjectBean) ArrayList(java.util.ArrayList) DataEntryStage(org.akaza.openclinica.bean.core.DataEntryStage)

Aggregations

DataEntryStage (org.akaza.openclinica.bean.core.DataEntryStage)22 ArrayList (java.util.ArrayList)14 Status (org.akaza.openclinica.bean.core.Status)13 EventCRFBean (org.akaza.openclinica.bean.submit.EventCRFBean)13 SubjectEventStatus (org.akaza.openclinica.bean.core.SubjectEventStatus)10 EventDefinitionCRFBean (org.akaza.openclinica.bean.managestudy.EventDefinitionCRFBean)10 HashMap (java.util.HashMap)9 StudyEventBean (org.akaza.openclinica.bean.managestudy.StudyEventBean)9 Date (java.util.Date)8 EventDefinitionCRFDAO (org.akaza.openclinica.dao.managestudy.EventDefinitionCRFDAO)8 StudyEventDAO (org.akaza.openclinica.dao.managestudy.StudyEventDAO)8 StudyBean (org.akaza.openclinica.bean.managestudy.StudyBean)7 EventCRFDAO (org.akaza.openclinica.dao.submit.EventCRFDAO)7 StudyEventDefinitionBean (org.akaza.openclinica.bean.managestudy.StudyEventDefinitionBean)6 StudyDAO (org.akaza.openclinica.dao.managestudy.StudyDAO)6 StudyEventDefinitionDAO (org.akaza.openclinica.dao.managestudy.StudyEventDefinitionDAO)6 CRFDAO (org.akaza.openclinica.dao.admin.CRFDAO)5 SectionDAO (org.akaza.openclinica.dao.submit.SectionDAO)5 HttpSession (javax.servlet.http.HttpSession)4 UserAccountBean (org.akaza.openclinica.bean.login.UserAccountBean)4