public List<RolapMember> getRootMembers() {
   int topLevelDepth = hierarchyAccess.getTopLevelDepth();
   if (topLevelDepth > 0) {
     RolapLevel topLevel = (RolapLevel) getHierarchy().getLevels()[topLevelDepth];
     final List<RolapMember> memberList = getMembersInLevel(topLevel, 0, Integer.MAX_VALUE);
     if (memberList.isEmpty()) {
       throw MondrianResource.instance()
           .HierarchyHasNoAccessibleMembers
           .ex(getHierarchy().getUniqueName());
     }
     return memberList;
   }
   return super.getRootMembers();
 }
 public List<RolapMember> getMembersInLevel(
     RolapLevel level, int startOrdinal, int endOrdinal, TupleConstraint constraint) {
   if (hierarchyAccess != null) {
     final int depth = level.getDepth();
     if (depth < hierarchyAccess.getTopLevelDepth()) {
       return Collections.emptyList();
     }
     if (depth > hierarchyAccess.getBottomLevelDepth()) {
       return Collections.emptyList();
     }
   }
   final List<RolapMember> membersInLevel =
       memberReader.getMembersInLevel(level, startOrdinal, endOrdinal, constraint);
   List<RolapMember> filteredMembers = new ArrayList<RolapMember>();
   filterMembers(membersInLevel, filteredMembers);
   return filteredMembers;
 }