Index: src/java/org/sakaiproject/roster/impl/SakaiProxyImpl.java =================================================================== --- src/java/org/sakaiproject/roster/impl/SakaiProxyImpl.java (revision 314607) +++ src/java/org/sakaiproject/roster/impl/SakaiProxyImpl.java (working copy) @@ -289,12 +289,14 @@ public class SakaiProxyImpl implements SakaiProxy return null; } + Map userMap = getUserMap(membership); + Collection groups = site.getGroups(); for (Member member : membership) { try { RosterMember rosterMember = - getRosterMember(member, site, includeConnectionStatus, userId); + getRosterMember(userMap, groups, member, site, includeConnectionStatus, userId); rosterMembers.add(rosterMember); @@ -311,6 +313,27 @@ public class SakaiProxyImpl implements SakaiProxy } + private Map getUserMap(Set members) { + Map userMap = new HashMap(); + Set userIds = new HashSet(); + // Build a map of userId to role + for(Iterator iter = members.iterator(); iter.hasNext();) + { + Member member = iter.next(); + if (member.isActive()) { + userIds.add(member.getUserId()); + } + } + // Get the user objects + List users = userDirectoryService.getUsers(userIds); + for (Iterator iter = users.iterator(); iter.hasNext();) + { + User user = iter.next(); + userMap.put(user.getId(), user); + } + return userMap; + } + private Map getMembershipMapped(String siteId, String groupId, boolean filtered) { @@ -341,11 +364,13 @@ public class SakaiProxyImpl implements SakaiProxy return null; } + Map userMap = getUserMap(membership); + Collection groups = site.getGroups(); for (Member member : membership) { try { - RosterMember rosterMember = getRosterMember(member, site, false, userId); + RosterMember rosterMember = getRosterMember(userMap, groups, member, site, false, userId); rosterMembers.put(rosterMember.getEid(), rosterMember); @@ -504,12 +529,15 @@ public class SakaiProxyImpl implements SakaiProxy return membership; } - private RosterMember getRosterMember(Member member, Site site, + private RosterMember getRosterMember(Map userMap, Collection groups, Member member, Site site, boolean includeConnectionStatus, String currentUserId) throws UserNotDefinedException { String userId = member.getUserId(); - User user = userDirectoryService.getUser(userId); + User user = userMap.get(userId); + if (user==null) { + throw new UserNotDefinedException(userId); + } RosterMember rosterMember = new RosterMember(userId); rosterMember.setEid(user.getEid()); @@ -520,14 +548,13 @@ public class SakaiProxyImpl implements SakaiProxy rosterMember.setDisplayName(user.getDisplayName()); rosterMember.setSortName(user.getSortName()); - Collection groups = site.getGroupsWithMember(userId); - Iterator groupIterator = groups.iterator(); - - while (groupIterator.hasNext()) { - - Group group = groupIterator.next(); + for (Group group : groups) + { + if (group.getMember(userId)!=null) + { rosterMember.addGroup(group.getId(), group.getTitle()); } + } if (true == includeConnectionStatus && connectionsLogic != null) { rosterMember.setConnectionStatus(connectionsLogic