package edu.ualberta.med.biobank.treeview.report; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; import org.apache.commons.lang.StringUtils; import edu.ualberta.med.biobank.SessionManager; import edu.ualberta.med.biobank.common.permission.reports.ReportsPermission; import edu.ualberta.med.biobank.common.wrappers.ReportWrapper; import edu.ualberta.med.biobank.model.Report; import edu.ualberta.med.biobank.server.query.BiobankSQLCriteria; import edu.ualberta.med.biobank.treeview.AdapterBase; import gov.nih.nci.system.applicationservice.ApplicationException; import gov.nih.nci.system.query.hibernate.HQLCriteria; public class SharedReportsGroup extends AbstractReportGroup { private static final String NODE_NAME = Messages.SharedReportsGroup_shared_node_label; private static final String USER_ID_TOKEN = "{userId}"; //$NON-NLS-1$ private static final String USER_ID_LIST_TOKEN = "{userIds}"; //$NON-NLS-1$ private static final String HQL_REPORT_OF_USER = "from " //$NON-NLS-1$ + Report.class.getName() + " where isPublic <> 0 and userId in (" //$NON-NLS-1$ + USER_ID_LIST_TOKEN + ")"; //$NON-NLS-1$ private static final String SQL_USERS_IN_SAME_GROUP = "SELECT CONVERT(u2.user_id, CHAR) FROM csm_user u2"; //$NON-NLS-1$ public SharedReportsGroup(AdapterBase parent, int id) { super(parent, id, NODE_NAME); } @Override protected Collection<ReportWrapper> getReports() { List<ReportWrapper> reports = new ArrayList<ReportWrapper>(); if (SessionManager.getInstance().isConnected()) { String userId = SessionManager.getUser().getId().toString(); try { if (!SessionManager.getAppService().isAllowed( new ReportsPermission())) return reports; } catch (ApplicationException e2) { return reports; } String sqlString = SQL_USERS_IN_SAME_GROUP.replace(USER_ID_TOKEN, userId); BiobankSQLCriteria sqlCriteria = new BiobankSQLCriteria(sqlString); List<Object> userIds = Arrays.asList(); try { userIds = SessionManager.getAppService().query(sqlCriteria, Report.class.getName()); } catch (ApplicationException e1) { e1.printStackTrace(); } if (!userIds.isEmpty()) { String userIdList = StringUtils.join(userIds.toArray(), ","); //$NON-NLS-1$ String hqlString = HQL_REPORT_OF_USER.replace( USER_ID_LIST_TOKEN, userIdList); HQLCriteria hqlCriteria = new HQLCriteria(hqlString, Arrays.asList(new Object[] {})); try { List<Report> rawReports = SessionManager.getAppService() .query(hqlCriteria); for (Report rawReport : rawReports) { reports.add(new ReportWrapper(SessionManager .getAppService(), rawReport)); } } catch (ApplicationException e) { e.printStackTrace(); } } } return reports; } }