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