use of org.akaza.openclinica.bean.submit.DisplayItemBean in project OpenClinica by OpenClinica.
the class ScoreCalculator method doCalculation.
/*
* Perform all calculations in a CRFVersion. The parameter 'itemdata' might
* be overwritten.
*
* @param calcItemGroupSizes @param items @param itemdata @param
* itemGroupSizes @param databaseErrors @return ArrayList<String> which
* records left_item_text of items who failed to be updated into database.
*
*
* //this method has not been fully tested yet
*
*
* public ArrayList<String> doCalculations( HashMap<String,ItemBean>
* items, HashMap<String,String> itemdata, HashMap<Integer,TreeSet<Integer>>
* itemOrdinals) { ArrayList<String> updateFailedItems = new ArrayList<String>();
* if(itemdata==null) { //here, actually only record errors but doesn't
* return errors. logger.error("In scoreCalculator doCalculations(), items
* are empty!"); errors.add("Calculation cannot be started because needed
* items are empty!"); return updateFailedItems; } ItemFormMetadataDAO
* ifmdao = new ItemFormMetadataDAO(sm.getDataSource()); ItemDAO idao = new
* ItemDAO(sm.getDataSource()); ItemDataDAO iddao = new
* ItemDataDAO(sm.getDataSource());
*
* NumberFormat nf = NumberFormat.getInstance(); Parser parser = new
* Parser(items,itemdata); try { //for calculation type List<ItemFormMetadataBean>
* derivedItemList = ifmdao.findAllByCRFVersionIdAndResponseTypeId(
* ecb.getCRFVersionId(), ResponseType.CALCULATION.getId());
* if(derivedItemList.size()>0) { Collections.sort(derivedItemList); for
* (ItemFormMetadataBean ifmb: derivedItemList) { ItemBean ib =
* (ItemBean)idao.findByPK(ifmb.getItemId()); ResponseOptionBean rob =
* (ResponseOptionBean)ifmb.getResponseSet().getOptions().get(0); //YW,
* 1-16-2008, << enable: 1. evaluate combination of expression and
* functions 2. scoring for group items. //int groupsize =
* iddao.getMaxOrdinalForGroup(ecb,
* (SectionBean)sdao.findByPK(ifmb.getSectionId()), //
* (ItemGroupBean)igdao.findByName(ifmb.getGroupLabel())); int groupsize =
* 1; if(itemOrdinals.containsKey(ib.getId())) { groupsize =
* (itemOrdinals.get(ib.getId())).size(); } String value = ""; String
* parsedExp = ""; for(int i=0; i<groupsize; ++i) { ItemDataBean idb =
* (ItemDataBean)iddao.findByItemIdAndEventCRFIdAndOrdinal(ifmb
* .getItemId(), ecb.getId(), i+1); StringBuffer err = new StringBuffer();
* parsedExp = parser.parse(rob.getValue(), i+1);
* if(parser.getErrors().length()>0) { err.append(parser.getErrors());
* parser.setErrors(new StringBuffer()); } else { value =
* ScoreUtil.eval(parsedExp, err); //YW >> String exp = rob.getValue(); exp =
* exp.replace("##", ","); if(writeToDB(ib,idb,exp,value,err)) {
* itemdata.put(ib.getId()+"_"+(i+1), idb.getValue()); }else { String key =
* (i+1)>1 ? ifmb.getLeftItemText()+"_"+(i+1) : ifmb.getLeftItemText();
* updateFailedItems.add(key); } } if(err.length()>0) { String key = (i+1)>1 ?
* ifmb.getLeftItemText()+"_"+(i+1) : ifmb.getLeftItemText();
* errors.add("Item " + key + " contains calculation errors: " +
* err.toString()); } } } }
*
* //YW, 1-16-2008, for group-calculation type. Current restrictions: //1.
* an item with group-calculation type is not repeatable. //2. only
* calculate sum(), avg(), min(), max(), median(), stdev() //3. formula
* arguments only contain item beans //4. only one item bean per argument
* List<ItemFormMetadataBean> itemList =
* ifmdao.findAllByCRFVersionIdAndResponseTypeId( ecb.getCRFVersionId(),
* ResponseType.GROUP_CALCULATION.getId()); if(itemList.size()>0) {
* Collections.sort(itemList); for (ItemFormMetadataBean ifmb: itemList) {
* ItemBean ib = (ItemBean)idao.findByPK(ifmb.getItemId());
* ResponseOptionBean rob =
* (ResponseOptionBean)ifmb.getResponseSet().getOptions().get(0);
* StringBuffer err = new StringBuffer(); parser.setErrors(err); String
* parsedExp = parser.parse(rob.getValue(),itemOrdinals); String value = "";
* if(parser.getErrors().length()>0) { err.append(parser.getErrors()); }else {
* value = ScoreUtil.eval(parsedExp,err);
*
* ItemDataBean idb =
* (ItemDataBean)iddao.findByItemIdAndEventCRFIdAndOrdinal(ifmb
* .getItemId(), ecb.getId(), 1); String exp = rob.getValue(); exp =
* exp.replace("##", ","); if(writeToDB(ib,idb,exp,value,err)) {
* itemdata.put(ib.getId()+"_"+idb.getOrdinal(), idb.getValue()); } else {
* updateFailedItems.add(ifmb.getLeftItemText()); } }
*
* if(err.length()>0) { errors.add("Item " + ifmb.getLeftItemText() + "
* contains calculation errors: " + err.toString()); } } } } catch
* (OpenClinicaException e) { logger.error(e.getMessage()); }
* //ecb.setNeedsRecalc(false); //EventCRFDAO ecdao = new
* EventCRFDAO(sm.getDataSource()); //ecb = ecdao.update(ecb);
*
* return updateFailedItems; }
*/
/**
* Performs calculation. <br>
* Notice: both parameter 'itemdata' and parameter 'errs' might be updated
* in this method.
*
* @param displayItems
* @param items
* @param itemdata
* @param errs
* @return
*
* @author ywang (Jan. 2008)
*/
public String doCalculation(DisplayItemBean displayItem, HashMap<String, ItemBean> items, HashMap<String, String> itemdata, HashMap<Integer, TreeSet<Integer>> itemOrdinals, StringBuffer errs, int ordinal) {
if (itemdata == null) {
logger.error("In DataEntryServlet doCalculation(), itemdata map is empty!");
errs.append("Calculation cannot be started because needed items are empty" + "; ");
return "";
}
String value = "";
NumberFormat nf = NumberFormat.getInstance();
Parser parser = new Parser(items, itemdata);
ItemBean ib = displayItem.getItem();
ItemFormMetadataBean ifm = displayItem.getMetadata();
ResponseOptionBean rob = (ResponseOptionBean) ifm.getResponseSet().getOptions().get(0);
ArrayList<ScoreToken> parsedExp = new ArrayList<ScoreToken>();
int type = ifm.getResponseSet().getResponseTypeId();
if (type == 8) {
parsedExp = parser.assignVariables(parser.parseScoreTokens(rob.getValue()), ordinal);
} else if (type == 9) {
// YW, 1-16-2008, for group-calculation type. Current restrictions:
// 1. only calculate sum(), avg(), min(), max(), median(), stdev()
// 2. formula arguments only contain item beans
// 3. only one item bean per argument
parsedExp = parser.assignVariables(parser.parseScoreTokens(rob.getValue()), itemOrdinals);
}
if (parser.getErrors().length() > 0) {
errs.append(parser.getErrors());
} else {
try {
value = ScoreUtil.eval(parsedExp);
} catch (ScoreException se) {
logger.error(se.getMessage());
}
ItemDataType idt = ib.getDataType();
if (value == null || value.length() == 0) {
value = "";
String exp = rob.getValue();
exp = exp.replace("##", ",");
errs.append("Result is empty in" + " " + exp + "; ");
// errors.append(resexception.getString("result_is_empty_in") +
// " " + exp + "; ");
} else {
value = this.getMathContextValue(value, ifm, idt, errs);
}
// idb.setStatus(Status.UNAVAILABLE);
itemdata.put(ib.getId() + "_" + ordinal, value);
}
return value;
}
use of org.akaza.openclinica.bean.submit.DisplayItemBean in project OpenClinica by OpenClinica.
the class SimpleConditionalDisplayService method initSCDItems.
public ArrayList<DisplayItemBean> initSCDItems(ArrayList<DisplayItemBean> displayItems, ArrayList<SCDItemMetadataBean> cds, Set<Integer> showSCDItemIds) {
ArrayList<DisplayItemBean> dis = displayItems;
HashMap<Integer, SCDItemMetadataBean> scds = (HashMap<Integer, SCDItemMetadataBean>) this.getSCDMetaIdAndSCDSetMap(cds);
for (DisplayItemBean displayItem : dis) {
ItemFormMetadataBean meta = displayItem.getMetadata();
if (scds.containsKey(meta.getId())) {
SCDItemMetadataBean scdItemMetadataBean = scds.get(meta.getId());
scdItemMetadataBean.setScdItemId(meta.getItemId());
displayItem.getScdData().setScdItemMetadataBean(scdItemMetadataBean);
}
if (meta.getParentId() < 1) {
ArrayList<DisplayItemBean> cs = displayItem.getChildren();
for (DisplayItemBean c : cs) {
ItemFormMetadataBean cmeta = c.getMetadata();
if (scds.containsKey(cmeta.getId())) {
SCDItemMetadataBean scdItemMetadataBean = scds.get(cmeta.getId());
scdItemMetadataBean.setScdItemId(cmeta.getItemId());
c.getScdData().setScdItemMetadataBean(scdItemMetadataBean);
}
}
}
}
return dis;
}
use of org.akaza.openclinica.bean.submit.DisplayItemBean in project OpenClinica by OpenClinica.
the class DynamicsMetadataService method updateGroupDynItemsInASection.
private void updateGroupDynItemsInASection(DisplayItemWithGroupBean itemWithGroup, List<Integer> showItemIds, int groupId, int sectionId, int crfVersionId, int eventCrfId) {
List<DisplayItemGroupBean> digbs = itemWithGroup.getItemGroups();
List<Integer> showDataIds = this.dynamicsItemFormMetadataDao.findShowItemDataIdsForAGroupInSection(groupId, sectionId, crfVersionId, eventCrfId);
List<Integer> hideDataIds = this.dynamicsItemFormMetadataDao.findHideItemDataIdsForAGroupInSection(groupId, sectionId, crfVersionId, eventCrfId);
for (int n = 0; n < digbs.size(); ++n) {
DisplayItemGroupBean dg = digbs.get(n);
ArrayList<DisplayItemBean> items = (ArrayList<DisplayItemBean>) dg.getItems();
for (int m = 0; m < items.size(); ++m) {
DisplayItemBean dib = items.get(m);
ItemFormMetadataBean meta = dib.getMetadata();
dib.setBlankDwelt(false);
if (hideDataIds != null && hideDataIds.contains(dib.getData().getId())) {
meta.setShowItem(false);
}
if (showDataIds != null && showDataIds.contains(dib.getData().getId())) {
meta.setShowItem(true);
}
if (!meta.isShowItem() && showItemIds != null && showItemIds.contains(dib.getItem().getId())) {
dib.setBlankDwelt(true);
}
}
}
}
use of org.akaza.openclinica.bean.submit.DisplayItemBean in project OpenClinica by OpenClinica.
the class ViewSectionDataEntryServlet method processRequest.
// BWP 01/08>>
@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", fp.getString("exitTo"));
}
int crfVersionId = fp.getInt("crfVersionId", true);
int sectionId = fp.getInt("sectionId");
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");
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 {
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);
StudySubjectDAO studySubjectDAO = new StudySubjectDAO(getDataSource());
StudyEventDefinitionDAO studyEventDefinitionDAO = new StudyEventDefinitionDAO(getDataSource());
StudyEventDAO studyEventDAO = new StudyEventDAO(getDataSource());
StudyEventDefinitionBean studyEventDefinition = (StudyEventDefinitionBean) studyEventDefinitionDAO.findByPK(edcb.getStudyEventDefinitionId());
StudyEventBean studyEvent = (StudyEventBean) studyEventDAO.findByPK(ecb.getStudyEventId());
VariableSubstitutionHelper.replaceVariables(dsb, currentStudy, (StudySubjectBean) studySubjectDAO.findByPK(studySubjectId), studyEventDefinition, studyEvent, getDataSource());
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);
}
}
}
use of org.akaza.openclinica.bean.submit.DisplayItemBean in project OpenClinica by OpenClinica.
the class ViewSectionDataEntryPreview method processRequest.
@Override
public void processRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
FormProcessor fp = new FormProcessor(request);
EventCRFBean ecb = (EventCRFBean) request.getAttribute(INPUT_EVENT_CRF);
SectionBean sb = (SectionBean) request.getAttribute(SECTION_BEAN);
// These numbers will be zero if the
// params are not present in the URL
int crfid = fp.getInt("crfId");
int tabNum = fp.getInt("tabId");
HttpSession session = request.getSession();
request.setAttribute("crfId", crfid);
String crfName = "";
String verNumber = "";
// All the data on the uploaded Excel file
// see org.akaza.openclinica.control.admin.SpreadsheetPreview
// createCrfMetaObject() method
Map<String, Map> crfMap = (Map) session.getAttribute("preview_crf");
if (crfMap == null) {
// addPageMessage
String msg = respage.getString("preview_data_has_timed_out");
this.addPageMessage(msg, request);
LOGGER.debug("The session attribute \"preview_crf\" has expired or gone out of scope in: " + this.getClass().getName());
this.forwardPage(Page.CRF_LIST_SERVLET, request, response);
}
Map<String, String> crfIdnameInfo = null;
if (crfMap != null) {
crfIdnameInfo = crfMap.get("crf_info");
}
// Get the CRF name and version String
if (crfIdnameInfo != null) {
Map.Entry mapEnt = null;
for (Object element : crfIdnameInfo.entrySet()) {
mapEnt = (Map.Entry) element;
if (((String) mapEnt.getKey()).equalsIgnoreCase("crf_name")) {
crfName = (String) mapEnt.getValue();
}
if (((String) mapEnt.getKey()).equalsIgnoreCase("version")) {
verNumber = (String) mapEnt.getValue();
}
}
}
// Set up the beans that DisplaySectionBean and the preview
// depend on
EventCRFBean ebean = new EventCRFBean();
CRFVersionBean crfverBean = new CRFVersionBean();
crfverBean.setName(verNumber);
CRFBean crfbean = new CRFBean();
crfbean.setId(crfid);
crfbean.setName(crfName);
ebean.setCrf(crfbean);
// This happens in ViewSectionDataEntry
// It's an assumption that it has to happen here as well
ecb = ebean;
// All the groups data, if it's present in the CRF
Map<Integer, Map<String, String>> groupsMap = null;
if (crfMap != null)
groupsMap = crfMap.get("groups");
// Find out whether this CRF involves groups
// At least one group is involved if the groups Map is not null or
// empty, and the first group entry (there may be only one) has a
// valid group label
boolean hasGroups = false;
/*
* if(groupsMap != null && (! groupsMap.isEmpty()) &&
* groupsMap.get(1).get("group_label").length() > 0) hasGroups = true;
*/
// A SortedMap containing the row number as the key, and the
// section headers/values (contained in a Map) as the value
Map<Integer, Map<String, String>> sectionsMap = null;
if (crfMap != null)
sectionsMap = crfMap.get("sections");
// The itemsMap contains the spreadsheet table items row number as a
// key,
// followed by a map of the column names/values; it contains values for
// display
// such as 'left item text'
Map<Integer, Map<String, String>> itemsMap = null;
if (crfMap != null)
itemsMap = crfMap.get("items");
// Create a list of FormGroupBeans from Maps of groups,
// items, and sections
BeanFactory beanFactory = new BeanFactory();
// FormBeanUtil formUtil = new FormBeanUtil();
// Set up sections for the preview
Map.Entry me = null;
SectionBean secbean = null;
ArrayList<SectionBean> allSectionBeans = new ArrayList<SectionBean>();
String name_str = "";
String pageNum = "";
Map secMap = null;
// SpreadsheetPreviewNw returns doubles (via the
// HSSFCell API, which parses Excel files)
// as Strings (such as "1.0") for "1" in a spreadsheet cell,
// so make sure only "1" is displayed using
// this NumberFormat object
NumberFormat numFormatter = NumberFormat.getInstance();
numFormatter.setMaximumFractionDigits(0);
if (sectionsMap != null) {
for (Object element : sectionsMap.entrySet()) {
secbean = new SectionBean();
me = (Map.Entry) element;
secMap = (Map) me.getValue();
name_str = (String) secMap.get("section_label");
secbean.setName(name_str);
secbean.setTitle((String) secMap.get("section_title"));
secbean.setInstructions((String) secMap.get("instructions"));
secbean.setSubtitle((String) secMap.get("subtitle"));
pageNum = (String) secMap.get("page_number");
// type a number in that Spreadsheet cell
try {
pageNum = numFormatter.format(Double.parseDouble(pageNum));
} catch (NumberFormatException nfe) {
pageNum = "";
}
secbean.setPageNumberLabel(pageNum);
// Sift through the items to see if their section label matches
// the section's section_label column
secbean.setNumItems(this.getNumberOfItems(itemsMap, secbean.getName()));
allSectionBeans.add(secbean);
}
}
DisplayTableOfContentsBean dtocBean = new DisplayTableOfContentsBean();
// Methods should just take Lists, the interface, not
// ArrayList only!
dtocBean.setSections(allSectionBeans);
request.setAttribute("toc", dtocBean);
request.setAttribute("sectionNum", allSectionBeans.size() + "");
// Assuming that the super class' SectionBean sb variable must be
// initialized,
// since it happens in ViewSectionDataEntryServlet. TODO: verify this
sb = allSectionBeans.get(0);
// This is the StudySubjectBean
// Not sure if this is needed for a Preview, but leaving
// it in for safety/consisitency reasons
request.setAttribute(INPUT_EVENT_CRF, ecb);
request.setAttribute(SECTION_BEAN, sb);
setupStudyBean(request);
// Create a DisplaySectionBean for the SectionBean specified by the
// tab number.
tabNum = tabNum == 0 ? 1 : tabNum;
String sectionTitle = getSectionColumnBySecNum(sectionsMap, tabNum, SECTION_TITLE);
String secLabel = getSectionColumnBySecNum(sectionsMap, tabNum, SECTION_LABEL);
String secSubtitle = getSectionColumnBySecNum(sectionsMap, tabNum, SECTION_SUBTITLE);
String instructions = getSectionColumnBySecNum(sectionsMap, tabNum, INSTRUCTIONS);
int secBorders = getSectionBordersBySecNum(sectionsMap, tabNum, BORDERS);
DisplaySectionBean displaySection = beanFactory.createDisplaySectionBean(itemsMap, sectionTitle, secLabel, secSubtitle, instructions, crfName, secBorders);
//
// the variable hasGroups should only be true if the group appears in
// this section
List<DisplayItemBean> disBeans = displaySection.getItems();
ItemFormMetadataBean metaBean;
String groupLabel;
hasGroups = false;
for (DisplayItemBean diBean : disBeans) {
metaBean = diBean.getMetadata();
groupLabel = metaBean.getGroupLabel();
if (groupLabel != null && groupLabel.length() > 0) {
hasGroups = true;
break;
}
}
// Create groups associated with this section
List<DisplayItemGroupBean> disFormGroupBeans = null;
if (hasGroups) {
disFormGroupBeans = beanFactory.createGroupBeans(itemsMap, groupsMap, secLabel, crfName);
displaySection.setDisplayFormGroups(disFormGroupBeans);
}
/*
* DisplaySectionBean displaySection =
* beanFactory.createDisplaySectionBean (itemsMap, sectionTitle,
* secLabel, secSubtitle, instructions, crfName);
*/
displaySection.setCrfVersion(crfverBean);
displaySection.setCrf(crfbean);
displaySection.setEventCRF(ebean);
// Not sure if this is needed? The JSPs pull it out
// as a request attribute
SectionBean aSecBean = new SectionBean();
request.setAttribute(BEAN_DISPLAY, displaySection);
// TODO: verify these attributes, from the original servlet, are
// necessary
request.setAttribute("sec", aSecBean);
request.setAttribute("EventCRFBean", ebean);
try {
request.setAttribute("tabId", Integer.toString(tabNum));
} catch (NumberFormatException nfe) {
request.setAttribute("tabId", new Integer("1"));
}
if (hasGroups) {
LOGGER.debug("has group, new_table is true");
request.setAttribute("new_table", true);
}
// YW 07-23-2007 << for issue 0000937
forwardPage(Page.CREATE_CRF_VERSION_CONFIRM, request, response);
// YW >>
}
Aggregations