Class NoCacheMemberReader
- java.lang.Object
-
- mondrian.rolap.NoCacheMemberReader
-
- All Implemented Interfaces:
MemberCache
,MemberReader
,MemberSource
- Direct Known Subclasses:
RolapCubeHierarchy.NoCacheRolapCubeHierarchyMemberReader
public class NoCacheMemberReader extends Object implements MemberReader, MemberCache
NoCacheMemberReader
implementsMemberReader
but without doing any kind of caching and avoiding to read all members.- Since:
- 06 October, 2007
- Author:
- jlopez, lcanals
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) class
NoCacheMemberReader.SiblingIterator
SiblingIterator
helps traverse a hierarchy of members, by remembering the position at each level.
-
Constructor Summary
Constructors Constructor Description NoCacheMemberReader(MemberReader source)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description int
compare(RolapMember m1, RolapMember m2, boolean siblingsAreEqual)
Compares two members according to their order in a prefix ordered traversal.RolapMember
desubstitute(RolapMember member)
Returns the member which was substituted.List<RolapMember>
getChildrenFromCache(RolapMember member, MemberChildrenConstraint constraint)
Returns the children ofmember
if they are currently in the cache, otherwise returns null.RolapMember
getDefaultMember()
RolapHierarchy
getHierarchy()
Returns the hierarchy that this source is reading for.RolapMember
getLeadMember(RolapMember member, int n)
Returns the membern
aftermember
in the same level (or before, ifn
is negative).int
getLevelMemberCount(RolapLevel level)
Returns the number of members in this level.List<RolapMember>
getLevelMembersFromCache(RolapLevel level, TupleConstraint constraint)
Returns the members oflevel
if they are currently in the cache, otherwise returns null.RolapMember
getMember(Object key)
Retrieves theRolapMember
with a given key.RolapMember
getMember(Object key, boolean mustCheckCacheStatus)
Retrieves theRolapMember
with a given key.TupleReader.MemberBuilder
getMemberBuilder()
RolapMember
getMemberByKey(RolapLevel level, List<Comparable> keyValues)
Looks up a member by its key value.void
getMemberChildren(List<RolapMember> parentMembers, List<RolapMember> children)
Returns all members which are a child of one of the members inparentMembers
, sorted by ordinal.Map<? extends Member,Access>
getMemberChildren(List<RolapMember> parentMembers, List<RolapMember> children, MemberChildrenConstraint constraint)
Populates a list of the children of a given set of Members, optionally applying a constraint.void
getMemberChildren(RolapMember parentMember, List<RolapMember> children)
Writes all childrenparentMember
tochildren
.Map<? extends Member,Access>
getMemberChildren(RolapMember parentMember, List<RolapMember> children, MemberChildrenConstraint constraint)
Populates a list of the children of a Member, optionally applying a constraint.int
getMemberCount()
Returns an estimate of number of members in this hierarchy.RolapMember
getMemberParent(RolapMember member)
void
getMemberRange(RolapLevel level, RolapMember startMember, RolapMember endMember, List<RolapMember> list)
Writes all members betweenstartMember
andendMember
intolist
.List<RolapMember>
getMembers()
Returns all members of this hierarchy, sorted by ordinal.List<RolapMember>
getMembersInLevel(RolapLevel level)
Returns all of the members inlevel
whose ordinal lies betweenstartOrdinal
andendOrdinal
.List<RolapMember>
getMembersInLevel(RolapLevel level, TupleConstraint constraint)
Returns the members in the given Level, optionally applying a constraint.List<RolapMember>
getRootMembers()
Returns all members of this hierarchy which do not have a parent, sorted by ordinal.boolean
isMutable()
Returns whether the cache supports removing selected items.RolapMember
lookupMember(List<Id.Segment> uniqueNameParts, boolean failIfNotFound)
Finds a member based upon its unique name.Object
makeKey(RolapMember parent, Object key)
Creates a key with which toMemberCache.getMember(Object)
orMemberCache.putMember(Object, RolapMember)
theRolapMember
with a given parent and key.void
putChildren(RolapLevel level, TupleConstraint constraint, List<RolapMember> children)
void
putChildren(RolapMember member, MemberChildrenConstraint constraint, List<RolapMember> children)
Object
putMember(Object key, RolapMember value)
Replaces theRolapMember
with a given key and returns the previous member if any.protected void
readMemberChildren(List<RolapMember> members, List<RolapMember> result, MemberChildrenConstraint constraint)
Reads the children ofmember
intoresult
.RolapMember
removeMember(Object key)
Removes theRolapMember
with a given key from the cache.RolapMember
removeMemberAndDescendants(Object key)
Removes the designatedRolapMember
and all its descendants.boolean
setCache(MemberCache cache)
Sets the cache which thisMemberSource
will write to.RolapMember
substitute(RolapMember member)
Substitutes a given member.
-
-
-
Constructor Detail
-
NoCacheMemberReader
NoCacheMemberReader(MemberReader source)
-
-
Method Detail
-
isMutable
public boolean isMutable()
Description copied from interface:MemberCache
Returns whether the cache supports removing selected items. If it does, it is valid to call theMemberCache.removeMember(Object)
andMemberCache.removeMemberAndDescendants(Object)
methods.REVIEW: remove isMutable and move removeMember and removeMemberAndDescendants to new interface MutableMemberCache
- Specified by:
isMutable
in interfaceMemberCache
- Returns:
- true if the cache supports removing selected items.
-
removeMember
public RolapMember removeMember(Object key)
Description copied from interface:MemberCache
Removes theRolapMember
with a given key from the cache. Returns the previous member with that key, or null. Optional operation: seeMemberCache.isMutable()
.- Specified by:
removeMember
in interfaceMemberCache
- Parameters:
key
- cache key, created byMemberCache.makeKey(mondrian.rolap.RolapMember, java.lang.Object)
- Returns:
- previous member with that key, or null
-
removeMemberAndDescendants
public RolapMember removeMemberAndDescendants(Object key)
Description copied from interface:MemberCache
Removes the designatedRolapMember
and all its descendants. Returns the previous member with that key, or null. Optional operation: seeMemberCache.isMutable()
.- Specified by:
removeMemberAndDescendants
in interfaceMemberCache
- Parameters:
key
- cache key, created byMemberCache.makeKey(mondrian.rolap.RolapMember, java.lang.Object)
- Returns:
- previous member with that key, or null
-
getHierarchy
public RolapHierarchy getHierarchy()
Description copied from interface:MemberSource
Returns the hierarchy that this source is reading for.- Specified by:
getHierarchy
in interfaceMemberSource
-
setCache
public boolean setCache(MemberCache cache)
Description copied from interface:MemberSource
Sets the cache which thisMemberSource
will write to.Cache-writeback is optional (for example,
SqlMemberSource
supports it, andArrayMemberSource
does not), and the return value from this method indicates whether this object supports it.If this method returns
true
, theMemberSource.getMembers()
,MemberSource.getRootMembers()
andMemberSource.getMemberChildren(mondrian.rolap.RolapMember, java.util.List<mondrian.rolap.RolapMember>)
methods must write to the cache, in addition to returning members as a return value.- Specified by:
setCache
in interfaceMemberSource
- Parameters:
cache
- TheMemberCache
which the caller would like thisMemberSource
to write to.- Returns:
- Whether this
MemberSource
supports cache-writeback.
-
makeKey
public Object makeKey(RolapMember parent, Object key)
Description copied from interface:MemberCache
Creates a key with which toMemberCache.getMember(Object)
orMemberCache.putMember(Object, RolapMember)
theRolapMember
with a given parent and key.- Specified by:
makeKey
in interfaceMemberCache
- Parameters:
parent
- Parent memberkey
- Key of member within parent- Returns:
- key with which to address this member in the cache
-
getMember
public RolapMember getMember(Object key)
Description copied from interface:MemberCache
Retrieves theRolapMember
with a given key.- Specified by:
getMember
in interfaceMemberCache
- Parameters:
key
- cache key, created byMemberCache.makeKey(mondrian.rolap.RolapMember, java.lang.Object)
- Returns:
- member with a given cache key
-
getMember
public RolapMember getMember(Object key, boolean mustCheckCacheStatus)
Description copied from interface:MemberCache
Retrieves theRolapMember
with a given key.- Specified by:
getMember
in interfaceMemberCache
- Parameters:
key
- cache key, created byMemberCache.makeKey(mondrian.rolap.RolapMember, java.lang.Object)
mustCheckCacheStatus
- Iftrue
, do not check cache status- Returns:
- member with a given cache key
-
putMember
public Object putMember(Object key, RolapMember value)
Description copied from interface:MemberCache
Replaces theRolapMember
with a given key and returns the previous member if any.- Specified by:
putMember
in interfaceMemberCache
- Parameters:
key
- cache key, created byMemberCache.makeKey(mondrian.rolap.RolapMember, java.lang.Object)
value
- new member- Returns:
- Previous member with that key, or null.
-
getMembers
public List<RolapMember> getMembers()
Description copied from interface:MemberSource
Returns all members of this hierarchy, sorted by ordinal.If this object
supports cache-writeaback
, also writes these members to the cache.- Specified by:
getMembers
in interfaceMemberSource
-
getRootMembers
public List<RolapMember> getRootMembers()
Description copied from interface:MemberSource
Returns all members of this hierarchy which do not have a parent, sorted by ordinal.If this object
supports cache-writeback
, also writes these members to the cache.- Specified by:
getRootMembers
in interfaceMemberSource
- Returns:
List
ofRolapMember
s
-
getMembersInLevel
public List<RolapMember> getMembersInLevel(RolapLevel level)
Description copied from interface:MemberReader
Returns all of the members inlevel
whose ordinal lies betweenstartOrdinal
andendOrdinal
.If this object
supports cache-writeback
, also writes these members to the cache.- Specified by:
getMembersInLevel
in interfaceMemberReader
- Returns:
List
ofRolapMember
-
getMembersInLevel
public List<RolapMember> getMembersInLevel(RolapLevel level, TupleConstraint constraint)
Description copied from interface:MemberReader
Returns the members in the given Level, optionally applying a constraint.- Specified by:
getMembersInLevel
in interfaceMemberReader
- Parameters:
level
- Levelconstraint
- Constraint- Returns:
- list of members
-
getMemberByKey
public RolapMember getMemberByKey(RolapLevel level, List<Comparable> keyValues)
Description copied from interface:MemberReader
Looks up a member by its key value.- Specified by:
getMemberByKey
in interfaceMemberReader
- Parameters:
level
- LevelkeyValues
- Key values- Returns:
- Member, or null
-
getMemberChildren
public void getMemberChildren(RolapMember parentMember, List<RolapMember> children)
Description copied from interface:MemberSource
Writes all childrenparentMember
tochildren
.If this object
supports cache-writeback
, also writes these members to the cache.- Specified by:
getMemberChildren
in interfaceMemberSource
-
getMemberChildren
public Map<? extends Member,Access> getMemberChildren(RolapMember parentMember, List<RolapMember> children, MemberChildrenConstraint constraint)
Description copied from interface:MemberReader
Populates a list of the children of a Member, optionally applying a constraint.- Specified by:
getMemberChildren
in interfaceMemberReader
- Parameters:
parentMember
- Members whose children to findchildren
- List to populate with membersconstraint
- Constraint- Returns:
- After populating the list passed as an argument,
this method returns a map of the members it just populated
along with the Access information applicable. If no access
control applies to the member, the map will contain
null
values.
-
getMemberChildren
public void getMemberChildren(List<RolapMember> parentMembers, List<RolapMember> children)
Description copied from interface:MemberSource
Returns all members which are a child of one of the members inparentMembers
, sorted by ordinal.If this object
supports cache-writeaback
, also writes these members to the cache.- Specified by:
getMemberChildren
in interfaceMemberSource
-
getMemberChildren
public Map<? extends Member,Access> getMemberChildren(List<RolapMember> parentMembers, List<RolapMember> children, MemberChildrenConstraint constraint)
Description copied from interface:MemberReader
Populates a list of the children of a given set of Members, optionally applying a constraint.- Specified by:
getMemberChildren
in interfaceMemberReader
- Parameters:
parentMembers
- List of members whose children to findchildren
- List to populate with membersconstraint
- Constraint- Returns:
- After populating the list passed as an argument,
this method returns a map of the members it just populated
along with the Access information applicable. If no access
control applies to the member, the map will contain
null
values.
-
lookupMember
public RolapMember lookupMember(List<Id.Segment> uniqueNameParts, boolean failIfNotFound)
Description copied from interface:MemberSource
Finds a member based upon its unique name.- Specified by:
lookupMember
in interfaceMemberSource
-
getChildrenFromCache
public List<RolapMember> getChildrenFromCache(RolapMember member, MemberChildrenConstraint constraint)
Description copied from interface:MemberCache
Returns the children ofmember
if they are currently in the cache, otherwise returns null.The children may be garbage collected as soon as the returned list may be garbage collected.
- Specified by:
getChildrenFromCache
in interfaceMemberCache
- Parameters:
member
- the parent memberconstraint
- the condition that was used when the members were fetched. May be null for all members (no constraint)- Returns:
- list of children, or null if not in cache
-
getLevelMembersFromCache
public List<RolapMember> getLevelMembersFromCache(RolapLevel level, TupleConstraint constraint)
Description copied from interface:MemberCache
Returns the members oflevel
if they are currently in the cache, otherwise returns null.The members may be garbage collected as soon as the returned list may be garbage collected.
- Specified by:
getLevelMembersFromCache
in interfaceMemberCache
- Parameters:
level
- the level whose members should be fetchedconstraint
- the condition that was used when the members were fetched. May be null for all members (no constraint)- Returns:
- members of level, or null if not in cache
-
putChildren
public void putChildren(RolapMember member, MemberChildrenConstraint constraint, List<RolapMember> children)
Description copied from interface:MemberCache
- Specified by:
putChildren
in interfaceMemberCache
- Parameters:
member
- the parent memberconstraint
- the condition that was used when the members were fetched. May be null for all members (no constraint)children
- list of children
-
putChildren
public void putChildren(RolapLevel level, TupleConstraint constraint, List<RolapMember> children)
Description copied from interface:MemberCache
- Specified by:
putChildren
in interfaceMemberCache
- Parameters:
level
- the parent levelconstraint
- the condition that was used when the members were fetched. May be null for all members (no constraint)children
- list of children
-
getLeadMember
public RolapMember getLeadMember(RolapMember member, int n)
Description copied from interface:MemberReader
Returns the membern
aftermember
in the same level (or before, ifn
is negative). ReturnsHierarchy.getNullMember()
if we run off the beginning or end of the level.- Specified by:
getLeadMember
in interfaceMemberReader
-
getMemberRange
public void getMemberRange(RolapLevel level, RolapMember startMember, RolapMember endMember, List<RolapMember> list)
Description copied from interface:MemberReader
Writes all members betweenstartMember
andendMember
intolist
.- Specified by:
getMemberRange
in interfaceMemberReader
-
getMemberCount
public int getMemberCount()
Description copied from interface:MemberSource
Returns an estimate of number of members in this hierarchy.- Specified by:
getMemberCount
in interfaceMemberSource
-
compare
public int compare(RolapMember m1, RolapMember m2, boolean siblingsAreEqual)
Description copied from interface:MemberReader
Compares two members according to their order in a prefix ordered traversal. IfsiblingsAreEqual
, then two members with the same parent will compare equal.- Specified by:
compare
in interfaceMemberReader
- Returns:
- less than zero if m1 occurs before m2,
greater than zero if m1 occurs after m2,
zero if m1 is equal to m2, or if
siblingsAreEqual
and m1 and m2 have the same parent
-
getMemberBuilder
public TupleReader.MemberBuilder getMemberBuilder()
- Specified by:
getMemberBuilder
in interfaceMemberReader
-
getDefaultMember
public RolapMember getDefaultMember()
- Specified by:
getDefaultMember
in interfaceMemberReader
-
getLevelMemberCount
public int getLevelMemberCount(RolapLevel level)
Description copied from interface:MemberReader
Returns the number of members in this level.- Specified by:
getLevelMemberCount
in interfaceMemberReader
- Parameters:
level
- Level- Returns:
- number of members in level
-
desubstitute
public RolapMember desubstitute(RolapMember member)
Description copied from interface:MemberReader
Returns the member which was substituted. If member is null, returns null.This method is called whenever the caller passes a member into a method and needs to be passed to a method on the wrapped member reader. You could say that it translates 'from caller space'.
- Specified by:
desubstitute
in interfaceMemberReader
- Parameters:
member
- Member- Returns:
- Internal member
-
substitute
public RolapMember substitute(RolapMember member)
Description copied from interface:MemberReader
Substitutes a given member. If member is null, returns null.This method is called whenever a member is returned from the wrapped member reader and is to be returned to the caller. You could say that it translates 'to caller space'.
- Specified by:
substitute
in interfaceMemberReader
- Parameters:
member
- Member- Returns:
- Substitute member
-
getMemberParent
public RolapMember getMemberParent(RolapMember member)
- Specified by:
getMemberParent
in interfaceMemberReader
-
readMemberChildren
protected void readMemberChildren(List<RolapMember> members, List<RolapMember> result, MemberChildrenConstraint constraint)
Reads the children ofmember
intoresult
.- Parameters:
result
- Children are written here, in ordermembers
- Members whose children to readconstraint
- restricts the returned members if possible (optional optimization)
-
-