// $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.ui.users; import java.io.IOException; import java.util.SortedSet; import com.google.common.collect.Sets; import org.apache.log4j.Logger; import org.apache.myfaces.custom.fileupload.UploadedFile; import edu.harvard.med.iccbl.screensaver.IccblScreensaverConstants; import edu.harvard.med.iccbl.screensaver.policy.DataSharingLevelMapper; 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.ScreensaverUserRole; import edu.harvard.med.screensaver.ui.arch.util.UISelectOneBean; 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.users.UserViewer; public class UserAgreementUpdater extends AbstractBackingBean { private static Logger log = Logger.getLogger(UserAgreementUpdater.class); private UploadedFile _userAgreementUploadedFile; private UISelectOneBean<ScreensaverUserRole> _dataSharingLevel; private UserViewer _userViewer; private edu.harvard.med.iccbl.screensaver.service.users.UserAgreementUpdater _userAgreementUpdater; private ScreenType _screenType; protected UserAgreementUpdater() {} public boolean isEnabled() { return getApplicationProperties().isFeatureEnabled("user_agreement_updater"); } public UserAgreementUpdater(UserViewer userViewer, ScreenType screenType, edu.harvard.med.iccbl.screensaver.service.users.UserAgreementUpdater userAgreementUpdater) { _userViewer = userViewer; _screenType = screenType; _userAgreementUpdater = userAgreementUpdater; } public ScreenType getScreenType() { return _screenType; } public void setScreenType(ScreenType screenType) { _screenType = screenType; } public void setUserAgreementUploadedFile(UploadedFile uploadedFile) { _userAgreementUploadedFile = uploadedFile; } public UploadedFile getUserAgreementUploadedFile() { return _userAgreementUploadedFile; } public String getCurrentDataSharingLevelRoleName() { ScreensaverUserRole dslRole = DataSharingLevelMapper.getPrimaryDataSharingLevelRoleForUser(getScreenType(), _userViewer.getScreeningRoomUser()); return dslRole == null ? "<none>" : dslRole.getDisplayableRoleName(); } public String getLabHeadDataSharingLevelRoleName() { if (_userViewer.getScreeningRoomUser().isHeadOfLab()) { return "<user is lab head>"; } LabHead labHead = _userViewer.getScreeningRoomUser().getLab().getLabHead(); if (labHead == null) { return "<no lab head specified>"; } ScreensaverUserRole dslRole = DataSharingLevelMapper.getPrimaryDataSharingLevelRoleForUser(getScreenType(), labHead); return dslRole == null ? "<none>" : dslRole.getDisplayableRoleName(); } public boolean isScreensaverUser() { return _userViewer.getEntity().getScreensaverUserRoles().contains(ScreensaverUserRole.SCREENSAVER_USER); } public UISelectOneBean<ScreensaverUserRole> getNewDataSharingLevel() { if (_dataSharingLevel == null) { SortedSet<ScreensaverUserRole> candidateDslRoles = Sets.newTreeSet(DataSharingLevelMapper.UserDslRoles.get(getScreenType())); // At ICCB-L, the RNAi DSL 2 role is not an option, so we hide it at the UI level; we maintain it in our model for consistency with the SM DSL roles // TODO: refactor to share this logic with similar code in UserViewer.getNewUserRole() if (getApplicationProperties().isFacility(IccblScreensaverConstants.FACILITY_KEY)) { candidateDslRoles.remove(ScreensaverUserRole.RNAI_DSL_LEVEL2_MUTUAL_POSITIVES); } _dataSharingLevel = new UISelectOneBean<ScreensaverUserRole>(candidateDslRoles, DataSharingLevelMapper.getPrimaryDataSharingLevelRoleForUser(getScreenType(), _userViewer.getScreeningRoomUser()), false) { @Override protected String makeLabel(ScreensaverUserRole t) { return t.getDisplayableRoleName(); } }; } return _dataSharingLevel; } @UICommand public String updateUser() throws IOException { ScreeningRoomUser user = _userViewer.getScreeningRoomUser(); _userAgreementUpdater.updateUser(user, getNewDataSharingLevel().getSelection(), getScreenType(), getUserAgreementUploadedFile().getName(), getUserAgreementUploadedFile().getInputStream(), (AdministratorUser) getScreensaverUser()); showMessage("users.updatedUserAgreement"); return _userViewer.viewEntity(user); } @UICommand public String cancel() { return _userViewer.reload(); } public edu.harvard.med.iccbl.screensaver.service.users.UserAgreementUpdater getUserAgreementUpdater() { return _userAgreementUpdater; } public void setUserAgreementUpdater(edu.harvard.med.iccbl.screensaver.service.users.UserAgreementUpdater userAgreementUpdater) { _userAgreementUpdater = userAgreementUpdater; } }