From 320f105c02b1a8550357a28a26bb5b01c1775060 Mon Sep 17 00:00:00 2001 From: Tatyana Valkevych Date: Tue, 14 Apr 2015 16:11:50 +0000 Subject: [PATCH] Merged HEAD-BUG-FIX (5.1/Cloud) to HEAD (5.1/Cloud) 101747: Merged 5.0.N (5.0.2) to HEAD-BUG-FIX (5.1/Cloud) 101635: Merged V4.2-BUG-FIX (4.2.5) to 5.0.N (5.0.2) 101289: Reverse merged V4.2-BUG-FIX (4.2.5) << Brought back the changes >> 98889: Reverse merged V4.1-BUG-FIX (4.1.10) << Caused a performance problem found in 5.0.1 testing >> Merged V4.1-BUG-FIX (4.1.10) to V4.2-BUG-FIX (4.2.5) 93762: Fix for MNT-13198 BM-0012: Run v420b1494_01: (CMIS) GetSites is Slow - use the bridge table to list sites. 93802: Fix for MNT-13198 BM-0012: Run v420b1494_01: (CMIS) GetSites is Slow - use hasSite to check for existence and fix person lookup case sensitivity configuration 98886: Reverse merged V4.1-BUG-FIX (4.1.10) << Original commits for this issue caused a performance problem found in 5.0.1 testing >> 98334: Merged DEV (4.2.5) to V4.2-BUG-FIX (4.2.5) 98326: MNT-13198: BM-0012: Run v420b1494_01: (CMIS) GetSites is Slow - Changed the PersonSitesRelation to use a faster API (SiteServiceImpl.listSiteMemberships(String, int)). 98452: MNT-13198: BM-0012: Run v420b1494_01: (CMIS) GetSites is Slow - Corrected the solution to fix the build failures. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@101849 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../org/alfresco/rest/api/impl/SitesImpl.java | 48 ++++++++++++++----- 1 file changed, 35 insertions(+), 13 deletions(-) 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)