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);
}
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);
}
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);
}
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;
}
Aggregations