/* * OpenClinica is distributed under the * GNU Lesser General Public License (GNU LGPL). * For details see: http://www.openclinica.org/license * copyright 2003-2005 Akaza Research */ package org.akaza.openclinica.control.extract; import org.akaza.openclinica.bean.admin.CRFBean; import org.akaza.openclinica.bean.core.Role; import org.akaza.openclinica.bean.extract.DatasetBean; import org.akaza.openclinica.bean.managestudy.StudyBean; import org.akaza.openclinica.bean.managestudy.StudyEventDefinitionBean; import org.akaza.openclinica.bean.managestudy.StudyGroupClassBean; import org.akaza.openclinica.bean.submit.ItemBean; import org.akaza.openclinica.control.core.SecureController; import org.akaza.openclinica.control.form.FormProcessor; import org.akaza.openclinica.dao.admin.CRFDAO; import org.akaza.openclinica.dao.managestudy.StudyDAO; import org.akaza.openclinica.dao.managestudy.StudyGroupClassDAO; import org.akaza.openclinica.dao.submit.ItemDAO; import org.akaza.openclinica.dao.submit.ItemFormMetadataDAO; import org.akaza.openclinica.i18n.core.LocaleResolver; import org.akaza.openclinica.view.Page; import org.akaza.openclinica.web.InsufficientPermissionException; import java.text.MessageFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Locale; /** * @author jxu * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public class EditSelectedServlet extends SecureController { Locale locale; // < ResourceBundlerespage,resexception; @Override public void mayProceed() throws InsufficientPermissionException { locale = LocaleResolver.getLocale(request); // < respage = // ResourceBundle.getBundle("org.akaza.openclinica.i18n.page_messages",locale); // < // resexception=ResourceBundle.getBundle("org.akaza.openclinica.i18n.exceptions",locale); if (ub.isSysAdmin()) { return; } if (currentRole.getRole().equals(Role.STUDYDIRECTOR) || currentRole.getRole().equals(Role.COORDINATOR) || currentRole.getRole().equals(Role.INVESTIGATOR) || currentRole.getRole().equals(Role.MONITOR)) { return; } addPageMessage(respage.getString("no_have_correct_privilege_current_study") + respage.getString("change_study_contact_sysadmin")); throw new InsufficientPermissionException(Page.MENU, resexception.getString("not_allowed_access_extract_data_servlet"), "1"); } /* * TODO this function exists in four different places... needs to be added to an additional superclass for Submit Data Control Servlets, tbh July 2007 */ public void setUpStudyGroups() { ArrayList sgclasses = (ArrayList) session.getAttribute("allSelectedGroups"); if (sgclasses == null || sgclasses.size() == 0) { StudyDAO studydao = new StudyDAO(sm.getDataSource()); StudyGroupClassDAO sgclassdao = new StudyGroupClassDAO(sm.getDataSource()); StudyBean theStudy = (StudyBean) studydao.findByPK(sm.getUserBean().getActiveStudyId()); sgclasses = sgclassdao.findAllActiveByStudy(theStudy); } session.setAttribute("allSelectedGroups", sgclasses); request.setAttribute("allSelectedGroups", sgclasses); } @Override public void processRequest() throws Exception { FormProcessor fp = new FormProcessor(request); boolean selectAll = fp.getBoolean("all"); boolean selectAllItemsGroupsAttrs = fp.getBoolean("allAttrsAndItems"); // BWP 3095: Only show a "select all items" like on a side info panel if // it // is not part of the EditSelected-related JSP>> request.setAttribute("EditSelectedSubmitted", true); // << ItemDAO idao = new ItemDAO(sm.getDataSource()); // CRFDAO crfdao = new CRFDAO(sm.getDataSource()); ItemFormMetadataDAO imfdao = new ItemFormMetadataDAO(sm.getDataSource()); CRFDAO crfdao = new CRFDAO(sm.getDataSource()); DatasetBean db = (DatasetBean) session.getAttribute("newDataset"); if (db == null) { db = new DatasetBean(); session.setAttribute("newDataset", db); } // << tbh // HashMap eventlist = (HashMap) request.getAttribute("eventlist"); // if (eventlist == null) { // System.out.println("TTTTT found the second hashmap!"); HashMap eventlist = (LinkedHashMap) session.getAttribute("eventsForCreateDataset"); // } ArrayList<String> ids = CreateDatasetServlet.allSedItemIdsInStudy(eventlist, crfdao, idao); // >> tbh 11/09, need to fill in a session variable if (selectAll) { logger.info("select all.........."); db = selectAll(db); MessageFormat msg = new MessageFormat(""); msg.setLocale(locale); msg.applyPattern(respage.getString("choose_include_all_items_dataset")); Object[] arguments = { ids.size() }; addPageMessage(msg.format(arguments)); // addPageMessage("You choose to include all items in current study // for the dataset, " +db.getItemIds().size() + " items total."); }// end of if selectAll if (selectAllItemsGroupsAttrs) { logger.info("select everything...."); db = selectAll(db); db.setShowCRFcompletionDate(true); db.setShowCRFinterviewerDate(true); db.setShowCRFinterviewerName(true); db.setShowCRFstatus(true); db.setShowCRFversion(true); db.setShowEventEnd(true); db.setShowEventEndTime(true); db.setShowEventLocation(true); db.setShowEventStart(true); db.setShowEventStartTime(true); db.setShowEventStatus(true); db.setShowSubjectAgeAtEvent(true); db.setShowSubjectDob(true); db.setShowSubjectGender(true); db.setShowSubjectGroupInformation(true); db.setShowSubjectStatus(true); db.setShowSubjectUniqueIdentifier(true); // select all groups ArrayList sgclasses = (ArrayList) session.getAttribute("allSelectedGroups"); // ArrayList newsgclasses = new ArrayList(); StudyDAO studydao = new StudyDAO(sm.getDataSource()); StudyGroupClassDAO sgclassdao = new StudyGroupClassDAO(sm.getDataSource()); StudyBean theStudy = (StudyBean) studydao.findByPK(sm.getUserBean().getActiveStudyId()); sgclasses = sgclassdao.findAllActiveByStudy(theStudy); for (int i = 0; i < sgclasses.size(); i++) { StudyGroupClassBean sgclass = (StudyGroupClassBean) sgclasses.get(i); sgclass.setSelected(true); newsgclasses.add(sgclass); } session.setAttribute("allSelectedGroups", newsgclasses); request.setAttribute("allSelectedGroups", newsgclasses); } session.setAttribute("newDataset", db); HashMap events = (HashMap) session.getAttribute(CreateDatasetServlet.EVENTS_FOR_CREATE_DATASET); if (events == null) { events = new HashMap(); } ArrayList allSelectItems = selectAll ? selectAll(events, crfdao, idao) : ViewSelectedServlet.getAllSelected(db, idao, imfdao); // >> tbh session.setAttribute("numberOfStudyItems", new Integer(ids.size()).toString()); // << tbh 11/2009 session.setAttribute("allSelectedItems", allSelectItems); setUpStudyGroups(); forwardPage(Page.CREATE_DATASET_VIEW_SELECTED); } public DatasetBean selectAll(DatasetBean db) { HashMap events = (HashMap) session.getAttribute(CreateDatasetServlet.EVENTS_FOR_CREATE_DATASET); if (events == null) { events = new HashMap(); } request.setAttribute("eventlist", events); ItemDAO idao = new ItemDAO(sm.getDataSource()); CRFDAO crfdao = new CRFDAO(sm.getDataSource()); ArrayList allItems = selectAll(events, crfdao, idao); Iterator it = events.keySet().iterator(); while (it.hasNext()) { StudyEventDefinitionBean sed = (StudyEventDefinitionBean) it.next(); if (!db.getEventIds().contains(new Integer(sed.getId()))) { db.getEventIds().add(new Integer(sed.getId())); } } // for (int j = 0; j < allItems.size(); j++) { // ItemBean item = (ItemBean) allItems.get(j); // ArrayList ids = db.getItemIds(); // ArrayList itemDefCrfs = db.getItemDefCrf(); // Integer itemId = new Integer(item.getId()); // if (!ids.contains(itemId)) { // ids.add(itemId); // itemDefCrfs.add(item); // } // } db.getItemDefCrf().clear(); db.setItemDefCrf(allItems); return db; } /** * Finds all the items in a study giving all events in the study * * @param events * @return */ public static ArrayList selectAll(HashMap events, CRFDAO crfdao, ItemDAO idao) { ArrayList allItems = new ArrayList(); Iterator it = events.keySet().iterator(); while (it.hasNext()) { StudyEventDefinitionBean sed = (StudyEventDefinitionBean) it.next(); ArrayList crfs = (ArrayList) crfdao.findAllActiveByDefinition(sed); for (int i = 0; i < crfs.size(); i++) { CRFBean crf = (CRFBean) crfs.get(i); ArrayList items = idao.findAllActiveByCRF(crf); for (int j = 0; j < items.size(); j++) { ItemBean item = (ItemBean) items.get(j); item.setCrfName(crf.getName()); item.setDefName(sed.getName()); item.setDefId(sed.getId()); item.setSelected(true); } allItems.addAll(items); } } return allItems; } }