public class OptimizedCanonicalityChecker extends Object implements CanonicalityChecker
CanonicalityChecker
.
This implementation is efficient for multiple calls, as it pre-fetches data.
Limits number of queries to one per directory and entity type combination.
Keeps only shadowed names to decrease memory usage.
Does not implement CanonicalityChecker.groupByCanonicalId(Set, EntityDescriptor)
- can't be used for
parent queries.Constructor and Description |
---|
OptimizedCanonicalityChecker(DirectoryManager directoryManager,
List<Directory> directories) |
OptimizedCanonicalityChecker(DirectoryManager directoryManager,
List<Directory> directories,
Map<EntityDescriptor,LongFunction<Collection<String>>> providers) |
Modifier and Type | Method and Description |
---|---|
List<Directory> |
getDirectories() |
com.google.common.collect.SetMultimap<Long,String> |
groupByCanonicalId(Set<String> names,
EntityDescriptor entity)
Returns names grouped by their canonical directory id.
|
void |
removeNonCanonicalEntities(com.google.common.collect.Multimap<Long,String> allNames,
EntityDescriptor entity)
Given a username is duplicated in several
user directories under the same
application . |
public OptimizedCanonicalityChecker(DirectoryManager directoryManager, List<Directory> directories)
public OptimizedCanonicalityChecker(DirectoryManager directoryManager, List<Directory> directories, Map<EntityDescriptor,LongFunction<Collection<String>>> providers)
public void removeNonCanonicalEntities(com.google.common.collect.Multimap<Long,String> allNames, EntityDescriptor entity)
CanonicalityChecker
Given a username is duplicated in several user directories
under the same
application
.
The user in the first directory, according to directory ordering is considered to be the canonical user for the given username, and the other users are shadowed and thus not to be returned from searches.
This method removes all entities which were found for a given directory, but were not canonical in it (they existed in a preceding directory, not necessarily in the allEntities map). The allEntities map will be mutated in the process. For example: Given the following directories and entities:removeNonCanonicalEntities
in interface CanonicalityChecker
allNames
- a directoryId to list of entities map containing the entities to check for canonicality.entity
- the EntityDescriptor used to look up the entities that will be determined as canonicalpublic com.google.common.collect.SetMultimap<Long,String> groupByCanonicalId(Set<String> names, EntityDescriptor entity)
CanonicalityChecker
groupByCanonicalId
in interface CanonicalityChecker
names
- names to be groupedentity
- entity to which the names are referring topublic List<Directory> getDirectories()
getDirectories
in interface CanonicalityChecker
Copyright © 2021 Atlassian. All rights reserved.