// $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 org.apache.log4j.Logger;
import edu.harvard.med.iccbl.screensaver.policy.DataSharingLevelMapper;
import edu.harvard.med.screensaver.ScreensaverConstants;
import edu.harvard.med.screensaver.db.GenericEntityDAO;
import edu.harvard.med.screensaver.db.Criterion.Operator;
import edu.harvard.med.screensaver.model.AttachedFile;
import edu.harvard.med.screensaver.model.AuditedAbstractEntity;
import edu.harvard.med.screensaver.model.activities.Activity;
import edu.harvard.med.screensaver.model.activities.ServiceActivity;
import edu.harvard.med.screensaver.model.cherrypicks.CherryPickRequest;
import edu.harvard.med.screensaver.model.libraries.LibraryPlate;
import edu.harvard.med.screensaver.model.screenresults.DataColumn;
import edu.harvard.med.screensaver.model.screenresults.ScreenResult;
import edu.harvard.med.screensaver.model.screens.Screen;
import edu.harvard.med.screensaver.model.screens.ScreenDataSharingLevel;
import edu.harvard.med.screensaver.model.screens.ScreenType;
import edu.harvard.med.screensaver.model.users.LabHead;
import edu.harvard.med.screensaver.model.users.ScreeningRoomUser;
import edu.harvard.med.screensaver.model.users.ScreensaverUserRole;
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.aspects.UICommand;
import edu.harvard.med.screensaver.ui.cherrypickrequests.CherryPickRequestSearchResults;
import edu.harvard.med.screensaver.ui.libraries.LibraryPlateSearchResults;
import edu.harvard.med.screensaver.ui.libraries.LibrarySearchResults;
import edu.harvard.med.screensaver.ui.libraries.WellSearchResults;
import edu.harvard.med.screensaver.ui.screenresults.ScreenResultImporter;
import edu.harvard.med.screensaver.ui.screenresults.ScreenResultViewer;
import edu.harvard.med.screensaver.ui.screenresults.cellhts2.CellHTS2Runner;
import edu.harvard.med.screensaver.ui.screenresults.heatmaps.HeatMapViewer;
public class ScreenViewer extends StudyViewer<Screen>
{
private static Logger log = Logger.getLogger(ScreenViewer.class);
private ScreenResultViewer _screenResultViewer;
private HeatMapViewer _heatMapViewer;
private CellHTS2Runner _cellHTS2Runner;
private ScreenResultImporter _screenResultImporter;
private ScreenDetailViewer _screenDetailViewer;
private ActivitySearchResults _activitiesBrowser;
private CherryPickRequestSearchResults _cherryPickRequestSearchResults;
private LibrarySearchResults _librarySearchResults;
private LibraryPlateSearchResults _libraryPlateSearchResults;
/**
* @motivation for CGLIB2
*/
protected ScreenViewer()
{
}
public ScreenViewer(ScreenViewer thisProxy,
ScreenSearchResults screensBrowser,
GenericEntityDAO dao,
ScreenDetailViewer screenDetailViewer,
WellSearchResults wellsBrowser,
ScreenResultViewer screenResultViewer,
HeatMapViewer heatMapViewer,
CellHTS2Runner cellHTS2Runner,
ScreenResultImporter screenResultImporter,
ActivitySearchResults activitiesBrowser,
CherryPickRequestSearchResults cprsBrowser,
LibrarySearchResults librarySearchResults,
LibraryPlateSearchResults libraryPlateSearchResults)
{
super(Screen.class,
thisProxy,
screensBrowser,
ScreensaverConstants.BROWSE_SCREENS,
ScreensaverConstants.VIEW_SCREEN,
dao,
null,
wellsBrowser);
_screenDetailViewer = screenDetailViewer;
_screenResultViewer = screenResultViewer;
_heatMapViewer = heatMapViewer;
_cellHTS2Runner = cellHTS2Runner;
_screenResultImporter = screenResultImporter;
_activitiesBrowser = activitiesBrowser;
_cherryPickRequestSearchResults = cprsBrowser;
_librarySearchResults = librarySearchResults;
_libraryPlateSearchResults = libraryPlateSearchResults;
}
public void initializeViewer(Screen screen)
{
super.initializeViewer(screen);
_screenDetailViewer.setEntity(screen);
ScreenResult screenResult = screen.getScreenResult();
if (screenResult != null && screenResult.isRestricted()) {
screenResult = null;
}
_screenResultViewer.setEntity(screenResult);
_heatMapViewer.setScreenResult(screenResult);
_cellHTS2Runner.setScreenResult(screenResult);
warnAdminOnMismatchedDataSharingLevel(screen);
}
@Override
protected void initializeEntity(Screen screen)
{
super.initializeEntity(screen);
getDao().needReadOnly(screen, Screen.labHead.to(LabHead.labAffiliation));
getDao().needReadOnly(screen, Screen.labHead.to(LabHead.labMembers));
getDao().needReadOnly(screen, Screen.leadScreener);
getDao().needReadOnly(screen, Screen.collaborators.to(ScreeningRoomUser.LabHead));
getDao().needReadOnly(screen, Screen.billingItems);
getDao().needReadOnly(screen, Screen.labActivities.to(Activity.performedBy));
// Note: explicit load of serviceActivity screen; however this doesn't solve the need
// to reload the screeen when displaying the activity in the ActivitySearchResults - sde4
getDao().needReadOnly(screen, Screen.serviceActivities.to(Activity.performedBy));
getDao().needReadOnly(screen, Screen.serviceActivities.to(ServiceActivity.servicedUser));
getDao().needReadOnly(screen, Screen.serviceActivities.to(ServiceActivity.servicedScreen));
getDao().needReadOnly(screen, Screen.attachedFiles.to(AttachedFile.fileType));
getDao().needReadOnly(screen, Screen.fundingSupports);
getDao().needReadOnly(screen, Screen.publications);
getDao().needReadOnly(screen, Screen.keywords);
getDao().needReadOnly(screen, Screen.statusItems);
getDao().needReadOnly(screen, Screen.cherryPickRequests.to(CherryPickRequest.requestedBy));
//getDao().needReadOnly(screen, Screen.annotationTypes.to(AnnotationType.annotationValues));
getDao().needReadOnly(screen.getScreenResult(), ScreenResult.dataColumns.to(DataColumn.derivedTypes));
getDao().needReadOnly(screen.getScreenResult(), ScreenResult.dataColumns.to(DataColumn.typesDerivedFrom));
// for screen result last data import date
getDao().needReadOnly(screen, AuditedAbstractEntity.updateActivities);
getDao().needReadOnly(screen, Screen.pinTransferApprovalActivity.to(Activity.createdBy));
getDao().needReadOnly(screen, Screen.pinTransferApprovalActivity.to(Activity.performedBy));
}
private void warnAdminOnMismatchedDataSharingLevel(Screen screen)
{
if (isReadAdmin()) {
if (screen.getLabHead() != null) {
ScreenDataSharingLevel screenDslForLabHead = DataSharingLevelMapper.getScreenDataSharingLevelForUser(screen.getScreenType(), screen.getLabHead());
if (screen.getDataSharingLevel().compareTo(screenDslForLabHead) > 0) {
showMessage("screens.dataSharingLevelTooRestrictive",
screen.getDataSharingLevel().toString(),
DataSharingLevelMapper.getPrimaryDataSharingLevelRoleForUser(screen.getScreenType(), screen.getLabHead()));
}
}
}
}
@UICommand
public String browseActivities()
{
_activitiesBrowser.searchActivitiesForScreen(getEntity());
return BROWSE_ACTIVITIES;
}
@UICommand
public String browseCherryPickRequests()
{
_cherryPickRequestSearchResults.searchForScreen(getEntity());
return BROWSE_CHERRY_PICK_REQUESTS;
}
@UICommand
public String browseProjectScreens()
{
String projectId = getRequestParameter("projectId").toString();
((ScreenSearchResults) getContextualSearchResults()).searchScreensForProject(projectId);
return BROWSE_SCREENS;
}
public LibraryPlateSearchResults getPlateSearchResults()
{
return _libraryPlateSearchResults;
}
@UICommand
public String browseLibrariesScreened()
{
_librarySearchResults.searchLibrariesScreened(getEntity());
return BROWSE_LIBRARIES;
}
@UICommand
public String browseLibraryPlatesScreened()
{
_libraryPlateSearchResults.searchLibraryPlatesScreenedByScreen(getEntity());
return BROWSE_LIBRARY_PLATES_SCREENED;
}
@UICommand
public String browseLibraryPlatesDataLoaded()
{
_libraryPlateSearchResults.searchLibraryPlatesScreenedByScreen(getEntity());
TableColumn<LibraryPlate,Boolean> isDataLoadedCcolumn =
(TableColumn<LibraryPlate,Boolean>) _libraryPlateSearchResults.getColumnManager().getColumn("Data Loaded");
isDataLoadedCcolumn.getCriterion().setOperatorAndValue(Operator.EQUAL, Boolean.TRUE);
return BROWSE_LIBRARY_PLATES_SCREENED;
}
}