edu.harvard.med.iccbl.screensaver.ui.users.UserAgreementUpdater.java Source code

Java tutorial

Introduction

Here is the source code for edu.harvard.med.iccbl.screensaver.ui.users.UserAgreementUpdater.java

Source

// $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;
    }
}