Search in sources :

Example 6 with DisplayItemGroupBean

use of org.akaza.openclinica.bean.submit.DisplayItemGroupBean in project OpenClinica by OpenClinica.

the class DataEntryServlet method populateNotesWithDBNoteCounts.

/*
     * change to explicitly re-set the section bean after reviewing the disc note counts, tbh 01/2010
     */
protected DisplaySectionBean populateNotesWithDBNoteCounts(FormDiscrepancyNotes discNotes, DisplaySectionBean section, HttpServletRequest request) {
    DiscrepancyNoteDAO dndao = new DiscrepancyNoteDAO(getDataSource());
    // ArrayList items = section.getItems();
    EventCRFBean ecb = (EventCRFBean) request.getAttribute(INPUT_EVENT_CRF);
    ArrayList<DiscrepancyNoteBean> ecNotes = dndao.findEventCRFDNotesFromEventCRF(ecb);
    ArrayList<DiscrepancyNoteBean> existingNameNotes = new ArrayList(), nameNotes = new ArrayList();
    ArrayList<DiscrepancyNoteBean> existingIntrvDateNotes = new ArrayList(), dateNotes = new ArrayList();
    long t = System.currentTimeMillis();
    logMe("Method:populateNotesWithDBNoteCounts" + t);
    int intNew = 0, intRes = 0, intUpdated = 0, intClosed = 0, intNA = 0;
    int dateNew = 0, dateRes = 0, dateUpdated = 0, dateClosed = 0, dateNA = 0;
    boolean hasMoreThreads = false;
    for (int i = 0; i < ecNotes.size(); i++) {
        DiscrepancyNoteBean dn = ecNotes.get(i);
        if (INTERVIEWER_NAME.equalsIgnoreCase(dn.getColumn())) {
            discNotes.setNumExistingFieldNotes(INPUT_INTERVIEWER, 1);
            request.setAttribute("hasNameNote", "yes");
            request.setAttribute(INTERVIEWER_NAME_NOTE, dn);
            if (dn.getParentDnId() == 0)
                existingNameNotes.add(dn);
        }
        if (DATE_INTERVIEWED.equalsIgnoreCase(dn.getColumn())) {
            discNotes.setNumExistingFieldNotes(INPUT_INTERVIEW_DATE, 1);
            request.setAttribute("hasDateNote", "yes");
            request.setAttribute(INTERVIEWER_DATE_NOTE, dn);
            if (dn.getParentDnId() == 0)
                existingIntrvDateNotes.add(dn);
        }
    }
    logMe("Method:populateNotesWithDBNoteCounts before calling setToolTipEventNotes" + System.currentTimeMillis() + "time took:" + (System.currentTimeMillis() - t));
    setToolTipEventNotes(request);
    request.setAttribute("nameNoteResStatus", getDiscrepancyNoteResolutionStatus(existingNameNotes));
    request.setAttribute("IntrvDateNoteResStatus", getDiscrepancyNoteResolutionStatus(existingIntrvDateNotes));
    request.setAttribute("existingNameNotes", existingNameNotes);
    request.setAttribute("existingIntrvDateNotes", existingIntrvDateNotes);
    List<DisplayItemWithGroupBean> allItems = section.getDisplayItemGroups();
    LOGGER.debug("start to populate notes: " + section.getDisplayItemGroups().size());
    this.output(allItems);
    logMe("Looping through allItems time:" + System.currentTimeMillis() + "time took from the begining" + (System.currentTimeMillis() - t));
    for (int k = 0; k < allItems.size(); k++) {
        DisplayItemWithGroupBean itemWithGroup = allItems.get(k);
        if (itemWithGroup.isInGroup()) {
            LOGGER.debug("group item DNote...");
            List<DisplayItemGroupBean> digbs = itemWithGroup.getItemGroups();
            LOGGER.trace("digbs size: " + digbs.size());
            for (int i = 0; i < digbs.size(); i++) {
                DisplayItemGroupBean displayGroup = digbs.get(i);
                List<DisplayItemBean> items = displayGroup.getItems();
                for (int j = 0; j < items.size(); j++) {
                    DisplayItemBean dib = items.get(j);
                    int itemDataId = dib.getData().getId();
                    int numNotes = dndao.findNumExistingNotesForItem(itemDataId);
                    int numNotes1 = dndao.findNumOfActiveExistingNotesForItemData(itemDataId);
                    int ordinal = this.getManualRows(digbs);
                    String inputName = getGroupItemInputName(displayGroup, displayGroup.getFormInputOrdinal(), dib);
                    if (!displayGroup.isAuto()) {
                        inputName = getGroupItemManualInputName(displayGroup, i, dib);
                    }
                    discNotes.setNumExistingFieldNotes(inputName, numNotes1);
                    ArrayList notes = discNotes.getNotes(inputName);
                    // + notes2.size());
                    dib.setNumDiscrepancyNotes(numNotes + notes.size());
                    dib.setDiscrepancyNoteStatus(getDiscrepancyNoteResolutionStatus(itemDataId, notes));
                    dib = setTotals(dib, itemDataId, notes, ecb.getId());
                    LOGGER.debug("dib note size:" + dib.getNumDiscrepancyNotes() + " " + dib.getData().getId() + " " + inputName);
                    items.set(j, dib);
                }
                displayGroup.setItems(items);
                digbs.set(i, displayGroup);
            }
            itemWithGroup.setItemGroups(digbs);
        } else {
            LOGGER.trace("single item db note");
            DisplayItemBean dib = itemWithGroup.getSingleItem();
            try {
                ResponseOptionBean rob = (ResponseOptionBean) dib.getMetadata().getResponseSet().getOptions().get(0);
                LOGGER.trace("test print of options for coding: " + rob.getValue());
            } catch (NullPointerException e) {
            // TODO Auto-generated catch block
            // e.printStackTrace();
            }
            int itemDataId = dib.getData().getId();
            int itemId = dib.getItem().getId();
            int numNotes = dndao.findNumExistingNotesForItem(itemDataId);
            int numNotes1 = dndao.findNumOfActiveExistingNotesForItemData(itemDataId);
            String inputFieldName = "input" + itemId;
            discNotes.setNumExistingFieldNotes(inputFieldName, numNotes1);
            dib.setNumDiscrepancyNotes(numNotes + discNotes.getNotes(inputFieldName).size());
            dib.setDiscrepancyNoteStatus(getDiscrepancyNoteResolutionStatus(itemDataId, discNotes.getNotes(inputFieldName)));
            dib = setTotals(dib, itemDataId, discNotes.getNotes(inputFieldName), ecb.getId());
            ArrayList childItems = dib.getChildren();
            for (int j = 0; j < childItems.size(); j++) {
                DisplayItemBean child = (DisplayItemBean) childItems.get(j);
                int childItemDataId = child.getData().getId();
                int childItemId = child.getItem().getId();
                int childNumNotes = dndao.findNumExistingNotesForItem(childItemDataId);
                String childInputFieldName = "input" + childItemId;
                LOGGER.debug("*** setting " + childInputFieldName);
                discNotes.setNumExistingFieldNotes(childInputFieldName, childNumNotes);
                child.setNumDiscrepancyNotes(childNumNotes + discNotes.getNotes(childInputFieldName).size());
                child.setDiscrepancyNoteStatus(getDiscrepancyNoteResolutionStatus(childItemDataId, discNotes.getNotes(childInputFieldName)));
                child = setTotals(child, childItemDataId, discNotes.getNotes(childInputFieldName), ecb.getId());
                childItems.set(j, child);
            }
            dib.setChildren(childItems);
            itemWithGroup.setSingleItem(runDynamicsItemCheck(dib, null, request));
        }
        // missing piece of the puzzle - reset the itemgroup into all items?
        allItems.set(k, itemWithGroup);
    }
    section.setDisplayItemGroups(allItems);
    return section;
}
Also used : DisplayItemGroupBean(org.akaza.openclinica.bean.submit.DisplayItemGroupBean) DiscrepancyNoteDAO(org.akaza.openclinica.dao.managestudy.DiscrepancyNoteDAO) DisplayItemWithGroupBean(org.akaza.openclinica.bean.submit.DisplayItemWithGroupBean) ArrayList(java.util.ArrayList) ResponseOptionBean(org.akaza.openclinica.bean.submit.ResponseOptionBean) EventCRFBean(org.akaza.openclinica.bean.submit.EventCRFBean) DiscrepancyNoteBean(org.akaza.openclinica.bean.managestudy.DiscrepancyNoteBean) DisplayItemBean(org.akaza.openclinica.bean.submit.DisplayItemBean)

Example 7 with DisplayItemGroupBean

use of org.akaza.openclinica.bean.submit.DisplayItemGroupBean in project OpenClinica by OpenClinica.

the class DataEntryServlet method createItemWithGroups.

//@pgawade 30-May-2012 Fix for issue 13963 - added an extra parameter 'isSubmitted' to method createItemWithGroups
protected List<DisplayItemWithGroupBean> createItemWithGroups(DisplaySectionBean dsb, boolean hasItemGroup, int eventCRFDefId, HttpServletRequest request, boolean isSubmitted) {
    HttpSession session = request.getSession();
    List<DisplayItemWithGroupBean> displayItemWithGroups = new ArrayList<DisplayItemWithGroupBean>();
    EventCRFBean ecb = (EventCRFBean) request.getAttribute(INPUT_EVENT_CRF);
    ItemDAO idao = new ItemDAO(getDataSource());
    SectionBean sb = (SectionBean) request.getAttribute(SECTION_BEAN);
    EventDefinitionCRFBean edcb = (EventDefinitionCRFBean) request.getAttribute(EVENT_DEF_CRF_BEAN);
    // BWP>> Get a List<String> of any null values such as NA or NI
    // method returns null values as a List<String>
    // >>BWP
    ArrayList items = dsb.getItems();
    // For adding null values to display items
    FormBeanUtil formBeanUtil = new FormBeanUtil();
    List<String> nullValuesList = formBeanUtil.getNullValuesByEventCRFDefId(eventCRFDefId, getDataSource());
    LOGGER.trace("single items size: " + items.size());
    for (int i = 0; i < items.size(); i++) {
        DisplayItemBean item = (DisplayItemBean) items.get(i);
        DisplayItemWithGroupBean newOne = new DisplayItemWithGroupBean();
        newOne.setSingleItem(runDynamicsItemCheck(item, null, request));
        newOne.setOrdinal(item.getMetadata().getOrdinal());
        newOne.setInGroup(false);
        newOne.setPageNumberLabel(item.getMetadata().getPageNumberLabel());
        displayItemWithGroups.add(newOne);
    // logger.trace("just added on line 1979:
    // "+newOne.getSingleItem().getData().getValue());
    }
    if (hasItemGroup) {
        ItemDataDAO iddao = new ItemDataDAO(getDataSource(), locale);
        ArrayList<ItemDataBean> data = iddao.findAllBySectionIdAndEventCRFId(sb.getId(), ecb.getId());
        HashMap<String, ItemDataBean> dataMap = (HashMap<String, ItemDataBean>) getAllActive(data);
        if (data != null && data.size() > 0) {
            session.setAttribute(HAS_DATA_FLAG, true);
        }
        LOGGER.trace("found data: " + data.size());
        LOGGER.trace("data.toString: " + data.toString());
        for (DisplayItemGroupBean itemGroup : dsb.getDisplayFormGroups()) {
            LOGGER.debug("found one itemGroup");
            DisplayItemWithGroupBean newOne = new DisplayItemWithGroupBean();
            // to arrange item groups and other single items, the ordinal of
            // a item group will be the ordinal of the first item in this
            // group
            DisplayItemBean firstItem = itemGroup.getItems().get(0);
            // so we are either checking the first or the last item, BUT ONLY ONCE
            newOne.setPageNumberLabel(firstItem.getMetadata().getPageNumberLabel());
            newOne.setItemGroup(itemGroup);
            newOne.setInGroup(true);
            newOne.setOrdinal(itemGroup.getGroupMetaBean().getOrdinal());
            List<ItemBean> itBeans = idao.findAllItemsByGroupIdOrdered(itemGroup.getItemGroupBean().getId(), sb.getCRFVersionId());
            List<DisplayItemBean> dibs = new ArrayList();
            boolean hasData = false;
            int checkAllColumns = 0;
            if (data.size() > 0)
                hasData = true;
            //@pgawade 30-May-2012 Fix for issue 13963 - added an extra parameter 'isSubmitted' to method buildMatrixForRepeatingGroups
            newOne = buildMatrixForRepeatingGroups(newOne, itemGroup, ecb, sb, itBeans, dataMap, nullValuesList, isSubmitted);
            if (hasData) {
                //TODO: fix the group_has_data flag on bean not on session
                session.setAttribute(GROUP_HAS_DATA, Boolean.TRUE);
            } else {
                session.setAttribute(GROUP_HAS_DATA, Boolean.FALSE);
                // no data, still add a blank row for displaying
                if (nullValuesList != null && nullValuesList.size() > 0) {
                    LOGGER.trace("set with nullValuesList of : " + nullValuesList);
                }
                dibs = FormBeanUtil.getDisplayBeansFromItems(itBeans, getDataSource(), ecb, sb.getId(), nullValuesList, getServletContext());
                DisplayItemGroupBean digb2 = new DisplayItemGroupBean();
                digb2.setItems(dibs);
                digb2.setEditFlag("initial");
            }
            displayItemWithGroups.add(newOne);
        }
    }
    // if hasItemGroup
    Collections.sort(displayItemWithGroups);
    return displayItemWithGroups;
}
Also used : DisplayItemGroupBean(org.akaza.openclinica.bean.submit.DisplayItemGroupBean) DisplayItemBean(org.akaza.openclinica.bean.submit.DisplayItemBean) ItemBean(org.akaza.openclinica.bean.submit.ItemBean) ItemDAO(org.akaza.openclinica.dao.submit.ItemDAO) FormBeanUtil(org.akaza.openclinica.view.form.FormBeanUtil) HashMap(java.util.HashMap) HttpSession(javax.servlet.http.HttpSession) DisplayItemWithGroupBean(org.akaza.openclinica.bean.submit.DisplayItemWithGroupBean) ArrayList(java.util.ArrayList) ItemDataDAO(org.akaza.openclinica.dao.submit.ItemDataDAO) SectionBean(org.akaza.openclinica.bean.submit.SectionBean) DisplaySectionBean(org.akaza.openclinica.bean.submit.DisplaySectionBean) EventCRFBean(org.akaza.openclinica.bean.submit.EventCRFBean) ItemDataBean(org.akaza.openclinica.bean.submit.ItemDataBean) DisplayItemBean(org.akaza.openclinica.bean.submit.DisplayItemBean) EventDefinitionCRFBean(org.akaza.openclinica.bean.managestudy.EventDefinitionCRFBean)

Example 8 with DisplayItemGroupBean

use of org.akaza.openclinica.bean.submit.DisplayItemGroupBean in project OpenClinica by OpenClinica.

the class DataEntryServlet method loadFormValueForItemGroup.

/**
     * This methods will create an array of DisplayItemGroupBean, which contains multiple rows for an item group on the data entry form.
     *
     * @param digb
     *            The Item group which has multiple data rows
     * @param dbGroups
     *            The original array got from DB which contains multiple data rows
     * @param formGroups
     *            The new array got from front end which contains multiple data rows
     * @param request TODO
     * @return new constructed formGroups, compare to dbGroups, some rows are update, some new ones are added and some are removed
     */
protected List<DisplayItemGroupBean> loadFormValueForItemGroup(DisplayItemGroupBean digb, List<DisplayItemGroupBean> dbGroups, List<DisplayItemGroupBean> formGroups, int eventDefCRFId, HttpServletRequest request) {
    SectionBean sb = (SectionBean) request.getAttribute(SECTION_BEAN);
    int repeatMax = digb.getGroupMetaBean().getRepeatMax();
    FormProcessor fp = new FormProcessor(request);
    ItemDAO idao = new ItemDAO(getDataSource());
    List<ItemBean> itBeans = idao.findAllItemsByGroupId(digb.getItemGroupBean().getId(), sb.getCRFVersionId());
    LOGGER.debug("+++ starting to review groups: " + repeatMax);
    long timeCheck = System.currentTimeMillis();
    EventCRFBean ecb = (EventCRFBean) request.getAttribute(INPUT_EVENT_CRF);
    // adding this code from below, since we want to pass a null values list
    // in all cases of getDisplayBeansFromItems().
    // For adding null values to display items
    FormBeanUtil formBeanUtil = new FormBeanUtil();
    List<String> nullValuesList = new ArrayList<String>();
    // BWP>> Get a List<String> of any null values such as NA or NI
    // method returns null values as a List<String>
    nullValuesList = formBeanUtil.getNullValuesByEventCRFDefId(eventDefCRFId, getDataSource());
    // >>BWP
    // logger.trace("+++ starting to review groups 2: " + repeatMax);
    long two = System.currentTimeMillis() - timeCheck;
    // logger.trace("time 2: " + two + "ms");
    // >>TBH below dual for loops need a breaker to avoid a performance hit
    int firstLoopBreak = 0;
    int secondLoopBreak = 0;
    ItemDataDAO iddao = new ItemDataDAO(getDataSource(), locale);
    int maxOrdinal = iddao.getMaxOrdinalForGroup(ecb, sb, digb.getItemGroupBean());
    repeatMax = (repeatMax < maxOrdinal) ? maxOrdinal : repeatMax;
    for (int i = 0; i < repeatMax; i++) {
        DisplayItemGroupBean formGroup = new DisplayItemGroupBean();
        formGroup.setItemGroupBean(digb.getItemGroupBean());
        formGroup.setGroupMetaBean(runDynamicsCheck(digb.getGroupMetaBean(), request));
        ItemGroupBean igb = digb.getItemGroupBean();
        // want to do deep copy here, so always get a fresh copy for items,
        // may use other better way to do, like clone
        List<DisplayItemBean> dibs = FormBeanUtil.getDisplayBeansFromItems(itBeans, getDataSource(), ecb, sb.getId(), nullValuesList, getServletContext());
        // and then get newly created rows later, tbh 01/2010
        if (fp.getStartsWith(igb.getOid() + "_manual" + i + "input")) {
            formGroup.setOrdinal(i);
            formGroup.setFormInputOrdinal(i);
            formGroup.setAuto(false);
            formGroup.setInputId(igb.getOid() + "_manual" + i);
            LOGGER.debug("1: set auto to false for " + igb.getOid() + " " + i);
            dibs = processInputForGroupItem(fp, dibs, i, digb, false);
            formGroup.setItems(dibs);
            formGroups.add(formGroup);
        } else if (!StringUtil.isBlank(fp.getString(igb.getOid() + "_manual" + i + ".newRow"))) {
            // ||
            // (fp.getStartsWith(igb.getOid() + "_manual" + i + "input"))) {
            // the ordinal is the number got from [ ] and submitted by
            // repetition javascript
            formGroup.setOrdinal(i);
            formGroup.setFormInputOrdinal(i);
            formGroup.setInputId(igb.getOid() + "_manual" + i + ".newRow");
            formGroup.setAuto(false);
            LOGGER.debug("2: set auto to false for " + igb.getOid() + " " + i);
            dibs = processInputForGroupItem(fp, dibs, i, digb, false);
            formGroup.setItems(dibs);
            formGroups.add(formGroup);
        } else {
            firstLoopBreak++;
        }
        if (firstLoopBreak > 14) {
            LOGGER.debug("break first loop");
            break;
        }
    }
    // end of for (int i = 0; i < repeatMax; i++)
    // >>TBH remove the above eventually, repeat some work here?
    LOGGER.trace("+++ starting to review groups 3: " + repeatMax);
    two = System.currentTimeMillis() - timeCheck;
    LOGGER.trace("time 3: " + two + "ms");
    // had the call to form bean utils here, tbh
    for (int i = 0; i < repeatMax; i++) {
        DisplayItemGroupBean formGroup = new DisplayItemGroupBean();
        formGroup.setItemGroupBean(digb.getItemGroupBean());
        //            try {
        //                // set isShown here, tbh 04/2010
        //                boolean showGroup = getItemMetadataService().isGroupShown(digb.getGroupMetaBean().getId(), ecb);
        //                logger.debug("found show group for group meta bean " + digb.getGroupMetaBean().getId() + ": " + showGroup);
        //                if (showGroup) {
        //                    digb.getGroupMetaBean().setShowGroup(showGroup);
        //                    // we are only hiding, not showing (for now) tbh
        //                }
        //                // << tbh 04/2010
        //            } catch (OpenClinicaException oce) {
        //                // do nothing for right now, just store the bean
        //                logger.debug("throws an OCE for " + digb.getGroupMetaBean().getId());
        //            }
        formGroup.setGroupMetaBean(runDynamicsCheck(digb.getGroupMetaBean(), request));
        ItemGroupBean igb = digb.getItemGroupBean();
        // adding this code from below, since we want to pass a null values
        // list
        // in all cases of getDisplayBeansFromItems().
        // For adding null values to display items
        // FormBeanUtil formBeanUtil = new FormBeanUtil();
        // List<String> nullValuesList = new ArrayList<String>();
        // BWP>> Get a List<String> of any null values such as NA or NI
        // method returns null values as a List<String>
        // >>BWP
        // want to do deep copy here, so always get a fresh copy for items,
        // may use other better way to do, like clone
        // moved it back down here to fix another bug, tbh 12-3-2007
        List<DisplayItemBean> dibs = FormBeanUtil.getDisplayBeansFromItems(itBeans, getDataSource(), ecb, sb.getId(), nullValuesList, getServletContext());
        LOGGER.trace("+++count for dibs after deep copy: " + dibs.size());
        two = System.currentTimeMillis() - timeCheck;
        // created by rep model(add button)
        if (fp.getStartsWith(igb.getOid() + "_" + i + "input")) {
            formGroup.setInputId(igb.getOid() + "_" + i);
            if (i == 0) {
                // ordinal that will be saved into
                formGroup.setOrdinal(i);
            // DB
            } else {
                // from 0 again, the
                formGroup.setFormInputOrdinal(i);
            // ordinal from front
            // end page, needs to be
            // reprocessed
            }
            formGroup.setAuto(true);
            LOGGER.debug("1: set auto to TRUE for " + igb.getOid() + " " + i);
            dibs = processInputForGroupItem(fp, dibs, i, digb, true);
            LOGGER.trace("+++ group ordinal: " + i + " igb name " + igb.getName());
            formGroup.setItems(dibs);
            formGroups.add(formGroup);
        } else if (!StringUtil.isBlank(fp.getString(igb.getOid() + "_" + i + ".newRow"))) {
            // || (fp.getStartsWith(igb.getOid() + "_" + i + "input"))) {
            // the ordinal is the number got from [ ] and submitted by
            // repetition javascript
            formGroup.setInputId(igb.getOid() + "_" + i);
            if (i == 0) {
                // ordinal that will be saved into
                formGroup.setOrdinal(i);
            // DB
            } else {
                // from 0 again, the
                formGroup.setFormInputOrdinal(i);
            // ordinal from front
            // end page, needs to be
            // reprocessed
            }
            // String fieldName = igb.getOid() + "_" + i + this.getInputName(dib);
            // if (!StringUtil.isBlank(fp.getString(fieldName))) {
            // if (i != repeatMax) {
            // formGroup.setAuto(false);
            // logger.debug("set auto to false for " + igb.getOid() + " " + i);
            // } else {
            formGroup.setAuto(true);
            LOGGER.debug("2: set auto to TRUE for " + igb.getOid() + " " + i);
            dibs = processInputForGroupItem(fp, dibs, i, digb, true);
            LOGGER.trace("+++ group ordinal: " + i + " igb name " + igb.getName());
            formGroup.setItems(dibs);
            formGroups.add(formGroup);
        } else {
            secondLoopBreak++;
        }
        if (secondLoopBreak > 14) {
            LOGGER.debug("break second loop");
            break;
        }
    }
    // end of for (int i = 0; i < repeatMax; i++)
    LOGGER.debug("first loop: " + firstLoopBreak);
    LOGGER.debug("second loop: " + secondLoopBreak);
    LOGGER.trace("+++ starting to review groups 4: " + repeatMax);
    two = System.currentTimeMillis() - timeCheck;
    LOGGER.trace("time 4: " + two + "ms");
    // checks how many rows are manually created, not added by repetition
    // model
    int manualRows = getManualRows(formGroups);
    // for (int j = 0; j < formGroups.size(); j++) {
    // DisplayItemGroupBean formItemGroup = formGroups.get(j);
    // // logger.trace("begin formGroup Ordinal:" +
    // // formItemGroup.getOrdinal());
    // if (formItemGroup.isAuto() == false) {
    // manualRows = manualRows + 1;
    // }
    // }
    LOGGER.debug(" manual rows " + manualRows + " formGroup size " + formGroups.size());
    request.setAttribute("manualRows", new Integer(manualRows));
    // reset ordinal for the auto-created rows except for the first row
    for (int j = 0; j < formGroups.size(); j++) {
        DisplayItemGroupBean formItemGroup = formGroups.get(j);
        if (formItemGroup.isAuto() && formItemGroup.getFormInputOrdinal() > 0) {
            LOGGER.trace("+++ formInputOrdinal() " + formItemGroup.getFormInputOrdinal());
            // rows included in the model: first row, last existing row and
            // new rows
            // the rows in between are manually added
            // set the correct ordinal that will be saved into DB
            // the rows generated by model starts from 0, need to add the
            // number of manual rows to
            // get the correct ordinals, otherwise, we will have duplicate
            // ordinals like two ordinal 0
            formItemGroup.setOrdinal(formItemGroup.getFormInputOrdinal() + manualRows);
        }
    }
    LOGGER.trace("+++ starting to review groups 5: " + repeatMax);
    two = System.currentTimeMillis() - timeCheck;
    LOGGER.trace("time 5: " + two + "ms");
    // sort all the rows by ordinal
    Collections.sort(formGroups);
    LOGGER.trace("group row size:" + formGroups.size());
    // suppose we have 3 rows of data from db, the orginal order is 0,1,2,
    // repetition model will submit row number in [ ] like the following:
    // 0,1,2.. consecutive numbers, means no row removed in between
    // 0,1,3,4.. the 2rd row is removed, 3 and 4 are new rows
    int previous = -1;
    for (int j = 0; j < formGroups.size(); j++) {
        DisplayItemGroupBean formItemGroup = formGroups.get(j);
        LOGGER.trace("formGroup Ordinal:" + formItemGroup.getOrdinal());
        // tbh 08/2009
        if (formItemGroup.getOrdinal() == previous) {
            LOGGER.debug("found a match btw previous and ordinal");
            formItemGroup.setEditFlag("edit");
            formItemGroup.setOrdinal(previous + 1);
        // dbGroups.get(j).setEditFlag("edit");
        }
        // << tbh 08/2009
        if (formItemGroup.getOrdinal() > dbGroups.size() - 1) {
            formItemGroup.setEditFlag("add");
        } else {
            for (int i = 0; i < dbGroups.size(); i++) {
                DisplayItemGroupBean dbItemGroup = dbGroups.get(i);
                if (formItemGroup.getOrdinal() == i) {
                    // display, so need to insert this row, not update
                    if ("initial".equalsIgnoreCase(dbItemGroup.getEditFlag())) {
                        formItemGroup.setEditFlag("add");
                    } else {
                        dbItemGroup.setEditFlag("edit");
                        // need to set up item data id in order to update
                        for (DisplayItemBean dib : dbItemGroup.getItems()) {
                            ItemDataBean data = dib.getData();
                            for (DisplayItemBean formDib : formItemGroup.getItems()) {
                                if (formDib.getItem().getId() == dib.getItem().getId()) {
                                    formDib.getData().setId(data.getId());
                                    // this will save the data from IDE
                                    // complete, used only for DDE
                                    formDib.setDbData(dib.getData());
                                    // tbh removed below line so as not to
                                    // log so much, 112007
                                    LOGGER.debug("+++ +++ form dib get data set id " + data.getId());
                                    break;
                                }
                            }
                        }
                        formItemGroup.setEditFlag("edit");
                    }
                    // else
                    break;
                }
            }
        }
        // else
        previous = formItemGroup.getOrdinal();
    }
    LOGGER.trace("+++ === DB group row:" + dbGroups.size());
    LOGGER.trace("+++ === DB group contents: " + dbGroups.toString());
    // cannot get it.-jxu
    for (int i = 0; i < dbGroups.size(); i++) {
        DisplayItemGroupBean dbItemGroup = dbGroups.get(i);
        LOGGER.trace("+++ found edit flag of " + dbItemGroup.getEditFlag() + " for #" + dbItemGroup.getOrdinal());
        // logger.debug("+++ found edit flag of " + dbItemGroup.getEditFlag() + " for #" + dbItemGroup.getOrdinal() + ": " + i);
        if (!"edit".equalsIgnoreCase(dbItemGroup.getEditFlag()) && !"initial".equalsIgnoreCase(dbItemGroup.getEditFlag())) {
            // >> tbh if the group is not shown, we should not touch it 05/2010
            if (dbItemGroup.getGroupMetaBean().isShowGroup()) {
                LOGGER.trace("+++ one row removed, edit flag was " + dbItemGroup.getEditFlag());
                LOGGER.debug("+++ one row removed, edit flag was " + dbItemGroup.getEditFlag());
                dbItemGroup.setEditFlag("remove");
            }
        // << tbh
        }
    }
    LOGGER.debug("+++ about to return form groups: " + formGroups.toString());
    for (int j = 0; j < formGroups.size(); j++) {
        DisplayItemGroupBean formGroup = formGroups.get(j);
        formGroup.setIndex(j);
    }
    return formGroups;
}
Also used : DisplayItemGroupBean(org.akaza.openclinica.bean.submit.DisplayItemGroupBean) DisplayItemBean(org.akaza.openclinica.bean.submit.DisplayItemBean) ItemBean(org.akaza.openclinica.bean.submit.ItemBean) ItemDAO(org.akaza.openclinica.dao.submit.ItemDAO) FormBeanUtil(org.akaza.openclinica.view.form.FormBeanUtil) FormProcessor(org.akaza.openclinica.control.form.FormProcessor) ArrayList(java.util.ArrayList) ItemDataDAO(org.akaza.openclinica.dao.submit.ItemDataDAO) SectionBean(org.akaza.openclinica.bean.submit.SectionBean) DisplaySectionBean(org.akaza.openclinica.bean.submit.DisplaySectionBean) EventCRFBean(org.akaza.openclinica.bean.submit.EventCRFBean) ItemDataBean(org.akaza.openclinica.bean.submit.ItemDataBean) DisplayItemBean(org.akaza.openclinica.bean.submit.DisplayItemBean) ItemGroupBean(org.akaza.openclinica.bean.submit.ItemGroupBean) DisplayItemGroupBean(org.akaza.openclinica.bean.submit.DisplayItemGroupBean)

Example 9 with DisplayItemGroupBean

use of org.akaza.openclinica.bean.submit.DisplayItemGroupBean in project OpenClinica by OpenClinica.

the class DataEntryServlet method updateDataOrdinals.

protected void updateDataOrdinals(List<DisplayItemWithGroupBean> displayItemWithGroups) {
    for (int i = 0; i < displayItemWithGroups.size(); ++i) {
        DisplayItemWithGroupBean diwb = displayItemWithGroups.get(i);
        HashMap<Integer, String> editFlags = new HashMap<Integer, String>();
        HashMap<Integer, Integer> nextOrdinals = new HashMap<Integer, Integer>();
        if (diwb.isInGroup()) {
            List<DisplayItemGroupBean> dbGroups = diwb.getDbItemGroups();
            for (int j = 0; j < dbGroups.size(); j++) {
                DisplayItemGroupBean displayGroup = dbGroups.get(j);
                List<DisplayItemBean> items = displayGroup.getItems();
                for (DisplayItemBean displayItem : items) {
                    int itemId = displayItem.getItem().getId();
                    int ordinal = displayItem.getData().getOrdinal();
                    if ("initial".equalsIgnoreCase(displayGroup.getEditFlag())) {
                        nextOrdinals.put(itemId, 1);
                    } else {
                        if (nextOrdinals.containsKey(itemId)) {
                            int max = nextOrdinals.get(itemId);
                            nextOrdinals.put(itemId, ordinal > max ? ordinal + 1 : max);
                        } else {
                            nextOrdinals.put(itemId, ordinal + 1);
                        }
                    }
                    editFlags.put(displayItem.getData().getId(), displayGroup.getEditFlag());
                }
            }
            List<DisplayItemGroupBean> dgbs = diwb.getItemGroups();
            int nextOrdinal = 0;
            for (int j = 0; j < dgbs.size(); j++) {
                DisplayItemGroupBean displayGroup = dgbs.get(j);
                List<DisplayItemBean> oItems = displayGroup.getItems();
                String editFlag = displayGroup.getEditFlag();
                for (DisplayItemBean displayItem : oItems) {
                    int itemId = displayItem.getItem().getId();
                    nextOrdinal = nextOrdinals.get(itemId);
                    int ordinal = 0;
                    String editflag = "add".equalsIgnoreCase(editFlag) ? editFlag : editFlags.get(displayItem.getData().getId());
                    if (editflag.length() > 0) {
                        if ("add".equalsIgnoreCase(editflag)) {
                            ordinal = nextOrdinals.get(itemId);
                            displayItem.getData().setOrdinal(ordinal);
                            nextOrdinals.put(itemId, nextOrdinal + 1);
                        } else if ("edit".equalsIgnoreCase(editflag)) {
                            displayItem.getData().setOrdinal(displayItem.getDbData().getOrdinal());
                        }
                    }
                }
            }
        }
    }
}
Also used : DisplayItemGroupBean(org.akaza.openclinica.bean.submit.DisplayItemGroupBean) HashMap(java.util.HashMap) DisplayItemWithGroupBean(org.akaza.openclinica.bean.submit.DisplayItemWithGroupBean) DisplayItemBean(org.akaza.openclinica.bean.submit.DisplayItemBean)

Example 10 with DisplayItemGroupBean

use of org.akaza.openclinica.bean.submit.DisplayItemGroupBean in project OpenClinica by OpenClinica.

the class DataEntryServlet method reshuffleErrorGroupNamesKK.

private HashMap reshuffleErrorGroupNamesKK(HashMap errors, List<DisplayItemWithGroupBean> allItems, HttpServletRequest request) {
    int manualRows = 0;
    if (errors == null || errors.size() < 1) {
        return errors;
    }
    for (int i = 0; i < allItems.size(); i++) {
        DisplayItemWithGroupBean diwb = allItems.get(i);
        if (diwb.isInGroup()) {
            List<DisplayItemGroupBean> dgbs = diwb.getItemGroups();
            for (int j = 0; j < dgbs.size(); j++) {
                DisplayItemGroupBean digb = dgbs.get(j);
                ItemGroupBean igb = digb.getItemGroupBean();
                List<DisplayItemBean> dibs = digb.getItems();
                if (j == 0) {
                    // first repeat
                    for (DisplayItemBean dib : dibs) {
                        String intendedKey = digb.getInputId() + getInputName(dib);
                        String replacementKey = digb.getItemGroupBean().getOid() + "_" + j + getInputName(dib);
                        if (!replacementKey.equals(intendedKey) && errors.containsKey(intendedKey)) {
                            // String errorMessage = (String)errors.get(intendedKey);
                            errors.put(replacementKey, errors.get(intendedKey));
                            errors.remove(intendedKey);
                            LOGGER.debug("removing: " + intendedKey + " and replacing it with " + replacementKey);
                        }
                    }
                } else {
                    // everything in between
                    manualRows++;
                    for (DisplayItemBean dib : dibs) {
                        String intendedKey = digb.getInputId() + getInputName(dib);
                        String replacementKey = digb.getItemGroupBean().getOid() + "_manual" + j + getInputName(dib);
                        if (!replacementKey.equals(intendedKey) && errors.containsKey(intendedKey)) {
                            // String errorMessage = (String)errors.get(intendedKey);
                            errors.put(replacementKey, errors.get(intendedKey));
                            errors.remove(intendedKey);
                            LOGGER.debug("removing: " + intendedKey + " and replacing it with " + replacementKey);
                        }
                    }
                }
            }
        }
    }
    request.setAttribute("manualRows", new Integer(manualRows));
    return errors;
}
Also used : DisplayItemGroupBean(org.akaza.openclinica.bean.submit.DisplayItemGroupBean) DisplayItemWithGroupBean(org.akaza.openclinica.bean.submit.DisplayItemWithGroupBean) DisplayItemBean(org.akaza.openclinica.bean.submit.DisplayItemBean) ItemGroupBean(org.akaza.openclinica.bean.submit.ItemGroupBean) DisplayItemGroupBean(org.akaza.openclinica.bean.submit.DisplayItemGroupBean)

Aggregations

DisplayItemGroupBean (org.akaza.openclinica.bean.submit.DisplayItemGroupBean)43 DisplayItemBean (org.akaza.openclinica.bean.submit.DisplayItemBean)33 ArrayList (java.util.ArrayList)24 EventDefinitionCRFBean (org.akaza.openclinica.bean.managestudy.EventDefinitionCRFBean)13 DisplaySectionBean (org.akaza.openclinica.bean.submit.DisplaySectionBean)13 DisplayItemWithGroupBean (org.akaza.openclinica.bean.submit.DisplayItemWithGroupBean)12 ItemGroupBean (org.akaza.openclinica.bean.submit.ItemGroupBean)11 EventCRFBean (org.akaza.openclinica.bean.submit.EventCRFBean)10 HashMap (java.util.HashMap)9 ItemBean (org.akaza.openclinica.bean.submit.ItemBean)9 ItemFormMetadataBean (org.akaza.openclinica.bean.submit.ItemFormMetadataBean)9 SectionBean (org.akaza.openclinica.bean.submit.SectionBean)9 HttpSession (javax.servlet.http.HttpSession)7 ItemDataBean (org.akaza.openclinica.bean.submit.ItemDataBean)7 ItemDAO (org.akaza.openclinica.dao.submit.ItemDAO)7 StudyBean (org.akaza.openclinica.bean.managestudy.StudyBean)6 FormProcessor (org.akaza.openclinica.control.form.FormProcessor)6 ItemFormMetadataDAO (org.akaza.openclinica.dao.submit.ItemFormMetadataDAO)6 Map (java.util.Map)5 DiscrepancyNoteBean (org.akaza.openclinica.bean.managestudy.DiscrepancyNoteBean)5