// $HeadURL$ // $Id$ // Copyright © 2006, 2010, 2011, 2012 by the President and Fellows of Harvard College. // Screensaver is an open-source project developed by the ICCB-L and NSRB labs // at Harvard Medical School. This software is distributed under the terms of // the GNU General Public License. package edu.harvard.med.screensaver.ui.screens; import java.util.List; import com.google.common.collect.Lists; import org.joda.time.LocalDate; import edu.harvard.med.lincs.screensaver.LincsScreensaverConstants; import edu.harvard.med.screensaver.db.GenericEntityDAO; import edu.harvard.med.screensaver.db.Criterion.Operator; import edu.harvard.med.screensaver.db.datafetcher.EntityDataFetcher; import edu.harvard.med.screensaver.db.hqlbuilder.HqlBuilder; import edu.harvard.med.screensaver.model.screens.ProjectPhase; import edu.harvard.med.screensaver.model.screens.Screen; import edu.harvard.med.screensaver.model.screens.ScreenType; import edu.harvard.med.screensaver.model.screens.Study; import edu.harvard.med.screensaver.model.screens.StudyType; import edu.harvard.med.screensaver.model.users.ScreeningRoomUser; import edu.harvard.med.screensaver.model.users.ScreensaverUserRole; import edu.harvard.med.screensaver.ui.arch.datatable.column.TableColumn; import edu.harvard.med.screensaver.ui.arch.datatable.column.entity.DateEntityColumn; import edu.harvard.med.screensaver.ui.arch.datatable.column.entity.EnumEntityColumn; import edu.harvard.med.screensaver.ui.arch.datatable.column.entity.TextEntityColumn; import edu.harvard.med.screensaver.ui.arch.datatable.column.entity.UserNameColumn; import edu.harvard.med.screensaver.ui.arch.datatable.model.InMemoryEntityDataModel; import edu.harvard.med.screensaver.ui.arch.searchresults.EntityBasedEntitySearchResults; import edu.harvard.med.screensaver.ui.arch.searchresults.SearchResults; import edu.harvard.med.screensaver.ui.users.UserViewer; /** * A {@link SearchResults} for {@link Study Studies}. * * @author <a mailto="andrew_tolopko@hms.harvard.edu">Andrew Tolopko</a> * @author <a mailto="john_sullivan@hms.harvard.edu">John Sullivan</a> */ public class StudySearchResults extends EntityBasedEntitySearchResults<Screen,Integer> { // private static final fields // instance fields private UserViewer _userViewer; private GenericEntityDAO _dao; // public constructor /** * @motivation for CGLIB2 */ protected StudySearchResults() { } public StudySearchResults(StudyViewer studyViewer, UserViewer userViewer, GenericEntityDAO dao) { super(studyViewer); _userViewer = userViewer; _dao = dao; } @Override public void searchAll() { setTitle("Studies"); initialize(new InMemoryEntityDataModel<Screen,Integer,Screen>(new EntityDataFetcher<Screen,Integer>(Screen.class, _dao) { @Override public void addDomainRestrictions(HqlBuilder hql) { super.addDomainRestrictions(hql); hql.where(getRootAlias(), "projectPhase", Operator.EQUAL, ProjectPhase.ANNOTATION); } })); } // implementations of the SearchResults abstract methods @Override protected List<? extends TableColumn<Screen,?>> buildColumns() { List<TableColumn<Screen,?>> columns = Lists.newArrayList(); columns.add(new TextEntityColumn<Screen>(Screen.facilityId, "Study ID", "The facility-assigned study identifier", TableColumn.UNGROUPED) { @Override public String getCellValue(Screen study) { return study.getFacilityId(); } @Override public Object cellAction(Screen study) { return viewSelectedEntity(); } @Override public boolean isCommandLink() { return true; } }); columns.add(new TextEntityColumn<Screen>(Screen.thisEntity.toProperty("title"), "Title", "The title of the study", TableColumn.UNGROUPED) { @Override public String getCellValue(Screen study) { return study.getTitle(); } }); columns.add(new UserNameColumn<Screen,ScreeningRoomUser>(Screen.labHead, "Lab Head", "The head of the lab performing the study", TableColumn.UNGROUPED, _userViewer) { @Override public ScreeningRoomUser getUser(Screen study) { return study.getLabHead(); } }); columns.add(new UserNameColumn<Screen,ScreeningRoomUser>(Screen.leadScreener, "Study Head", "The scientist primarily responsible for running the study", TableColumn.UNGROUPED, _userViewer) { @Override public ScreeningRoomUser getUser(Screen study) { return study.getLeadScreener(); } }); if (!!!getApplicationProperties().isFacility(LincsScreensaverConstants.FACILITY_KEY)) { columns.add(new EnumEntityColumn<Screen,StudyType>(Screen.thisEntity.toProperty("studyType"), "Study Type", "'" + StudyType.IN_SILICO + "'' or '" + StudyType.IN_VITRO + "'", TableColumn.UNGROUPED, StudyType.values()) { @Override public StudyType getCellValue(Screen study) { return study.getStudyType(); } }); } columns.add(new EnumEntityColumn<Screen,ScreenType>(Screen.thisEntity.toProperty("screenType"), "Library Screen Type", "'RNAi' or 'Small Molecule'", TableColumn.UNGROUPED, ScreenType.values()) { @Override public ScreenType getCellValue(Screen study) { return study.getScreenType(); } }); if (getApplicationProperties().isFacility(LincsScreensaverConstants.FACILITY_KEY)) { columns.add(new DateEntityColumn<Screen>(Screen.thisEntity.toProperty("dateCreated"), "Date Data Received", "The date the data was received", TableColumn.UNGROUPED) { @Override protected LocalDate getDate(Screen screen) { return screen.getDateCreated().toLocalDate(); } }); } if (getApplicationProperties().isFacility(LincsScreensaverConstants.FACILITY_KEY)) { columns.add(new DateEntityColumn<Screen>(Screen.thisEntity.toProperty("dateLoaded"), "Date Loaded", "The date the data was loaded", TableColumn.UNGROUPED) { @Override protected LocalDate getDate(Screen screen) { return screen.getDateLoaded()== null ? null : screen.getDateLoaded().toLocalDate(); } }); } if (getApplicationProperties().isFacility(LincsScreensaverConstants.FACILITY_KEY)) { columns.add(new DateEntityColumn<Screen>(Screen.thisEntity.toProperty("datePubliclyAvailable"), "Date Publicly Available", "The date the data was made publicly available", TableColumn.UNGROUPED) { @Override protected LocalDate getDate(Screen screen) { return screen.getDatePubliclyAvailable() == null ? null : screen.getDatePubliclyAvailable().toLocalDate(); } }); } // TableColumnManager<Screen> columnManager = getColumnManager(); // columnManager.addCompoundSortColumns(columnManager.getColumn("Lab Head"), // columnManager.getColumn("Lead Screener"), // columnManager.getColumn("Screen Number")); // columnManager.addCompoundSortColumns(columnManager.getColumn("Lead Screener"), // columnManager.getColumn("Lab Head"), // columnManager.getColumn("Screen Number")); return columns; } private boolean showStatusFields() { return isUserInRole(ScreensaverUserRole.SCREENS_ADMIN/*TODO: need STUDY_ADMIN, perhaps*/) || isUserInRole(ScreensaverUserRole.READ_EVERYTHING_ADMIN); } }