Index: common/tool-lib/src/java/org/theospi/portfolio/security/tool/AudienceTool.java =================================================================== --- common/tool-lib/src/java/org/theospi/portfolio/security/tool/AudienceTool.java (revision 990) +++ common/tool-lib/src/java/org/theospi/portfolio/security/tool/AudienceTool.java (working copy) @@ -99,6 +99,8 @@ private String PRESENTATION_VIEWERS = "PRESENTATION_VIEWERS"; + private static int maxMembersPerRole = ServerConfigurationService.getInt("osp.share.max.users",0); + private List selectedRolesFilter = null; private List selectedGroupsFilter = null; private PagingList browseUsers = null; @@ -143,12 +145,51 @@ /*************************************************************************/ + public class MemberSort implements Comparator{ + + public int compare(SelectItem o1, SelectItem o2) { + String n1 = o1.getLabel(); + String n2 = o2.getLabel(); + int i1 = n1.lastIndexOf(" "); + int i2 = n2.lastIndexOf(" "); + if (i1 > 0) + n1 = n1.substring(i1 + 1) + " " + n1.substring(0, i1); + if (i2 > 0) + n2 = n2.substring(i2 + 1) + " " + n2.substring(0, i2); + + return n1.compareTo(n2); + } + } + protected List getMembersList() { - Set members = getSite().getMembers(); - List memberList = new ArrayList(); + Set members = (Set)getSite().getMembers(); + + // break into sublists by role; kill any with too many members + Map> memberMap = new HashMap>(); + + // build hash role, list of members in role for (Iterator i = members.iterator(); i.hasNext();) { Member member = (Member) i.next(); + Role role = member.getRole(); + if (memberMap.get(role) == null) + memberMap.put(role, new ArrayList()); + memberMap.get(role).add(member); + } + // Build list of just the ones we want + // Use TreeSet because it's sorted + members = new HashSet(); + + // now add back all members from lists that are + // small enough + for (List mlist : memberMap.values()) + if (maxMembersPerRole == 0 || mlist.size() <= maxMembersPerRole) + members.addAll(mlist); + + List memberList = new ArrayList(); + for (Iterator i = members.iterator(); i.hasNext();) { + Member member = (Member) i.next(); + Agent agent = getAgentManager().getAgent((member.getUserId())); //Check for a null agent since the site.getMembers() will return member records for deleted users if (agent != null && agent.getId() != null) { @@ -157,6 +198,8 @@ } } + Collections.sort(memberList, new MemberSort()); + return memberList; } @@ -597,6 +640,17 @@ null, null, null, SiteService.SortType.TITLE_ASC, null); + // put the current site first + if (siteList.remove(getSite())) { + // Generic lists don't have add(item, 0). This is probably + // an arraylist, which does, but I'm not sure I want to + // depend upon that. + List oldList = siteList; + siteList = new ArrayList(); + siteList.add(getSite()); + siteList.addAll(oldList); + } + for (Iterator siteIt = siteList.iterator(); siteIt.hasNext();) { Site site = (Site)siteIt.next(); Set roles = site.getRoles();