/*
* 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.managestudy.StudyEventDefinitionBean;
import org.akaza.openclinica.bean.managestudy.StudyGroupClassBean;
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.extract.DatasetDAO;
import org.akaza.openclinica.dao.managestudy.StudyDAO;
import org.akaza.openclinica.dao.managestudy.StudyEventDAO;
import org.akaza.openclinica.dao.managestudy.StudyEventDefinitionDAO;
import org.akaza.openclinica.dao.managestudy.StudyGroupClassDAO;
import org.akaza.openclinica.dao.submit.EventCRFDAO;
import org.akaza.openclinica.i18n.core.LocaleResolver;
import org.akaza.openclinica.view.Page;
import org.akaza.openclinica.web.InsufficientPermissionException;
import org.akaza.openclinica.web.bean.DatasetRow;
import org.akaza.openclinica.web.bean.EntityBeanTable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Locale;
/**
* ViewDatasetsServlet.java, the view datasets function accessed from the
* extract datasets main page.
*
* @author thickerson
*
*
*
*/
public class ViewDatasetsServlet extends SecureController {
Locale locale;
// < ResourceBundleresword,restext,respage,resexception;
public static String getLink(int dsId) {
return "ViewDatasets?action=details&datasetId=" + dsId;
}
@Override
public void processRequest() throws Exception {
DatasetDAO dsdao = new DatasetDAO(sm.getDataSource());
String action = request.getParameter("action");
resetPanel();
request.setAttribute(STUDY_INFO_PANEL, panel);
// YW, 2-15-2008 <<
session.removeAttribute("allSelectedItems");
session.removeAttribute("allSelectedGroups");
session.removeAttribute("allItems");
session.removeAttribute("newDataset");
// YW >>
if (StringUtil.isBlank(action)) {
// YW 08-2008 << 2529 fix
StudyEventDAO sedao = new StudyEventDAO(sm.getDataSource());
StudyEventDefinitionDAO seddao = new StudyEventDefinitionDAO(sm.getDataSource());
EventCRFDAO ecdao = new EventCRFDAO(sm.getDataSource());
StudyBean studyWithEventDefinitions = currentStudy;
if (currentStudy.getParentStudyId() > 0) {
studyWithEventDefinitions = new StudyBean();
studyWithEventDefinitions.setId(currentStudy.getParentStudyId());
}
ArrayList seds = seddao.findAllActiveByStudy(studyWithEventDefinitions);
CRFDAO crfdao = new CRFDAO(sm.getDataSource());
HashMap events = new LinkedHashMap();
for (int i = 0; i < seds.size(); i++) {
StudyEventDefinitionBean sed = (StudyEventDefinitionBean) seds.get(i);
ArrayList crfs = (ArrayList) crfdao.findAllActiveByDefinition(sed);
if (!crfs.isEmpty()) {
events.put(sed, crfs);
}
}
session.setAttribute("eventsForCreateDataset", events);
// YW >>
FormProcessor fp = new FormProcessor(request);
EntityBeanTable table = fp.getEntityBeanTable();
ArrayList datasets = new ArrayList();
// if (ub.isSysAdmin()) {
// datasets = dsdao.findAllByStudyIdAdmin(currentStudy.getId());
// } else {
datasets = dsdao.findAllByStudyId(currentStudy.getId());
// }
ArrayList datasetRows = DatasetRow.generateRowsFromBeans(datasets);
String[] columns =
{ resword.getString("dataset_name"), resword.getString("description"), resword.getString("created_by"), resword.getString("created_date"),
resword.getString("status"), resword.getString("actions") };
table.setColumns(new ArrayList(Arrays.asList(columns)));
table.hideColumnLink(5);
table.addLink(resword.getString("show_only_my_datasets"), "ViewDatasets?action=owner&ownerId=" + ub.getId());
table.addLink(resword.getString("create_dataset"), "CreateDataset");
table.setQuery("ViewDatasets", new HashMap());
table.setRows(datasetRows);
table.computeDisplay();
request.setAttribute("table", table);
// this is the old code that the tabling code replaced:
// ArrayList datasets = (ArrayList)dsdao.findAll();
// request.setAttribute("datasets", datasets);
forwardPage(Page.VIEW_DATASETS);
} else {
if ("owner".equalsIgnoreCase(action)) {
FormProcessor fp = new FormProcessor(request);
int ownerId = fp.getInt("ownerId");
EntityBeanTable table = fp.getEntityBeanTable();
ArrayList datasets = (ArrayList) dsdao.findByOwnerId(ownerId, currentStudy.getId());
/*
* if (datasets.isEmpty()) {
* forwardPage(Page.VIEW_EMPTY_DATASETS); } else {
*/
ArrayList datasetRows = DatasetRow.generateRowsFromBeans(datasets);
String[] columns =
{ resword.getString("dataset_name"), resword.getString("description"), resword.getString("created_by"), resword.getString("created_date"),
resword.getString("status"), resword.getString("actions") };
table.setColumns(new ArrayList(Arrays.asList(columns)));
table.hideColumnLink(5);
table.addLink(resword.getString("show_all_datasets"), "ViewDatasets");
table.addLink(resword.getString("create_dataset"), "CreateDataset");
table.setQuery("ViewDatasets?action=owner&ownerId=" + ub.getId(), new HashMap());
table.setRows(datasetRows);
table.computeDisplay();
request.setAttribute("table", table);
// this is the old code:
// ArrayList datasets = (ArrayList)dsdao.findByOwnerId(ownerId);
// request.setAttribute("datasets", datasets);
forwardPage(Page.VIEW_DATASETS);
// }
} else if ("details".equalsIgnoreCase(action)) {
FormProcessor fp = new FormProcessor(request);
int datasetId = fp.getInt("datasetId");
DatasetBean db = initializeAttributes(datasetId);
StudyDAO sdao = new StudyDAO(sm.getDataSource());
StudyBean study = (StudyBean)sdao.findByPK(db.getStudyId());
if (study.getId() != currentStudy.getId() && study.getParentStudyId() != currentStudy.getId()) {
addPageMessage(respage.getString("no_have_correct_privilege_current_study")
+ " " + respage.getString("change_active_study_or_contact"));
forwardPage(Page.MENU_SERVLET);
return;
}
/*
* EntityBeanTable table = fp.getEntityBeanTable(); ArrayList
* datasetRows = DatasetRow.generateRowFromBean(db); String[]
* columns = { "Dataset Name", "Description", "Created By",
* "Created Date", "Status", "Actions" }; table.setColumns(new
* ArrayList(Arrays.asList(columns))); table.hideColumnLink(5);
* table.setQuery("ViewDatasets", new HashMap());
* table.setRows(datasetRows); table.computeDisplay();
* request.setAttribute("table", table);
*/
request.setAttribute("dataset", db);
forwardPage(Page.VIEW_DATASET_DETAILS);
}
}
}
@Override
public void mayProceed() throws InsufficientPermissionException {
locale = LocaleResolver.getLocale(request);
if (ub.isSysAdmin()) {
return;
}
if (!( currentRole.getRole().equals(Role.RESEARCHASSISTANT) || currentRole.getRole().equals(Role.RESEARCHASSISTANT2) ) ) {
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");
}
/**
* Initialize data of a DatasetBean and set session attributes for
* displaying selected data of this DatasetBean
*
* @param db
* @return
*
*/
// @author ywang (Feb, 2008)
public DatasetBean initializeAttributes(int datasetId) {
DatasetDAO dsdao = new DatasetDAO(sm.getDataSource());
DatasetBean db = dsdao.initialDatasetData(datasetId);
session.setAttribute("newDataset", db);
session.setAttribute("allItems", db.getItemDefCrf().clone());
session.setAttribute("allSelectedItems", db.getItemDefCrf().clone());
StudyGroupClassDAO sgcdao = new StudyGroupClassDAO(sm.getDataSource());
StudyDAO studydao = new StudyDAO(sm.getDataSource());
StudyBean theStudy = (StudyBean) studydao.findByPK(sm.getUserBean().getActiveStudyId());
ArrayList<StudyGroupClassBean> allSelectedGroups = sgcdao.findAllActiveByStudy(theStudy);
ArrayList<Integer> selectedSubjectGroupIds = db.getSubjectGroupIds();
if (selectedSubjectGroupIds != null && allSelectedGroups != null) {
for (Integer id : selectedSubjectGroupIds) {
for (int i = 0; i < allSelectedGroups.size(); ++i) {
if (allSelectedGroups.get(i).getId() == id) {
allSelectedGroups.get(i).setSelected(true);
break;
}
}
}
}
session.setAttribute("allSelectedGroups", allSelectedGroups);
return db;
}
}