edu.harvard.med.iccbl.screensaver.policy.DataSharingLevelMapper.java Source code

Java tutorial

Introduction

Here is the source code for edu.harvard.med.iccbl.screensaver.policy.DataSharingLevelMapper.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.policy;

import java.util.Map;
import java.util.SortedSet;
import java.util.TreeSet;

import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSortedSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;

import edu.harvard.med.screensaver.model.screens.ScreenDataSharingLevel;
import edu.harvard.med.screensaver.model.screens.ScreenType;
import edu.harvard.med.screensaver.model.users.ScreensaverUser;
import edu.harvard.med.screensaver.model.users.ScreensaverUserRole;
import edu.harvard.med.screensaver.util.NullSafeUtils;

public class DataSharingLevelMapper {
    private static final SortedSet<ScreensaverUserRole> smUserDslRoles = ImmutableSortedSet.of(
            ScreensaverUserRole.SM_DSL_LEVEL3_SHARED_SCREENS, ScreensaverUserRole.SM_DSL_LEVEL2_MUTUAL_POSITIVES,
            ScreensaverUserRole.SM_DSL_LEVEL1_MUTUAL_SCREENS);
    private static final SortedSet<ScreensaverUserRole> rnaiUserDslRoles = ImmutableSortedSet.of(
            ScreensaverUserRole.RNAI_DSL_LEVEL3_SHARED_SCREENS,
            ScreensaverUserRole.RNAI_DSL_LEVEL2_MUTUAL_POSITIVES,
            ScreensaverUserRole.RNAI_DSL_LEVEL1_MUTUAL_SCREENS);
    public static final Map<ScreenType, SortedSet<ScreensaverUserRole>> UserDslRoles = ImmutableMap
            .of(ScreenType.SMALL_MOLECULE, smUserDslRoles, ScreenType.RNAI, rnaiUserDslRoles);

    public static ScreensaverUserRole getPrimaryDataSharingLevelRoleForUser(ScreenType screenType,
            ScreensaverUser user) {
        TreeSet<ScreensaverUserRole> userDslRoles = Sets
                .newTreeSet(Sets.intersection(user.getScreensaverUserRoles(), UserDslRoles.get(screenType)));
        if (!userDslRoles.isEmpty()) {
            return userDslRoles.last();
        }
        return null;
    }

    public static ScreenDataSharingLevel getScreenDataSharingLevelForUser(ScreenType screenType,
            ScreensaverUser user) {
        return NullSafeUtils.value(
                getScreenDataSharingLevelForRole(getPrimaryDataSharingLevelRoleForUser(screenType, user)),
                ScreenDataSharingLevel.PRIVATE);
    }

    public static ScreenDataSharingLevel getScreenDataSharingLevelForRole(ScreensaverUserRole userDslRole) {
        if (userDslRole != null) {
            switch (userDslRole) {
            case SM_DSL_LEVEL1_MUTUAL_SCREENS:
            case RNAI_DSL_LEVEL1_MUTUAL_SCREENS:
                return ScreenDataSharingLevel.MUTUAL_SCREENS;
            case SM_DSL_LEVEL2_MUTUAL_POSITIVES:
            case RNAI_DSL_LEVEL2_MUTUAL_POSITIVES:
                return ScreenDataSharingLevel.MUTUAL_POSITIVES;
            }
        }
        return ScreenDataSharingLevel.PRIVATE;
    }

    public static ScreensaverUserRole getUserDslRoleForScreenTypeAndLevel(ScreenType screenType, int level) {
        SortedSet<ScreensaverUserRole> roles = UserDslRoles.get(screenType);
        ScreensaverUserRole role = Iterables.get(roles, roles.size() - level);
        assert (role.getRoleName().contains(Integer.toString(level)));
        return role;
    }
}