com.atlassian.jira.security.roles
Class CachingProjectRoleAndActorStore

java.lang.Object
  extended by com.atlassian.jira.security.roles.CachingProjectRoleAndActorStore
All Implemented Interfaces:
ProjectRoleAndActorStore

public class CachingProjectRoleAndActorStore
extends Object
implements ProjectRoleAndActorStore

A caching implementation of the ProjectRoleAndActorStore that delegates to another ProjectRoleAndActorStore.

This class maintains two separate unrelated caches, one for ProjectRoles and another for the actors associated with a Project/ProjectRole combination. These use separate approaches to maintain correctness under concurrent usage.

The caching of the ProjectRoleActors maintains its correctness under concurrent updates/miss population by using ConcurrentMap.putIfAbsent(Object,Object) to store the result of a retrieval operation from the database (non-mutative), but Map.put(Object,Object) to store the result of an update.


Constructor Summary
CachingProjectRoleAndActorStore(ProjectRoleAndActorStore delegate, RoleActorFactory roleActorFactory, com.atlassian.cache.CacheManager cacheManager)
           
 
Method Summary
 ProjectRole addProjectRole(ProjectRole projectRole)
           
 void applyDefaultsRolesToProject(Project project)
           
 void clearCaches()
           
 void deleteProjectRole(ProjectRole projectRole)
           
 Collection<ProjectRole> getAllProjectRoles()
           
 DefaultRoleActors getDefaultRoleActors(Long projectRoleId)
           
 Collection<Long> getProjectIdsContainingRoleActorByKeyAndType(String key, String type)
           
 Map<Long,List<String>> getProjectIdsForUserInGroupsBecauseOfRole(List<Long> projectsToLimitBy, ProjectRole projectRole, String projectRoleType, String userKey)
           
 ProjectRole getProjectRole(Long id)
           
 ProjectRoleActors getProjectRoleActors(Long projectRoleId, Long projectId)
           
 ProjectRole getProjectRoleByName(String name)
           
 void onClearCache(ClearCacheEvent event)
           
 void removeAllRoleActorsByKeyAndType(String key, String type)
           
 void removeAllRoleActorsByProject(Project project)
           
 List<Long> roleActorOfTypeExistsForProjects(List<Long> projectsToLimitBy, ProjectRole projectRole, String projectRoleType, String projectRoleParameter)
           
 void updateDefaultRoleActors(DefaultRoleActors defaultRoleActors)
           
 void updateProjectRole(ProjectRole projectRole)
           
 void updateProjectRoleActors(ProjectRoleActors projectRoleActors)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

CachingProjectRoleAndActorStore

public CachingProjectRoleAndActorStore(ProjectRoleAndActorStore delegate,
                                       RoleActorFactory roleActorFactory,
                                       com.atlassian.cache.CacheManager cacheManager)
Method Detail

getAllProjectRoles

public Collection<ProjectRole> getAllProjectRoles()
Specified by:
getAllProjectRoles in interface ProjectRoleAndActorStore

getProjectRole

public ProjectRole getProjectRole(Long id)
Specified by:
getProjectRole in interface ProjectRoleAndActorStore

getProjectRoleByName

public ProjectRole getProjectRoleByName(String name)
Specified by:
getProjectRoleByName in interface ProjectRoleAndActorStore

addProjectRole

public ProjectRole addProjectRole(ProjectRole projectRole)
Specified by:
addProjectRole in interface ProjectRoleAndActorStore

updateProjectRole

public void updateProjectRole(ProjectRole projectRole)
Specified by:
updateProjectRole in interface ProjectRoleAndActorStore

deleteProjectRole

public void deleteProjectRole(ProjectRole projectRole)
Specified by:
deleteProjectRole in interface ProjectRoleAndActorStore

getDefaultRoleActors

public DefaultRoleActors getDefaultRoleActors(Long projectRoleId)
Specified by:
getDefaultRoleActors in interface ProjectRoleAndActorStore

getProjectRoleActors

public ProjectRoleActors getProjectRoleActors(Long projectRoleId,
                                              Long projectId)
Specified by:
getProjectRoleActors in interface ProjectRoleAndActorStore

updateProjectRoleActors

public void updateProjectRoleActors(ProjectRoleActors projectRoleActors)
Specified by:
updateProjectRoleActors in interface ProjectRoleAndActorStore

updateDefaultRoleActors

public void updateDefaultRoleActors(DefaultRoleActors defaultRoleActors)
Specified by:
updateDefaultRoleActors in interface ProjectRoleAndActorStore

applyDefaultsRolesToProject

public void applyDefaultsRolesToProject(Project project)
Specified by:
applyDefaultsRolesToProject in interface ProjectRoleAndActorStore

removeAllRoleActorsByKeyAndType

public void removeAllRoleActorsByKeyAndType(String key,
                                            String type)
Specified by:
removeAllRoleActorsByKeyAndType in interface ProjectRoleAndActorStore

removeAllRoleActorsByProject

public void removeAllRoleActorsByProject(Project project)
Specified by:
removeAllRoleActorsByProject in interface ProjectRoleAndActorStore

getProjectIdsContainingRoleActorByKeyAndType

public Collection<Long> getProjectIdsContainingRoleActorByKeyAndType(String key,
                                                                     String type)
Specified by:
getProjectIdsContainingRoleActorByKeyAndType in interface ProjectRoleAndActorStore

roleActorOfTypeExistsForProjects

public List<Long> roleActorOfTypeExistsForProjects(List<Long> projectsToLimitBy,
                                                   ProjectRole projectRole,
                                                   String projectRoleType,
                                                   String projectRoleParameter)
Specified by:
roleActorOfTypeExistsForProjects in interface ProjectRoleAndActorStore

getProjectIdsForUserInGroupsBecauseOfRole

public Map<Long,List<String>> getProjectIdsForUserInGroupsBecauseOfRole(List<Long> projectsToLimitBy,
                                                                        ProjectRole projectRole,
                                                                        String projectRoleType,
                                                                        String userKey)
Specified by:
getProjectIdsForUserInGroupsBecauseOfRole in interface ProjectRoleAndActorStore

onClearCache

@EventListener
public void onClearCache(ClearCacheEvent event)

clearCaches

public void clearCaches()


Copyright © 2002-2014 Atlassian. All Rights Reserved.