diff --git a/source/java/org/alfresco/rest/api/impl/SitesImpl.java b/source/java/org/alfresco/rest/api/impl/SitesImpl.java index 890a26fe66..fd680bb6d5 100644 --- a/source/java/org/alfresco/rest/api/impl/SitesImpl.java +++ b/source/java/org/alfresco/rest/api/impl/SitesImpl.java @@ -415,22 +415,44 @@ public class SitesImpl implements Sites personId = people.validatePerson(personId); PagingRequest pagingRequest = Util.getPagingRequest(paging); + + final Collator collator = Collator.getInstance(); + final Set sortedSiteMembers = new TreeSet(new Comparator() + { + @Override + public int compare(SiteMembership o1, SiteMembership o2) + { + return collator.compare(o1.getSiteInfo().getTitle(), o2.getSiteInfo().getTitle()); + } + }); + + List siteMembers = siteService.listSiteMemberships (personId, -1); + int totalSize = siteMembers.size(); + sortedSiteMembers.addAll(siteMembers); + PageDetails pageDetails = PageDetails.getPageDetails(pagingRequest, totalSize); + List ret = new ArrayList(totalSize); + + Iterator it = sortedSiteMembers.iterator(); + for(int counter = 0; counter < pageDetails.getEnd() && it.hasNext(); counter++) + { + SiteMembership siteMember = it.next(); - final List> sort = new ArrayList>(); - sort.add(new Pair(SiteService.SortFields.SiteTitle, Boolean.TRUE)); - sort.add(new Pair(SiteService.SortFields.Role, Boolean.TRUE)); + if(counter < pageDetails.getSkipCount()) + { + continue; + } + + if(counter > pageDetails.getEnd() - 1) + { + break; + } - PagingResults results = siteService.listSitesPaged(personId, sort, pagingRequest); - List siteMembers = results.getPage(); - List ret = new ArrayList(siteMembers.size()); - for(SiteMembership siteMember : siteMembers) - { - SiteInfo siteInfo = siteMember.getSiteInfo(); - MemberOfSite memberOfSite = new MemberOfSite(siteInfo.getShortName(), siteInfo.getNodeRef(), siteMember.getRole()); - ret.add(memberOfSite); - } + SiteInfo siteInfo = siteMember.getSiteInfo(); + MemberOfSite memberOfSite = new MemberOfSite(siteInfo.getShortName(), siteInfo.getNodeRef(), siteMember.getRole()); + ret.add(memberOfSite); + } + return CollectionWithPagingInfo.asPaged(paging, ret, pageDetails.hasMoreItems(), null); - return CollectionWithPagingInfo.asPaged(paging, ret, results.hasMoreItems(), null); } public SiteContainer getSiteContainer(String siteId, String containerId)