package org.akaza.openclinica.service.crfdata; import org.akaza.openclinica.bean.admin.CRFBean; import org.akaza.openclinica.bean.managestudy.DisplayEventDefinitionCRFBean; import org.akaza.openclinica.bean.managestudy.DisplayStudyEventBean; import org.akaza.openclinica.bean.managestudy.EventDefinitionCRFBean; import org.akaza.openclinica.bean.managestudy.StudyBean; import org.akaza.openclinica.bean.managestudy.StudyEventDefinitionBean; import org.akaza.openclinica.bean.submit.DisplayEventCRFBean; import org.akaza.openclinica.dao.managestudy.EventDefinitionCRFDAO; import java.util.ArrayList; import java.util.List; import javax.sql.DataSource; /** * This is a convenience service class to help implement the requirement that a * user logged in at the site level cannot view/use CRFs that are marked as * "hidden." User: bruceperry Date: Feb 9, 2009 */ public class HideCRFManager { public static org.akaza.openclinica.service.crfdata.HideCRFManager createHideCRFManager() { return new org.akaza.openclinica.service.crfdata.HideCRFManager(); } private HideCRFManager() { } public void removeHiddenEventCRF(DisplayStudyEventBean displayStudyEventBean) { List<DisplayEventCRFBean> eventCRFBeans = displayStudyEventBean.getAllEventCRFs(); displayStudyEventBean.setAllEventCRFs(suppressHiddenEventCRFBeans(eventCRFBeans)); eventCRFBeans = displayStudyEventBean.getDisplayEventCRFs(); displayStudyEventBean.setDisplayEventCRFs(suppressHiddenEventCRFBeans(eventCRFBeans)); List<DisplayEventDefinitionCRFBean> displayEventDefinitionCRFBeans = displayStudyEventBean.getUncompletedCRFs(); ArrayList<DisplayEventDefinitionCRFBean> newDisplayEventDefinitionCRFBeans = new ArrayList<DisplayEventDefinitionCRFBean>(); for (DisplayEventDefinitionCRFBean displayEventDefinitionCRFBean : displayEventDefinitionCRFBeans) { if (!displayEventDefinitionCRFBean.getEdc().isHideCrf()) { newDisplayEventDefinitionCRFBeans.add(displayEventDefinitionCRFBean); } } displayStudyEventBean.setUncompletedCRFs(newDisplayEventDefinitionCRFBeans); } private ArrayList<DisplayEventCRFBean> suppressHiddenEventCRFBeans(List<DisplayEventCRFBean> eventCRFBeans) { // Must make this an ArrayList because of the // displayStudyEventBean.setAllEventCRFs() // method definition ArrayList<DisplayEventCRFBean> newEventCRFBeans = new ArrayList<DisplayEventCRFBean>(); EventDefinitionCRFBean definitionCRFBean = new EventDefinitionCRFBean(); for (DisplayEventCRFBean deCRFBean : eventCRFBeans) { definitionCRFBean = deCRFBean.getEventDefinitionCRF(); if (!definitionCRFBean.isHideCrf()) { newEventCRFBeans.add(deCRFBean); } } return newEventCRFBeans; } public ArrayList<DisplayEventCRFBean> removeHiddenEventCRFBeans(List<DisplayEventCRFBean> displayEventCRFBeans) { ArrayList<DisplayEventCRFBean> newDisplayEventCRFBeans = new ArrayList<DisplayEventCRFBean>(); for (DisplayEventCRFBean displayEventCRFBean : displayEventCRFBeans) { if (!displayEventCRFBean.getEventDefinitionCRF().isHideCrf()) { newDisplayEventCRFBeans.add(displayEventCRFBean); } } return newDisplayEventCRFBeans; } public ArrayList<DisplayEventDefinitionCRFBean> removeHiddenEventDefinitionCRFBeans(List<DisplayEventDefinitionCRFBean> displayEventDefinitionCRFBeans) { ArrayList<DisplayEventDefinitionCRFBean> newDisplayEventDefinitionCRFBeans = new ArrayList<DisplayEventDefinitionCRFBean>(); EventDefinitionCRFBean eventDefinitionCRFBean = new EventDefinitionCRFBean(); for (DisplayEventDefinitionCRFBean displayEventDefinitionCRFBean : displayEventDefinitionCRFBeans) { eventDefinitionCRFBean = displayEventDefinitionCRFBean.getEdc(); if (!eventDefinitionCRFBean.isHideCrf()) { newDisplayEventDefinitionCRFBeans.add(displayEventDefinitionCRFBean); } } return newDisplayEventDefinitionCRFBeans; } public void optionallyCheckHideCRFProperty(DisplayStudyEventBean displayStudyEventBean) { EventDefinitionCRFBean tempEventCRFBean = new EventDefinitionCRFBean(); for (DisplayEventCRFBean deCRFBean : displayStudyEventBean.getAllEventCRFs()) { tempEventCRFBean = deCRFBean.getEventDefinitionCRF(); if (tempEventCRFBean.isHideCrf()) { tempEventCRFBean.setHidden(true); } } for (DisplayEventCRFBean deCRFBean : displayStudyEventBean.getDisplayEventCRFs()) { tempEventCRFBean = deCRFBean.getEventDefinitionCRF(); if (tempEventCRFBean.isHideCrf()) { tempEventCRFBean.setHidden(true); } } } public boolean studyEventHasAHideCRFProperty(DisplayStudyEventBean displayStudyEventBean) { EventDefinitionCRFBean tempEventCRFBean = new EventDefinitionCRFBean(); boolean hasAHideCRFProperty = false; for (DisplayEventCRFBean deCRFBean : displayStudyEventBean.getAllEventCRFs()) { tempEventCRFBean = deCRFBean.getEventDefinitionCRF(); if (tempEventCRFBean.isHideCrf()) { hasAHideCRFProperty = true; } } for (DisplayEventCRFBean deCRFBean : displayStudyEventBean.getDisplayEventCRFs()) { tempEventCRFBean = deCRFBean.getEventDefinitionCRF(); if (tempEventCRFBean.isHideCrf()) { hasAHideCRFProperty = true; } } return hasAHideCRFProperty; } public void hideSpecifiedEventCRFDefBeans(List<EventDefinitionCRFBean> eventDefinitionCRFBeans) { for (EventDefinitionCRFBean eventDefinitionCRFBean : eventDefinitionCRFBeans) { eventDefinitionCRFBean.setHidden(true); } } /** * Given a StudyEventDefinitionBean and a list of CRFBeans as parameters, * this method returns of new list of CRFBeans containing only unhidden CRFs * (their isHideCRF property is false). * * @param studyEventBean * The StudyEventDefinitionBean * @param crfBeans * An ArrayList of CRFBeans * @param dataSource * A javax.sql.DataSource for the use of the * EventDefinitionCRFDAO. * @return An ArrayList of CRFBeans containing only "unhidden" CRFs. */ public ArrayList<CRFBean> removeHiddenCRFBeans(StudyBean study, StudyEventDefinitionBean studyEventBean, ArrayList<CRFBean> crfBeans, DataSource dataSource) { ArrayList<CRFBean> newBeans = new ArrayList<CRFBean>(); if (crfBeans == null || crfBeans.isEmpty()) { return newBeans; } EventDefinitionCRFDAO eventDefinitionCRFDAO = new EventDefinitionCRFDAO(dataSource); EventDefinitionCRFBean tempBean = new EventDefinitionCRFBean(); for (CRFBean crfBean : crfBeans) { tempBean = eventDefinitionCRFDAO.findByStudyEventDefinitionIdAndCRFId(study, studyEventBean.getId(), crfBean.getId()); if (tempBean != null && !tempBean.isHideCrf()) { newBeans.add(crfBean); } } return newBeans; } }