Search in sources :

Example 1 with PageDetails

use of org.alfresco.query.PageDetails in project alfresco-remote-api by Alfresco.

the class SitesImpl method getSites.

public CollectionWithPagingInfo<MemberOfSite> getSites(String personId, Parameters parameters) {
    Paging paging = parameters.getPaging();
    personId = people.validatePerson(personId);
    PagingRequest pagingRequest = Util.getPagingRequest(paging);
    // get the sorting options
    List<Pair<? extends Object, SortOrder>> sortPairs = new ArrayList<>(parameters.getSorting().size());
    List<SortColumn> sortCols = parameters.getSorting();
    if ((sortCols != null) && (sortCols.size() > 0)) {
        for (SortColumn sortCol : sortCols) {
            SiteService.SortFields sortProp = SORT_SITE_MEMBERSHIP.get(sortCol.column);
            if (sortProp == null) {
                throw new InvalidArgumentException("Invalid sort field: " + sortCol.column);
            }
            sortPairs.add(new Pair<>(sortProp, (sortCol.asc ? SortOrder.ASCENDING : SortOrder.DESCENDING)));
        }
    } else {
        // default sort order
        sortPairs.add(new Pair<SiteService.SortFields, SortOrder>(SiteService.SortFields.SiteTitle, SortOrder.ASCENDING));
    }
    // get the unsorted list of site memberships
    List<SiteMembership> siteMembers = siteService.listSiteMemberships(personId, 0);
    // sort the list of site memberships
    int totalSize = siteMembers.size();
    final List<SiteMembership> sortedSiteMembers = new ArrayList<>(siteMembers);
    Collections.sort(sortedSiteMembers, new SiteMembershipComparator(sortPairs, SiteMembershipComparator.Type.SITES));
    PageDetails pageDetails = PageDetails.getPageDetails(pagingRequest, totalSize);
    List<MemberOfSite> ret = new ArrayList<>(totalSize);
    List<FilterProp> filterProps = getFilterPropListOfSites(parameters);
    int counter;
    int totalItems = 0;
    Iterator<SiteMembership> it = sortedSiteMembers.iterator();
    for (counter = 0; it.hasNext(); ) {
        SiteMembership siteMember = it.next();
        if (filterProps != null && !includeFilter(siteMember, filterProps)) {
            continue;
        }
        if (counter < pageDetails.getSkipCount()) {
            totalItems++;
            counter++;
            continue;
        }
        if (counter <= pageDetails.getEnd() - 1) {
            SiteInfo siteInfo = siteMember.getSiteInfo();
            MemberOfSite memberOfSite = new MemberOfSite(siteInfo.getShortName(), siteInfo.getNodeRef(), siteMember.getRole());
            ret.add(memberOfSite);
            counter++;
        }
        totalItems++;
    }
    return CollectionWithPagingInfo.asPaged(paging, ret, counter < totalItems, totalItems);
}
Also used : SiteMembershipComparator(org.alfresco.repo.site.SiteMembershipComparator) ArrayList(java.util.ArrayList) SortColumn(org.alfresco.rest.framework.resource.parameters.SortColumn) InvalidArgumentException(org.alfresco.rest.framework.core.exceptions.InvalidArgumentException) SiteMembership(org.alfresco.repo.site.SiteMembership) SiteService(org.alfresco.service.cmr.site.SiteService) Pair(org.alfresco.util.Pair) SiteInfo(org.alfresco.service.cmr.site.SiteInfo) FilterProp(org.alfresco.repo.node.getchildren.FilterProp) Paging(org.alfresco.rest.framework.resource.parameters.Paging) SortOrder(org.alfresco.query.CannedQuerySortDetails.SortOrder) PagingRequest(org.alfresco.query.PagingRequest) PageDetails(org.alfresco.query.PageDetails)

Example 2 with PageDetails

use of org.alfresco.query.PageDetails in project alfresco-remote-api by Alfresco.

the class SitesImpl method getFavouriteSites.

private PagingResults<SiteInfo> getFavouriteSites(String userName, PagingRequest pagingRequest) {
    final Collator collator = Collator.getInstance();
    final Set<SiteInfo> sortedFavouriteSites = new TreeSet<SiteInfo>(new Comparator<SiteInfo>() {

        @Override
        public int compare(SiteInfo o1, SiteInfo o2) {
            return collator.compare(o1.getTitle(), o2.getTitle());
        }
    });
    Map<String, Serializable> prefs = preferenceService.getPreferences(userName, FAVOURITE_SITES_PREFIX);
    for (Entry<String, Serializable> entry : prefs.entrySet()) {
        boolean isFavourite = false;
        Serializable s = entry.getValue();
        if (s instanceof Boolean) {
            isFavourite = (Boolean) s;
        }
        if (isFavourite) {
            String siteShortName = entry.getKey().substring(FAVOURITE_SITES_PREFIX_LENGTH).replace(".favourited", "");
            SiteInfo siteInfo = siteService.getSite(siteShortName);
            if (siteInfo != null) {
                sortedFavouriteSites.add(siteInfo);
            }
        }
    }
    int totalSize = sortedFavouriteSites.size();
    final PageDetails pageDetails = PageDetails.getPageDetails(pagingRequest, totalSize);
    final List<SiteInfo> page = new ArrayList<SiteInfo>(pageDetails.getPageSize());
    Iterator<SiteInfo> it = sortedFavouriteSites.iterator();
    for (int counter = 0; counter < pageDetails.getEnd() && it.hasNext(); counter++) {
        SiteInfo favouriteSite = it.next();
        if (counter < pageDetails.getSkipCount()) {
            continue;
        }
        if (counter > pageDetails.getEnd() - 1) {
            break;
        }
        page.add(favouriteSite);
    }
    return new PagingResults<SiteInfo>() {

        @Override
        public List<SiteInfo> getPage() {
            return page;
        }

        @Override
        public boolean hasMoreItems() {
            return pageDetails.hasMoreItems();
        }

        @Override
        public Pair<Integer, Integer> getTotalResultCount() {
            Integer total = Integer.valueOf(sortedFavouriteSites.size());
            return new Pair<Integer, Integer>(total, total);
        }

        @Override
        public String getQueryExecutionId() {
            return null;
        }
    };
}
Also used : SiteInfo(org.alfresco.service.cmr.site.SiteInfo) Serializable(java.io.Serializable) PagingResults(org.alfresco.query.PagingResults) ArrayList(java.util.ArrayList) FilterPropString(org.alfresco.repo.node.getchildren.FilterPropString) Collator(java.text.Collator) PageDetails(org.alfresco.query.PageDetails) TreeSet(java.util.TreeSet) FilterPropBoolean(org.alfresco.repo.node.getchildren.FilterPropBoolean) Pair(org.alfresco.util.Pair)

Example 3 with PageDetails

use of org.alfresco.query.PageDetails in project alfresco-remote-api by Alfresco.

the class Util method wrapPagingResults.

public static <T> PagingResults<T> wrapPagingResults(Paging paging, Collection<T> result) {
    if (paging == null) {
        throw new InvalidArgumentException("paging object can't be null.");
    }
    if (result == null) {
        result = Collections.emptyList();
    }
    PagingRequest pagingRequest = getPagingRequest(paging);
    final int totalSize = result.size();
    final PageDetails pageDetails = PageDetails.getPageDetails(pagingRequest, totalSize);
    final List<T> page = new ArrayList<>(pageDetails.getPageSize());
    Iterator<T> it = result.iterator();
    for (int counter = 0, end = pageDetails.getEnd(); counter < end && it.hasNext(); counter++) {
        T element = it.next();
        if (counter < pageDetails.getSkipCount()) {
            continue;
        }
        if (counter > end - 1) {
            break;
        }
        page.add(element);
    }
    return new PagingResults<T>() {

        @Override
        public List<T> getPage() {
            return page;
        }

        @Override
        public boolean hasMoreItems() {
            return pageDetails.hasMoreItems();
        }

        @Override
        public Pair<Integer, Integer> getTotalResultCount() {
            Integer total = totalSize;
            return new Pair<>(total, total);
        }

        @Override
        public String getQueryExecutionId() {
            return null;
        }
    };
}
Also used : InvalidArgumentException(org.alfresco.rest.framework.core.exceptions.InvalidArgumentException) PagingResults(org.alfresco.query.PagingResults) ArrayList(java.util.ArrayList) PagingRequest(org.alfresco.query.PagingRequest) CannedQueryPageDetails(org.alfresco.query.CannedQueryPageDetails) PageDetails(org.alfresco.query.PageDetails) Pair(org.alfresco.util.Pair)

Example 4 with PageDetails

use of org.alfresco.query.PageDetails in project alfresco-remote-api by Alfresco.

the class RepoService method getFavouriteSites.

private PagingResults<SiteInfo> getFavouriteSites(String userName, PagingRequest pagingRequest) {
    final Collator collator = Collator.getInstance();
    final Set<SiteInfo> sortedFavouriteSites = new TreeSet<SiteInfo>(new Comparator<SiteInfo>() {

        @Override
        public int compare(SiteInfo o1, SiteInfo o2) {
            return collator.compare(o1.getTitle(), o2.getTitle());
        }
    });
    Map<String, Serializable> prefs = preferenceService.getPreferences(userName, FAVOURITE_SITES_PREFIX);
    for (String key : prefs.keySet()) {
        boolean isFavourite = false;
        Serializable s = prefs.get(key);
        if (s instanceof Boolean) {
            isFavourite = (Boolean) s;
        }
        if (isFavourite) {
            String siteShortName = key.substring(FAVOURITE_SITES_PREFIX_LENGTH);
            SiteInfo siteInfo = siteService.getSite(siteShortName);
            if (siteInfo != null) {
                sortedFavouriteSites.add(siteInfo);
            }
        }
    }
    int totalSize = sortedFavouriteSites.size();
    final PageDetails pageDetails = PageDetails.getPageDetails(pagingRequest, totalSize);
    final List<SiteInfo> page = new ArrayList<SiteInfo>(pageDetails.getPageSize());
    Iterator<SiteInfo> it = sortedFavouriteSites.iterator();
    for (int counter = 0; counter < pageDetails.getEnd() && it.hasNext(); counter++) {
        SiteInfo favouriteSite = it.next();
        if (counter < pageDetails.getSkipCount()) {
            continue;
        }
        if (counter > pageDetails.getEnd() - 1) {
            break;
        }
        page.add(favouriteSite);
    }
    return new PagingResults<SiteInfo>() {

        @Override
        public List<SiteInfo> getPage() {
            return page;
        }

        @Override
        public boolean hasMoreItems() {
            return pageDetails.hasMoreItems();
        }

        @Override
        public Pair<Integer, Integer> getTotalResultCount() {
            Integer total = Integer.valueOf(sortedFavouriteSites.size());
            return new Pair<Integer, Integer>(total, total);
        }

        @Override
        public String getQueryExecutionId() {
            return null;
        }
    };
}
Also used : SiteInfo(org.alfresco.service.cmr.site.SiteInfo) Serializable(java.io.Serializable) PagingResults(org.alfresco.query.PagingResults) ArrayList(java.util.ArrayList) Collator(java.text.Collator) PageDetails(org.alfresco.query.PageDetails) TreeSet(java.util.TreeSet) Pair(org.alfresco.util.Pair)

Aggregations

ArrayList (java.util.ArrayList)4 PageDetails (org.alfresco.query.PageDetails)4 Pair (org.alfresco.util.Pair)4 PagingResults (org.alfresco.query.PagingResults)3 SiteInfo (org.alfresco.service.cmr.site.SiteInfo)3 Serializable (java.io.Serializable)2 Collator (java.text.Collator)2 TreeSet (java.util.TreeSet)2 PagingRequest (org.alfresco.query.PagingRequest)2 InvalidArgumentException (org.alfresco.rest.framework.core.exceptions.InvalidArgumentException)2 CannedQueryPageDetails (org.alfresco.query.CannedQueryPageDetails)1 SortOrder (org.alfresco.query.CannedQuerySortDetails.SortOrder)1 FilterProp (org.alfresco.repo.node.getchildren.FilterProp)1 FilterPropBoolean (org.alfresco.repo.node.getchildren.FilterPropBoolean)1 FilterPropString (org.alfresco.repo.node.getchildren.FilterPropString)1 SiteMembership (org.alfresco.repo.site.SiteMembership)1 SiteMembershipComparator (org.alfresco.repo.site.SiteMembershipComparator)1 Paging (org.alfresco.rest.framework.resource.parameters.Paging)1 SortColumn (org.alfresco.rest.framework.resource.parameters.SortColumn)1 SiteService (org.alfresco.service.cmr.site.SiteService)1