Class SmartMemberReader

  • All Implemented Interfaces:
    MemberReader, MemberSource
    Direct Known Subclasses:
    RolapCubeHierarchy.CacheRolapCubeHierarchyMemberReader

    public class SmartMemberReader
    extends java.lang.Object
    implements MemberReader
    SmartMemberReader implements MemberReader by keeping a cache of members and their children. If a member is 'in cache', there is a list of its children. It also caches the members of levels.

    Synchronization: the MemberReader source must be called from synchronized(this) context - it does not synchronize itself (probably it should).

    Constraints: Member.Children and Level.Members may be constrained by a SqlConstraint object. In this case a subset of all members is returned. These subsets are cached too and the SqlConstraint is part of the cache key. This is used in NON EMPTY context.

    Uniqueness. We need to ensure that there is never more than one RolapMember object representing the same member.

    Since:
    21 December, 2001
    Author:
    jhyde
    • Field Detail

      • source

        protected final MemberReader source
        access to source must be synchronized(this)
      • rootMembers

        protected java.util.List<RolapMember> rootMembers
    • Constructor Detail

      • SmartMemberReader

        SmartMemberReader​(MemberReader source)
      • SmartMemberReader

        SmartMemberReader​(MemberReader source,
                          boolean cacheWriteback)
    • Method Detail

      • 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 interface MemberReader
        Parameters:
        member - Member
        Returns:
        Substitute member
      • 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 interface MemberReader
        Parameters:
        member - Member
        Returns:
        Internal member
      • getMemberByKey

        public RolapMember getMemberByKey​(RolapLevel level,
                                          java.util.List<java.lang.Comparable> keyValues)
        Description copied from interface: MemberReader
        Looks up a member by its key value.
        Specified by:
        getMemberByKey in interface MemberReader
        Parameters:
        level - Level
        keyValues - Key values
        Returns:
        Member, or null
      • checkCacheStatus

        protected void checkCacheStatus()
      • getLevelMemberCount

        public int getLevelMemberCount​(RolapLevel level)
        Description copied from interface: MemberReader
        Returns the number of members in this level.
        Specified by:
        getLevelMemberCount in interface MemberReader
        Parameters:
        level - Level
        Returns:
        number of members in level
      • getMemberChildren

        public java.util.Map<? extends Member,​Access> getMemberChildren​(RolapMember parentMember,
                                                                              java.util.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 interface MemberReader
        Parameters:
        parentMember - Members whose children to find
        children - List to populate with members
        constraint - 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 java.util.Map<? extends Member,​Access> getMemberChildren​(java.util.List<RolapMember> parentMembers,
                                                                              java.util.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 interface MemberReader
        Parameters:
        parentMembers - List of members whose children to find
        children - List to populate with members
        constraint - 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.
      • readMemberChildren

        protected void readMemberChildren​(java.util.List<RolapMember> members,
                                          java.util.List<RolapMember> result,
                                          MemberChildrenConstraint constraint)
        Reads the children of member into cache, and also into result.
        Parameters:
        result - Children are written here, in order
        members - Members whose children to read
        constraint - restricts the returned members if possible (optional optimization)
      • isSorted

        public boolean isSorted​(java.util.List<RolapMember> members)
        Returns true if every element of members is not null and is strictly less than the following element; false otherwise.
      • getMemberCount

        public int getMemberCount()
        Description copied from interface: MemberSource
        Returns an estimate of number of members in this hierarchy.
        Specified by:
        getMemberCount in interface MemberSource
      • 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. If siblingsAreEqual, then two members with the same parent will compare equal.
        Specified by:
        compare in interface MemberReader
        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