// $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.iccbl.screensaver.policy;
import edu.harvard.med.screensaver.model.AttachedFile;
import edu.harvard.med.screensaver.model.AttachedFileType;
import edu.harvard.med.screensaver.model.activities.AdministrativeActivity;
import edu.harvard.med.screensaver.model.activities.ServiceActivity;
import edu.harvard.med.screensaver.model.cells.Cell;
import edu.harvard.med.screensaver.model.cells.ExperimentalCellInformation;
import edu.harvard.med.screensaver.model.cherrypicks.CherryPickAssayPlate;
import edu.harvard.med.screensaver.model.cherrypicks.CherryPickLiquidTransfer;
import edu.harvard.med.screensaver.model.cherrypicks.LabCherryPick;
import edu.harvard.med.screensaver.model.cherrypicks.RNAiCherryPickRequest;
import edu.harvard.med.screensaver.model.cherrypicks.ScreenerCherryPick;
import edu.harvard.med.screensaver.model.cherrypicks.SmallMoleculeCherryPickRequest;
import edu.harvard.med.screensaver.model.libraries.Copy;
import edu.harvard.med.screensaver.model.libraries.Gene;
import edu.harvard.med.screensaver.model.libraries.Library;
import edu.harvard.med.screensaver.model.libraries.LibraryContentsVersion;
import edu.harvard.med.screensaver.model.libraries.NaturalProductReagent;
import edu.harvard.med.screensaver.model.libraries.Plate;
import edu.harvard.med.screensaver.model.libraries.PlateLocation;
import edu.harvard.med.screensaver.model.libraries.SilencingReagent;
import edu.harvard.med.screensaver.model.libraries.SmallMoleculeReagent;
import edu.harvard.med.screensaver.model.libraries.Well;
import edu.harvard.med.screensaver.model.libraries.WellVolumeCorrectionActivity;
import edu.harvard.med.screensaver.model.screenresults.AnnotationType;
import edu.harvard.med.screensaver.model.screenresults.AnnotationValue;
import edu.harvard.med.screensaver.model.screenresults.AssayPlate;
import edu.harvard.med.screensaver.model.screenresults.AssayWell;
import edu.harvard.med.screensaver.model.screenresults.DataColumn;
import edu.harvard.med.screensaver.model.screenresults.ResultValue;
import edu.harvard.med.screensaver.model.screenresults.ScreenResult;
import edu.harvard.med.screensaver.model.screens.AbaseTestset;
import edu.harvard.med.screensaver.model.screens.CellLine;
import edu.harvard.med.screensaver.model.screens.CherryPickScreening;
import edu.harvard.med.screensaver.model.screens.EquipmentUsed;
import edu.harvard.med.screensaver.model.screens.FundingSupport;
import edu.harvard.med.screensaver.model.screens.LibraryScreening;
import edu.harvard.med.screensaver.model.screens.Publication;
import edu.harvard.med.screensaver.model.screens.Screen;
import edu.harvard.med.screensaver.model.screens.Study;
import edu.harvard.med.screensaver.model.screens.TransfectionAgent;
import edu.harvard.med.screensaver.model.users.AdministratorUser;
import edu.harvard.med.screensaver.model.users.ChecklistItem;
import edu.harvard.med.screensaver.model.users.ChecklistItemEvent;
import edu.harvard.med.screensaver.model.users.LabAffiliation;
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.policy.CurrentScreensaverUser;
import edu.harvard.med.screensaver.policy.EntityEditPolicy;
public class IccblEntityEditPolicy implements EntityEditPolicy
{
private CurrentScreensaverUser _currentScreensaverUser;
private ScreensaverUser _screensaverUser;
protected IccblEntityEditPolicy() {}
public IccblEntityEditPolicy(CurrentScreensaverUser user)
{
_currentScreensaverUser = user;
}
/**
* @motivation for unit tests
*/
public IccblEntityEditPolicy(ScreensaverUser user)
{
_screensaverUser = user;
}
public ScreensaverUser getScreensaverUser()
{
if (_screensaverUser == null) {
_screensaverUser = _currentScreensaverUser.getScreensaverUser();
}
return _screensaverUser;
}
@Override
public Boolean visit(AbaseTestset entity)
{
return visit(entity.getScreen());
}
@Override
public Boolean visit(AdministratorUser administratorUser)
{
return false;
}
@Override
public Boolean visit(AdministrativeActivity administrativeActivity)
{
return getScreensaverUser().isUserInRole(administrativeActivity.getType().getEditableByRole());
}
@Override
public Boolean visit(AnnotationType annotation)
{
return false;
}
@Override
public Boolean visit(AnnotationValue annotationValue)
{
return false;
}
@Override
public Boolean visit(AssayPlate assayPlate)
{
return false;
}
@Override
public Boolean visit(AssayWell assayWell)
{
return false;
}
@Override
public Boolean visit(AttachedFile entity)
{
return false;
}
@Override
public Boolean visit(AttachedFileType attachedFileType)
{
return false;
}
// @Override
// public Boolean visit(BillingInformation entity)
// {
// return getScreensaverUser().isUserInRole(ScreensaverUserRole.BILLING_ADMIN);
// }
//
// @Override
// public Boolean visit(BillingItem entity)
// {
// return getScreensaverUser().isUserInRole(ScreensaverUserRole.BILLING_ADMIN);
// }
@Override
public Boolean visit(ChecklistItemEvent entity)
{
return getScreensaverUser().isUserInRole(ScreensaverUserRole.USER_CHECKLIST_ITEMS_ADMIN);
}
@Override
public Boolean visit(ChecklistItem entity)
{
return false;
}
@Override
public Boolean visit(CherryPickAssayPlate entity)
{
return false;
}
@Override
public Boolean visit(CherryPickLiquidTransfer entity)
{
return getScreensaverUser().isUserInRole(ScreensaverUserRole.CHERRY_PICK_REQUESTS_ADMIN);
}
@Override
public Boolean visit(SmallMoleculeReagent entity)
{
return false;
}
@Override
public Boolean visit(SmallMoleculeCherryPickRequest entity)
{
return getScreensaverUser().isUserInRole(ScreensaverUserRole.CHERRY_PICK_REQUESTS_ADMIN);
}
@Override
public Boolean visit(Copy entity)
{
return getScreensaverUser().isUserInRole(ScreensaverUserRole.LIBRARY_COPIES_ADMIN);
}
@Override
public Boolean visit(Plate entity)
{
return visit(entity.getCopy());
}
@Override
public Boolean visit(PlateLocation entity)
{
return false;
}
@Override
public Boolean visit(EquipmentUsed entity)
{
return false;
}
@Override
public Boolean visit(FundingSupport fundingSupport)
{
return false;
}
@Override
public Boolean visit(Gene entity)
{
return false;
}
@Override
public Boolean visit(LabAffiliation entity)
{
return getScreensaverUser().isUserInRole(ScreensaverUserRole.LAB_HEADS_ADMIN);
}
@Override
public Boolean visit(LabCherryPick entity)
{
return false;
}
@Override
public Boolean visit(LabHead labHead)
{
return getScreensaverUser().isUserInRole(ScreensaverUserRole.LAB_HEADS_ADMIN);
}
@Override
public Boolean visit(Library entity)
{
return getScreensaverUser().isUserInRole(ScreensaverUserRole.LIBRARIES_ADMIN);
}
@Override
public Boolean visit(LibraryContentsVersion libraryContentsVersion)
{
return visit(libraryContentsVersion.getLibrary());
}
@Override
public Boolean visit(LibraryScreening entity)
{
return visit(entity.getScreen());
}
@Override
public Boolean visit(NaturalProductReagent entity)
{
return false;
}
@Override
public Boolean visit(Publication entity)
{
return false;
}
@Override
public Boolean visit(ResultValue entity)
{
return false;
}
@Override
public Boolean visit(DataColumn entity)
{
return visit(entity.getScreenResult());
}
@Override
public Boolean visit(RNAiCherryPickRequest entity)
{
return getScreensaverUser().isUserInRole(ScreensaverUserRole.CHERRY_PICK_REQUESTS_ADMIN);
}
@Override
public Boolean visit(CherryPickScreening entity)
{
return visit(entity.getScreen());
}
@Override
public Boolean visit(Screen screen)
{
return getScreensaverUser().isUserInRole(ScreensaverUserRole.SCREENS_ADMIN);
}
@Override
public Boolean visit(ScreenResult screenResult)
{
return getScreensaverUser().isUserInRole(ScreensaverUserRole.SCREEN_RESULTS_ADMIN);
}
@Override
public Boolean visit(ScreenerCherryPick entity)
{
return false;
}
@Override
public Boolean visit(ScreeningRoomUser screeningRoomUser)
{
return getScreensaverUser().isUserInRole(ScreensaverUserRole.USERS_ADMIN);
}
@Override
public Boolean visit(SilencingReagent entity)
{
return false;
}
@Override
public Boolean visit(Study study)
{
return getScreensaverUser().isUserInRole(ScreensaverUserRole.SCREENS_ADMIN);
}
@Override
public Boolean visit(Well entity)
{
return false;
}
@Override
public Boolean visit(WellVolumeCorrectionActivity entity)
{
return getScreensaverUser().isUserInRole(ScreensaverUserRole.LIBRARIES_ADMIN);
}
@Override
public Boolean visit(ServiceActivity serviceActivity)
{
return getScreensaverUser().isUserInRole(ScreensaverUserRole.SERVICE_ACTIVITY_ADMIN);
}
@Override
public Boolean visit(CellLine cellLine)
{
return true;
}
@Override
public Boolean visit(TransfectionAgent transfectionAgent)
{
return true;
}
@Override
public Boolean visit(ExperimentalCellInformation experimentalCellInformation) {
return true;
}
@Override
public Boolean visit(Cell cell) {
return true;
}
}