// $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; import java.util.Date; import org.apache.log4j.Logger; import org.joda.time.format.DateTimeFormat; import org.springframework.transaction.annotation.Transactional; import edu.harvard.med.screensaver.db.Criterion; import edu.harvard.med.screensaver.db.Criterion.Operator; import edu.harvard.med.screensaver.db.GenericEntityDAO; import edu.harvard.med.screensaver.db.LibrariesDAO; import edu.harvard.med.screensaver.model.libraries.Library; import edu.harvard.med.screensaver.model.screens.Screen; import edu.harvard.med.screensaver.model.screens.ScreenType; import edu.harvard.med.screensaver.model.users.AdministratorUser; import edu.harvard.med.screensaver.model.users.LabHead; import edu.harvard.med.screensaver.model.users.ScreeningRoomUser; import edu.harvard.med.screensaver.model.users.ScreensaverUser; import edu.harvard.med.screensaver.model.users.ScreensaverUserRole; import edu.harvard.med.screensaver.service.OperationRestrictedException; import edu.harvard.med.screensaver.service.screens.ScreenGenerator; import edu.harvard.med.screensaver.ui.activities.ActivitySearchResults; import edu.harvard.med.screensaver.ui.arch.datatable.column.TableColumn; import edu.harvard.med.screensaver.ui.arch.view.AbstractBackingBean; import edu.harvard.med.screensaver.ui.arch.view.aspects.UICommand; import edu.harvard.med.screensaver.ui.attachedFiles.AttachedFileSearchResults; import edu.harvard.med.screensaver.ui.cells.CellSearchResults; import edu.harvard.med.screensaver.ui.cherrypickrequests.CherryPickRequestSearchResults; import edu.harvard.med.screensaver.ui.libraries.LibraryCopyPlateSearchResults; import edu.harvard.med.screensaver.ui.libraries.LibraryCopySearchResults; import edu.harvard.med.screensaver.ui.libraries.LibraryDetailViewer; import edu.harvard.med.screensaver.ui.libraries.LibrarySearchResults; import edu.harvard.med.screensaver.ui.libraries.WellSearchResults; import edu.harvard.med.screensaver.ui.screens.ScreenDetailViewer; import edu.harvard.med.screensaver.ui.screens.ScreenSearchResults; import edu.harvard.med.screensaver.ui.screens.StudySearchResults; import edu.harvard.med.screensaver.ui.users.ScreenerSearchResults; import edu.harvard.med.screensaver.ui.users.StaffSearchResults; import edu.harvard.med.screensaver.ui.users.UserViewer; public class Menu extends AbstractBackingBean { private static Logger log = Logger.getLogger(Menu.class); private GenericEntityDAO _dao; private LibrariesDAO _librariesDao; private ScreenGenerator _screenGenerator; private ScreenSearchResults _screensBrowser; private StudySearchResults _studiesBrowser; private CherryPickRequestSearchResults _cherryPickRequestsBrowser; private CellSearchResults _cellsBrowser; private LibrarySearchResults _librariesBrowser; private LibraryCopySearchResults _copiesBrowser; private LibraryCopyPlateSearchResults _libraryCopyPlatesBrowser; private StaffSearchResults _staffBrowser; private ScreenerSearchResults _screenersBrowser; private ActivitySearchResults _activitiesBrowser; private ScreenDetailViewer _screenDetailViewer; private UserViewer _userViewer; private WellSearchResults _wellsBrowser; private LibraryDetailViewer _libraryDetailViewer; private AttachedFileSearchResults _attachedFilesBrowser; /** * @motivation for CGLIB2 */ protected Menu() { } public Menu(GenericEntityDAO dao, LibrariesDAO librariesDao, ScreenGenerator screenGenerator, ScreenSearchResults screensBrowser, StudySearchResults studiesBrowser, CherryPickRequestSearchResults cherryPickRequestsBrowser, CellSearchResults cellsBrowser, LibrarySearchResults librariesBrowser, LibraryCopySearchResults copiesBrowser, LibraryCopyPlateSearchResults libraryCopyPlatesBrowser, ScreenerSearchResults screenersBrowser, StaffSearchResults staffBrowser, ActivitySearchResults activitiesBrowser, ScreenDetailViewer screenDetailViewer, UserViewer userViewer, LibraryDetailViewer libraryDetailViewer, WellSearchResults wellsBrowser, AttachedFileSearchResults attachedFilesBrowser) { _dao = dao; _librariesDao = librariesDao; _screenGenerator = screenGenerator; _screensBrowser = screensBrowser; _studiesBrowser = studiesBrowser; _cherryPickRequestsBrowser = cherryPickRequestsBrowser; _cellsBrowser = cellsBrowser; _librariesBrowser = librariesBrowser; _copiesBrowser = copiesBrowser; _libraryCopyPlatesBrowser = libraryCopyPlatesBrowser; _staffBrowser = staffBrowser; _screenersBrowser = screenersBrowser; _activitiesBrowser = activitiesBrowser; _screenDetailViewer = screenDetailViewer; _userViewer = userViewer; _libraryDetailViewer = libraryDetailViewer; _wellsBrowser = wellsBrowser; _attachedFilesBrowser = attachedFilesBrowser; } @UICommand public String viewMain() { return VIEW_MAIN; } @UICommand public String viewNews() { return VIEW_NEWS; } @UICommand public String viewDownloads() { return VIEW_DOWNLOADS; } @UICommand public String viewHelp() { return VIEW_HELP; } @UICommand public String logout() { log.info("logout for session " + getHttpSession().getId()); closeHttpSession(); if(getApplicationProperties().isAllowGuestLogin()) // for [#3107] Non-authenticated access for LINCS guest users return VIEW_MAIN; // only show the "logout" option if not guest user else; return VIEW_GOODBYE; } @UICommand @Transactional public String login() { getHttpSession().invalidate(); return VIEW_LOGIN; } @UICommand public String cancelLogin() { return VIEW_MAIN; } @UICommand public String findReagents() { return FIND_REAGENTS; } @UICommand public String findWells() { return FIND_WELLS; } @UICommand public String browseWells() { _wellsBrowser.searchAll(); return BROWSE_WELLS; } @UICommand public String browseLibraries() { _librariesBrowser.searchAll(); return BROWSE_LIBRARIES; } @UICommand public String browseRnaiLibraries() { _librariesBrowser.searchLibraryScreenType(ScreenType.RNAI); return BROWSE_LIBRARIES; } @UICommand public String browseSmallMoleculeLibraries() { _librariesBrowser.searchLibraryScreenType(ScreenType.SMALL_MOLECULE); return BROWSE_LIBRARIES; } @UICommand public String browseLibraryCopies() { _copiesBrowser.searchAll(); return BROWSE_LIBRARY_COPIES; } @UICommand public String browseLibraryCopyPlates() { _libraryCopyPlatesBrowser.searchAll(); return BROWSE_LIBRARY_COPY_PLATES; } @UICommand public String browseScreeners() { if (!(getScreensaverUser() instanceof AdministratorUser)) { throw new OperationRestrictedException("only administrators can browse screeners"); } _screenersBrowser.searchAll("Screeners"); return BROWSE_SCREENERS; } @UICommand public String browseAssociates() { if (!(getScreensaverUser() instanceof ScreeningRoomUser)) { throw new OperationRestrictedException("only screening room users can browser associates"); } _screenersBrowser.searchAssociatedUsers((ScreeningRoomUser) getScreensaverUser()); return BROWSE_SCREENERS; } @UICommand public String browseStaff() { _staffBrowser.searchAll("Staff"); return BROWSE_STAFF; } @UICommand public String browseStudies() { _studiesBrowser.searchAll(); return BROWSE_STUDIES; } @UICommand public String browseScreens() { _screensBrowser.searchAll(); return BROWSE_SCREENS; } @UICommand public String browseRnaiScreens() { return browseScreensOfScreenType(ScreenType.RNAI); } @UICommand public String browseSmallMoleculeScreens() { return browseScreensOfScreenType(ScreenType.SMALL_MOLECULE); } private String browseScreensOfScreenType(ScreenType screenType) { _screensBrowser.searchAll(); TableColumn<Screen,ScreenType> column = (TableColumn<Screen,ScreenType>) _screensBrowser.getColumnManager().getColumn("Screen Type"); column.clearCriteria(); column.addCriterion(new Criterion<ScreenType>(Operator.EQUAL, screenType)); return BROWSE_SCREENS; } @UICommand public String browseMyScreens() { if (!(getScreensaverUser() instanceof ScreeningRoomUser)) { throw new OperationRestrictedException("only screening room users can their own screens"); } _screensBrowser.searchScreensForUser((ScreeningRoomUser) getScreensaverUser()); return BROWSE_MY_SCREENS; } @UICommand public String browseCherryPickRequests() { _cherryPickRequestsBrowser.searchAll(); return BROWSE_CHERRY_PICK_REQUESTS; } @UICommand public String browseCells() { _cellsBrowser.searchAll(); return BROWSE_CELLS; } @UICommand public String browseRnaiCherryPickRequests() { _cherryPickRequestsBrowser.searchScreenType(ScreenType.RNAI); return BROWSE_CHERRY_PICK_REQUESTS; } @UICommand public String browseSmallMoleculeCherryPickRequests() { _cherryPickRequestsBrowser.searchScreenType(ScreenType.SMALL_MOLECULE); return BROWSE_CHERRY_PICK_REQUESTS; } @UICommand public String browseUserActivities() { ScreensaverUser user = getScreensaverUser(); if (user instanceof AdministratorUser && (user.isUserInRole(ScreensaverUserRole.READ_EVERYTHING_ADMIN) || user.isUserInRole(ScreensaverUserRole.CHERRY_PICK_REQUESTS_ADMIN))) { _activitiesBrowser.searchAllUserActivities(); } else { _activitiesBrowser.searchActivitiesForUser(user); } return BROWSE_ACTIVITIES; } @UICommand public String browseAttachedFiles() { _attachedFilesBrowser.searchAll(); return BROWSE_ATTACHED_FILES; } @UICommand public String browseLettersOfSupport() { _attachedFilesBrowser.searchForTypes(_attachedFilesBrowser.getLetterOfSupportAttachedFileTypes(), "Letters of Support"); return BROWSE_ATTACHED_FILES; } @UICommand public String addLibrary() { return _libraryDetailViewer.editNewEntity(new Library((AdministratorUser) getScreensaverUser())); } @UICommand public String addScreen() { Screen screen = _screenGenerator.createPrimaryScreen((AdministratorUser) getScreensaverUser(), null, null); return _screenDetailViewer.editNewEntity(screen); } @UICommand public String addScreeningRoomUser() { return _userViewer.editNewEntity(new ScreeningRoomUser((AdministratorUser) getScreensaverUser())); } @UICommand public String addLabHead() { return _userViewer.editNewEntity(new LabHead((AdministratorUser) getScreensaverUser())); } public String getLastLoadedDate() { return DateTimeFormat.forPattern("yyyy-MM-dd").print(_librariesDao.getLatestDataLoadingDate()); } }