Search in sources :

Example 6 with Role

use of mondrian.olap.Role in project mondrian by pentaho.

the class RestrictedMemberReaderTest method testDefaultMember_multiRootMeasure.

public void testDefaultMember_multiRootMeasure() {
    RolapHierarchy hierarchy = Mockito.mock(RolapHierarchy.class);
    MemberReader delegateMemberReader = Mockito.mock(MemberReader.class);
    HierarchyAccess roleAccess = Mockito.mock(HierarchyAccess.class);
    Role role = Mockito.mock(Role.class);
    RolapMember member0 = mockMember();
    RolapMember member1 = mockMember();
    RolapMember member2 = mockMember();
    List<RolapMember> rootMembers = Arrays.asList(new RolapMember[] { member0, member1, member2 });
    RolapMember hierDefaultMember = member1;
    Mockito.doReturn(true).when(member0).isMeasure();
    Mockito.doReturn(true).when(member1).isMeasure();
    Mockito.doReturn(true).when(member1).isMeasure();
    Mockito.doReturn(roleAccess).when(role).getAccessDetails(Mockito.any(Hierarchy.class));
    Mockito.doReturn(hierarchy).when(delegateMemberReader).getHierarchy();
    Mockito.doReturn(hierDefaultMember).when(hierarchy).getDefaultMember();
    rmr = Mockito.spy(new RestrictedMemberReader(delegateMemberReader, role));
    Mockito.doReturn(rootMembers).when(rmr).getRootMembers();
    Mockito.doReturn(Access.CUSTOM).when(roleAccess).getAccess(member0);
    Mockito.doReturn(Access.NONE).when(roleAccess).getAccess(member1);
    Mockito.doReturn(Access.NONE).when(roleAccess).getAccess(member2);
    Assert.assertSame("on Access C-N-N", member0, rmr.getDefaultMember());
    Mockito.doReturn(Access.NONE).when(roleAccess).getAccess(member0);
    Mockito.doReturn(Access.NONE).when(roleAccess).getAccess(member1);
    Mockito.doReturn(Access.CUSTOM).when(roleAccess).getAccess(member2);
    Assert.assertSame("on Access N-N-C", member2, rmr.getDefaultMember());
    Mockito.doReturn(Access.CUSTOM).when(roleAccess).getAccess(member0);
    Mockito.doReturn(Access.CUSTOM).when(roleAccess).getAccess(member1);
    Mockito.doReturn(Access.CUSTOM).when(roleAccess).getAccess(member2);
    Assert.assertSame("on Access C-C-C", hierDefaultMember, rmr.getDefaultMember());
    Mockito.doReturn(Access.CUSTOM).when(roleAccess).getAccess(member0);
    Mockito.doReturn(Access.NONE).when(roleAccess).getAccess(member1);
    Mockito.doReturn(Access.CUSTOM).when(roleAccess).getAccess(member2);
    Assert.assertSame("on Access C-N-C", member0, rmr.getDefaultMember());
    Mockito.doReturn(Access.NONE).when(roleAccess).getAccess(anyRolapMember());
    Assert.assertTrue("on Access.NONE", rmr.getDefaultMember() instanceof MultiCardinalityDefaultMember);
}
Also used : Role(mondrian.olap.Role) Hierarchy(mondrian.olap.Hierarchy) MultiCardinalityDefaultMember(mondrian.rolap.RestrictedMemberReader.MultiCardinalityDefaultMember) HierarchyAccess(mondrian.olap.Role.HierarchyAccess)

Example 7 with Role

use of mondrian.olap.Role in project mondrian by pentaho.

the class RestrictedMemberReaderTest method testDefaultMember_multiRoot.

public void testDefaultMember_multiRoot() {
    RolapHierarchy hierarchy = Mockito.mock(RolapHierarchy.class);
    MemberReader delegateMemberReader = Mockito.mock(MemberReader.class);
    HierarchyAccess roleAccess = Mockito.mock(HierarchyAccess.class);
    Role role = Mockito.mock(Role.class);
    RolapMember member0 = mockMember();
    RolapMember member1 = mockMember();
    RolapMember member2 = mockMember();
    List<RolapMember> rootMembers = Arrays.asList(new RolapMember[] { member0, member1, member2 });
    RolapMember hierDefaultMember = member1;
    Mockito.doReturn(roleAccess).when(role).getAccessDetails(Mockito.any(Hierarchy.class));
    Mockito.doReturn(hierarchy).when(delegateMemberReader).getHierarchy();
    Mockito.doReturn(hierDefaultMember).when(hierarchy).getDefaultMember();
    rmr = Mockito.spy(new RestrictedMemberReader(delegateMemberReader, role));
    Mockito.doReturn(rootMembers).when(rmr).getRootMembers();
    Mockito.doReturn(Access.CUSTOM).when(roleAccess).getAccess(member0);
    Mockito.doReturn(Access.NONE).when(roleAccess).getAccess(member1);
    Mockito.doReturn(Access.NONE).when(roleAccess).getAccess(member2);
    Assert.assertSame("on Access C-N-N", member0, rmr.getDefaultMember());
    Mockito.doReturn(Access.NONE).when(roleAccess).getAccess(member0);
    Mockito.doReturn(Access.NONE).when(roleAccess).getAccess(member1);
    Mockito.doReturn(Access.CUSTOM).when(roleAccess).getAccess(member2);
    Assert.assertSame("on Access N-N-C", member2, rmr.getDefaultMember());
    Mockito.doReturn(Access.CUSTOM).when(roleAccess).getAccess(member0);
    Mockito.doReturn(Access.CUSTOM).when(roleAccess).getAccess(member1);
    Mockito.doReturn(Access.CUSTOM).when(roleAccess).getAccess(member2);
    Assert.assertSame("on Access C-C-C", hierDefaultMember, rmr.getDefaultMember());
    Mockito.doReturn(Access.CUSTOM).when(roleAccess).getAccess(member0);
    Mockito.doReturn(Access.NONE).when(roleAccess).getAccess(member1);
    Mockito.doReturn(Access.CUSTOM).when(roleAccess).getAccess(member2);
    Assert.assertTrue("on Access C-N-C", rmr.getDefaultMember() instanceof MultiCardinalityDefaultMember);
    Mockito.doReturn(Access.NONE).when(roleAccess).getAccess(anyRolapMember());
    Assert.assertTrue("on Access.NONE", rmr.getDefaultMember() instanceof MultiCardinalityDefaultMember);
}
Also used : Role(mondrian.olap.Role) Hierarchy(mondrian.olap.Hierarchy) MultiCardinalityDefaultMember(mondrian.rolap.RestrictedMemberReader.MultiCardinalityDefaultMember) HierarchyAccess(mondrian.olap.Role.HierarchyAccess)

Example 8 with Role

use of mondrian.olap.Role in project mondrian by pentaho.

the class MondrianOlap4jSchema method getSharedDimensions.

public NamedList<Dimension> getSharedDimensions() throws OlapException {
    final MondrianOlap4jConnection olap4jConnection = olap4jCatalog.olap4jDatabaseMetaData.olap4jConnection;
    final SortedSet<MondrianOlap4jDimension> dimensions = new TreeSet<MondrianOlap4jDimension>(new Comparator<MondrianOlap4jDimension>() {

        public int compare(MondrianOlap4jDimension o1, MondrianOlap4jDimension o2) {
            return o1.getName().compareTo(o2.getName());
        }
    });
    final Role role = olap4jConnection.getMondrianConnection().getRole();
    for (Hierarchy hierarchy : schema.getSharedHierarchies()) {
        if (role.canAccess(hierarchy)) {
            dimensions.add(olap4jConnection.toOlap4j(hierarchy.getDimension()));
        }
    }
    NamedList<MondrianOlap4jDimension> list = new NamedListImpl<MondrianOlap4jDimension>();
    list.addAll(dimensions);
    return Olap4jUtil.cast(list);
}
Also used : Role(mondrian.olap.Role) Hierarchy(mondrian.olap.Hierarchy)

Example 9 with Role

use of mondrian.olap.Role in project mondrian by pentaho.

the class SqlConstraintUtils method getRoleConstraintMembers.

public static Map<Level, List<RolapMember>> getRoleConstraintMembers(SchemaReader schemaReader, Member[] members) {
    // LinkedHashMap keeps insert-order
    Map<Level, List<RolapMember>> roleMembers = new LinkedHashMap<Level, List<RolapMember>>();
    Role role = schemaReader.getRole();
    for (Member member : members) {
        if (member instanceof LimitedRollupMember || member instanceof MultiCardinalityDefaultMember) {
            // iterate relevant levels to get accessible members
            List<Level> hierarchyLevels = schemaReader.getHierarchyLevels(member.getHierarchy());
            for (Level affectedLevel : hierarchyLevels) {
                List<RolapMember> slicerMembers = new ArrayList<RolapMember>();
                boolean hasCustom = false;
                List<Member> availableMembers = schemaReader.getLevelMembers(affectedLevel, false);
                for (Member availableMember : availableMembers) {
                    if (!availableMember.isAll()) {
                        slicerMembers.add((RolapMember) availableMember);
                    }
                    hasCustom |= role.getAccess(availableMember) == Access.CUSTOM;
                }
                if (!slicerMembers.isEmpty()) {
                    roleMembers.put(affectedLevel, slicerMembers);
                }
                if (!hasCustom) {
                    // we don't have partial access, no need to go deeper
                    break;
                }
            }
        }
    }
    return roleMembers;
}
Also used : ArrayList(java.util.ArrayList) LinkedHashMap(java.util.LinkedHashMap) LimitedRollupMember(mondrian.rolap.RolapHierarchy.LimitedRollupMember) Role(mondrian.olap.Role) MultiCardinalityDefaultMember(mondrian.rolap.RestrictedMemberReader.MultiCardinalityDefaultMember) Level(mondrian.olap.Level) List(java.util.List) FilteredIterableList(mondrian.util.FilteredIterableList) ArrayList(java.util.ArrayList) TupleList(mondrian.calc.TupleList) Member(mondrian.olap.Member) LimitedRollupMember(mondrian.rolap.RolapHierarchy.LimitedRollupMember) MultiCardinalityDefaultMember(mondrian.rolap.RestrictedMemberReader.MultiCardinalityDefaultMember)

Aggregations

Role (mondrian.olap.Role)9 Hierarchy (mondrian.olap.Hierarchy)8 HierarchyAccess (mondrian.olap.Role.HierarchyAccess)7 MultiCardinalityDefaultMember (mondrian.rolap.RestrictedMemberReader.MultiCardinalityDefaultMember)5 Level (mondrian.olap.Level)3 Dimension (mondrian.olap.Dimension)2 Schema (mondrian.olap.Schema)2 ArrayList (java.util.ArrayList)1 LinkedHashMap (java.util.LinkedHashMap)1 List (java.util.List)1 TupleList (mondrian.calc.TupleList)1 Member (mondrian.olap.Member)1 LimitedRollupMember (mondrian.rolap.RolapHierarchy.LimitedRollupMember)1 FilteredIterableList (mondrian.util.FilteredIterableList)1