static class RoleImpl.CachingHierarchyAccess extends RoleImpl.DelegatingHierarchyAccess
Role.HierarchyAccess that caches
the access of each member and level.
This reduces the number of calls to the underlying HierarchyAccess, which is particularly useful for a union role which is based on many roles.
Caching uses two WeakHashMap objects, so should
release resources if memory is scarce. However, it may use up memory and
cause segments etc. to be removed from the cache when GC is triggered.
For this reason, you should only use this wrapper for a HierarchyAccess
which would otherwise have poor performance; currently used for union
roles with 5 or more member roles.
hierarchyAccess| Constructor and Description |
|---|
RoleImpl.CachingHierarchyAccess(Role.HierarchyAccess hierarchyAccess)
Creates a CachingHierarchyAccess.
|
| Modifier and Type | Method and Description |
|---|---|
Access |
getAccess(Member member)
Returns the access the current role has to a given member.
|
int |
getBottomLevelDepth()
Returns the depth of the lowest level to which the current Role has
access.
|
Role.RollupPolicy |
getRollupPolicy()
Returns the policy by which cell values are calculated if not all
of a member's children are visible.
|
int |
getTopLevelDepth()
Returns the depth of the highest level to which the current Role has
access.
|
boolean |
hasInaccessibleDescendants(Member member)
Returns
true if at least one of the descendants of the
given Member is inaccessible to this Role. |
public RoleImpl.CachingHierarchyAccess(Role.HierarchyAccess hierarchyAccess)
hierarchyAccess - Underlying hierarchy accesspublic Access getAccess(Member member)
Role.HierarchyAccessVisibility is:
Access.NONE if member is not visible,
Access.ALL if member and all children are visible,
Access.CUSTOM if some of the children are not visible.
For these purposes, children which are below the bottom level are regarded as visible.
getAccess in interface Role.HierarchyAccessgetAccess in class RoleImpl.DelegatingHierarchyAccessmember - Member.public int getTopLevelDepth()
Role.HierarchyAccessgetTopLevelDepth in interface Role.HierarchyAccessgetTopLevelDepth in class RoleImpl.DelegatingHierarchyAccesspublic int getBottomLevelDepth()
Role.HierarchyAccessgetBottomLevelDepth in interface Role.HierarchyAccessgetBottomLevelDepth in class RoleImpl.DelegatingHierarchyAccesspublic Role.RollupPolicy getRollupPolicy()
Role.HierarchyAccessgetRollupPolicy in interface Role.HierarchyAccessgetRollupPolicy in class RoleImpl.DelegatingHierarchyAccesspublic boolean hasInaccessibleDescendants(Member member)
Role.HierarchyAccesstrue if at least one of the descendants of the
given Member is inaccessible to this Role.
Descendants which are inaccessible because they are below the bottom level are ignored.
hasInaccessibleDescendants in interface Role.HierarchyAccesshasInaccessibleDescendants in class RoleImpl.DelegatingHierarchyAccessmember - Member