/*
* 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.core.Role;
import org.akaza.openclinica.bean.extract.DatasetBean;
import org.akaza.openclinica.bean.managestudy.StudyBean;
import org.akaza.openclinica.bean.submit.ItemBean;
import org.akaza.openclinica.bean.submit.ItemFormMetadataBean;
import org.akaza.openclinica.control.core.SecureController;
import org.akaza.openclinica.control.form.FormProcessor;
import org.akaza.openclinica.core.form.StringUtil;
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.util.ArrayList;
import java.util.HashMap;
import java.util.Locale;
/**
* @author jxu
*
* Views selected items for creating dataset, aslo allow user to de-select or
* select all items in a study
*/
public class ViewSelectedServlet extends SecureController {
Locale locale;
// < ResourceBundlerestext,resexception,respage;
@Override
public void mayProceed() throws InsufficientPermissionException {
locale = LocaleResolver.getLocale(request);
// < restext =
// ResourceBundle.getBundle("org.akaza.openclinica.i18n.notes",locale);
// < 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");
}
/*
* setup study groups, tbh, added july 2007 FIXME in general a repeated set
* of code -- need to create a superclass which will contain this class, tbh
*/
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);
session.setAttribute("numberOfStudyGroups", sgclasses.size());
request.setAttribute("allSelectedGroups", sgclasses);
}
@Override
public void processRequest() throws Exception {
DatasetBean db = (DatasetBean) session.getAttribute("newDataset");
HashMap events = (HashMap) session.getAttribute(CreateDatasetServlet.EVENTS_FOR_CREATE_DATASET);
if (events == null) {
events = new HashMap();
}
request.setAttribute("eventlist", events);
CRFDAO crfdao = new CRFDAO(sm.getDataSource());
ItemDAO idao = new ItemDAO(sm.getDataSource());
ItemFormMetadataDAO imfdao = new ItemFormMetadataDAO(sm.getDataSource());
ArrayList ids = CreateDatasetServlet.allSedItemIdsInStudy(events, crfdao, idao);// new
// ArrayList();
// ArrayList allItemsInStudy = EditSelectedServlet.selectAll(events,
// crfdao, idao);
// for (int j = 0; j < allItemsInStudy.size(); j++) {
// ItemBean item = (ItemBean) allItemsInStudy.get(j);
// Integer itemId = new Integer(item.getId());
// if (!ids.contains(itemId)) {
// ids.add(itemId);
// }
// }
session.setAttribute("numberOfStudyItems", new Integer(ids.size()).toString());
ArrayList items = new ArrayList();
if (db == null || db.getItemIds().size() == 0) {
session.setAttribute("allSelectedItems", items);
setUpStudyGroups();// FIXME can it be that we have no selected
// items and
// some selected groups? tbh
forwardPage(Page.CREATE_DATASET_VIEW_SELECTED);
return;
}
items = getAllSelected(db, idao, imfdao);
session.setAttribute("allSelectedItems", items);
FormProcessor fp = new FormProcessor(request);
String status = fp.getString("status");
if (!StringUtil.isBlank(status) && "html".equalsIgnoreCase(status)) {
forwardPage(Page.CREATE_DATASET_VIEW_SELECTED_HTML);
} else {
setUpStudyGroups();
forwardPage(Page.CREATE_DATASET_VIEW_SELECTED);
}
}
public static ArrayList getAllSelected(DatasetBean db, ItemDAO idao, ItemFormMetadataDAO imfdao) throws Exception {
ArrayList items = new ArrayList();
// ArrayList itemIds = db.getItemIds();
ArrayList itemDefCrfs = db.getItemDefCrf();
for (int i = 0; i < itemDefCrfs.size(); i++) {
ItemBean item = (ItemBean) itemDefCrfs.get(i);
item.setSelected(true);
ArrayList metas = imfdao.findAllByItemId(item.getId());
for (int h = 0; h < metas.size(); h++) {
ItemFormMetadataBean ifmb = (ItemFormMetadataBean) metas.get(h);
// logger.info("group name found:
// "+ifmb.getGroupLabel());
}
item.setItemMetas(metas);
items.add(item);
}
return items;
}
}