public List<Level> getHierarchyLevels(Hierarchy hierarchy) { assert hierarchy != null; final Role.HierarchyAccess hierarchyAccess = role.getAccessDetails(hierarchy); final Level[] levels = hierarchy.getLevels(); if (hierarchyAccess == null) { return Arrays.asList(levels); } Level topLevel = levels[hierarchyAccess.getTopLevelDepth()]; Level bottomLevel = levels[hierarchyAccess.getBottomLevelDepth()]; List<Level> restrictedLevels = Arrays.asList(levels).subList( topLevel.getDepth(), bottomLevel.getDepth() + 1); assert restrictedLevels.size() >= 1 : "postcondition"; return restrictedLevels; }
public List<RolapMember> getMembersInLevel( RolapLevel level, 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, constraint); List<RolapMember> filteredMembers = new ArrayList<RolapMember>(); filterMembers(membersInLevel, filteredMembers); return filteredMembers; }
public int getTopLevelDepth() { if (!isTopLeveRestricted()) { // We don't restrict the top level. // Return 0 for root. return 0; } int access = Integer.MAX_VALUE; for (HierarchyAccess hierarchyAccess : list) { if (hierarchyAccess.getTopLevelDepth() == 0) { // No restrictions. Skip. continue; } access = Math.min( access, hierarchyAccess.getTopLevelDepth()); if (access == 0) { break; } } return access; }
public int getMemberDepth(Member member) { final Role.HierarchyAccess hierarchyAccess = role.getAccessDetails(member.getHierarchy()); if (hierarchyAccess != null) { final int memberDepth = member.getLevel().getDepth(); final int topLevelDepth = hierarchyAccess.getTopLevelDepth(); return memberDepth - topLevelDepth; } else if (((RolapLevel) member.getLevel()).isParentChild()) { // For members of parent-child hierarchy, members in the same level // may have different depths. int depth = 0; for (Member m = member.getParentMember(); m != null; m = m.getParentMember()) { depth++; } return depth; } else { return member.getLevel().getDepth(); } }
public List<RolapMember> getRootMembers() { int topLevelDepth = hierarchyAccess.getTopLevelDepth(); if (topLevelDepth > 0) { RolapLevel topLevel = (RolapLevel) getHierarchy().getLevels()[topLevelDepth]; final List<RolapMember> memberList = getMembersInLevel(topLevel); if (memberList.isEmpty()) { throw MondrianResource.instance() .HierarchyHasNoAccessibleMembers.ex( getHierarchy().getUniqueName()); } return memberList; } return super.getRootMembers(); }
public int getTopLevelDepth() { return hierarchyAccess.getTopLevelDepth(); }
private boolean isTopLeveRestricted() { for (HierarchyAccess hierarchyAccess : list) { if (hierarchyAccess.getTopLevelDepth() > 0) { return true; } } return false; }
@Override public int getTopLevelDepth() { if (topLevelDepth == null) { topLevelDepth = hierarchyAccess.getTopLevelDepth(); } return topLevelDepth; }
public List<Member> getHierarchyRootMembers(Hierarchy hierarchy) { final Role.HierarchyAccess hierarchyAccess = role.getAccessDetails(hierarchy); final Level[] levels = hierarchy.getLevels(); final Level firstLevel; if (hierarchyAccess == null) { firstLevel = levels[0]; } else { firstLevel = levels[hierarchyAccess.getTopLevelDepth()]; } return getLevelMembers(firstLevel, true); }
private int getDepthOffset() { final Role.HierarchyAccess accessDetails = olap4jSchema.olap4jCatalog.olap4jDatabaseMetaData.olap4jConnection .getMondrianConnection2().getRole().getAccessDetails( level.getHierarchy()); if (accessDetails == null) { return 0; } return accessDetails.getTopLevelDepth(); }