Search in sources :

Example 21 with Paging

use of org.alfresco.rest.framework.resource.parameters.Paging in project alfresco-remote-api by Alfresco.

the class QuickShareLinksImpl method findLinks.

public CollectionWithPagingInfo<QuickShareLink> findLinks(Parameters parameters) {
    checkEnabled();
    String queryString = "ASPECT:\"" + QuickShareModel.ASPECT_QSHARE.toString() + "\"";
    SearchParameters sp = new SearchParameters();
    // note: REST API query parameter (ie. where clause filter) - not to be confused with search query ;-)
    Query q = parameters.getQuery();
    if (q != null) {
        // filtering via "where" clause
        MapBasedQueryWalker propertyWalker = new MapBasedQueryWalker(FIND_SHARED_LINKS_QUERY_PROPERTIES, null);
        QueryHelper.walk(q, propertyWalker);
        String sharedByUserId = propertyWalker.getProperty(PARAM_SHAREDBY, WhereClauseParser.EQUALS, String.class);
        if (sharedByUserId != null) {
            if (People.DEFAULT_USER.equalsIgnoreCase(sharedByUserId)) {
                sharedByUserId = AuthenticationUtil.getFullyAuthenticatedUser();
            }
            QueryParameterDefinition qpd = new QueryParameterDefImpl(QuickShareModel.PROP_QSHARE_SHAREDBY, dictionaryService.getDataType(DataTypeDefinition.TEXT), true, sharedByUserId);
            sp.addQueryParameterDefinition(qpd);
            String qsharedBy = QuickShareModel.PROP_QSHARE_SHAREDBY.toPrefixString(namespaceService);
            queryString += " +@" + SearchLanguageConversion.escapeLuceneQuery(qsharedBy) + ":\"${" + qsharedBy + "}\"";
        }
    }
    sp.setLanguage(SearchService.LANGUAGE_LUCENE);
    sp.setQuery(queryString);
    sp.addStore(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE);
    Paging paging = parameters.getPaging();
    PagingRequest pagingRequest = Util.getPagingRequest(paging);
    sp.setSkipCount(pagingRequest.getSkipCount());
    sp.setMaxItems(pagingRequest.getMaxItems());
    sp.addSort("@" + ContentModel.PROP_MODIFIED, false);
    ResultSet results = searchService.query(sp);
    List<QuickShareLink> qsLinks = new ArrayList<>(results.length());
    List<String> includeParam = parameters.getInclude();
    for (ResultSetRow row : results) {
        NodeRef nodeRef = row.getNodeRef();
        qsLinks.add(getQuickShareInfo(nodeRef, false, includeParam));
    }
    results.close();
    return CollectionWithPagingInfo.asPaged(paging, qsLinks, results.hasMore(), Long.valueOf(results.getNumberFound()).intValue());
}
Also used : QueryParameterDefImpl(org.alfresco.repo.search.QueryParameterDefImpl) Query(org.alfresco.rest.framework.resource.parameters.where.Query) Paging(org.alfresco.rest.framework.resource.parameters.Paging) ArrayList(java.util.ArrayList) ResultSetRow(org.alfresco.service.cmr.search.ResultSetRow) PagingRequest(org.alfresco.query.PagingRequest) SearchParameters(org.alfresco.service.cmr.search.SearchParameters) NodeRef(org.alfresco.service.cmr.repository.NodeRef) MapBasedQueryWalker(org.alfresco.rest.workflow.api.impl.MapBasedQueryWalker) ResultSet(org.alfresco.service.cmr.search.ResultSet) QuickShareLink(org.alfresco.rest.api.model.QuickShareLink) QueryParameterDefinition(org.alfresco.service.cmr.search.QueryParameterDefinition)

Example 22 with Paging

use of org.alfresco.rest.framework.resource.parameters.Paging in project alfresco-remote-api by Alfresco.

the class SitesImpl method getSites.

public CollectionWithPagingInfo<Site> getSites(final Parameters parameters) {
    final BeanPropertiesFilter filter = parameters.getFilter();
    Paging paging = parameters.getPaging();
    PagingRequest pagingRequest = Util.getPagingRequest(paging);
    // pagingRequest.setRequestTotalCountMax(requestTotalCountMax)
    List<Pair<QName, Boolean>> sortProps = new ArrayList<Pair<QName, Boolean>>();
    List<SortColumn> sortCols = parameters.getSorting();
    if ((sortCols != null) && (sortCols.size() > 0)) {
        for (SortColumn sortCol : sortCols) {
            QName sortPropQName = SORT_PARAMS_TO_QNAMES.get(sortCol.column);
            if (sortPropQName == null) {
                throw new InvalidArgumentException("Invalid sort field: " + sortCol.column);
            }
            sortProps.add(new Pair<>(sortPropQName, (sortCol.asc ? Boolean.TRUE : Boolean.FALSE)));
        }
    } else {
        // default sort order
        sortProps.add(new Pair<>(ContentModel.PROP_TITLE, Boolean.TRUE));
    }
    List<FilterProp> filterProps = getFilterPropListOfSites(parameters);
    final PagingResults<SiteInfo> pagingResult = siteService.listSites(filterProps, sortProps, pagingRequest);
    final List<SiteInfo> sites = pagingResult.getPage();
    int totalItems = pagingResult.getTotalResultCount().getFirst();
    final String personId = AuthenticationUtil.getFullyAuthenticatedUser();
    List<Site> page = new AbstractList<Site>() {

        @Override
        public Site get(int index) {
            SiteInfo siteInfo = sites.get(index);
            String role = null;
            if (filter.isAllowed(Site.ROLE)) {
                role = siteService.getMembersRole(siteInfo.getShortName(), personId);
            }
            return new Site(siteInfo, role);
        }

        @Override
        public int size() {
            return sites.size();
        }
    };
    return CollectionWithPagingInfo.asPaged(paging, page, pagingResult.hasMoreItems(), totalItems);
}
Also used : AbstractList(java.util.AbstractList) SiteInfo(org.alfresco.service.cmr.site.SiteInfo) FilterProp(org.alfresco.repo.node.getchildren.FilterProp) QName(org.alfresco.service.namespace.QName) Paging(org.alfresco.rest.framework.resource.parameters.Paging) ArrayList(java.util.ArrayList) FilterPropString(org.alfresco.repo.node.getchildren.FilterPropString) SortColumn(org.alfresco.rest.framework.resource.parameters.SortColumn) BeanPropertiesFilter(org.alfresco.rest.framework.jacksonextensions.BeanPropertiesFilter) PagingRequest(org.alfresco.query.PagingRequest) InvalidArgumentException(org.alfresco.rest.framework.core.exceptions.InvalidArgumentException) FilterPropBoolean(org.alfresco.repo.node.getchildren.FilterPropBoolean) Pair(org.alfresco.util.Pair)

Example 23 with Paging

use of org.alfresco.rest.framework.resource.parameters.Paging in project alfresco-remote-api by Alfresco.

the class SitesImpl method getFavouriteSites.

public CollectionWithPagingInfo<FavouriteSite> getFavouriteSites(String personId, Parameters parameters) {
    personId = people.validatePerson(personId);
    Paging paging = parameters.getPaging();
    BeanPropertiesFilter filter = parameters.getFilter();
    PagingResults<SiteInfo> favouriteSites = getFavouriteSites(personId, Util.getPagingRequest(paging));
    List<FavouriteSite> favourites = new ArrayList<FavouriteSite>(favouriteSites.getPage().size());
    for (SiteInfo favouriteSite : favouriteSites.getPage()) {
        String role = null;
        if (filter.isAllowed(Site.ROLE)) {
            role = getSiteRole(favouriteSite.getShortName(), personId);
        }
        FavouriteSite favourite = new FavouriteSite(favouriteSite, role);
        favourites.add(favourite);
    }
    return CollectionWithPagingInfo.asPaged(paging, favourites, favouriteSites.hasMoreItems(), favouriteSites.getTotalResultCount().getFirst());
}
Also used : SiteInfo(org.alfresco.service.cmr.site.SiteInfo) Paging(org.alfresco.rest.framework.resource.parameters.Paging) ArrayList(java.util.ArrayList) FilterPropString(org.alfresco.repo.node.getchildren.FilterPropString) BeanPropertiesFilter(org.alfresco.rest.framework.jacksonextensions.BeanPropertiesFilter)

Example 24 with Paging

use of org.alfresco.rest.framework.resource.parameters.Paging in project alfresco-remote-api by Alfresco.

the class ResultMapper method toCollectionWithPagingInfo.

public CollectionWithPagingInfo<TupleList> toCollectionWithPagingInfo(JSONArray docs, SearchSQLQuery searchQuery) throws JSONException {
    if (docs == null) {
        throw new RuntimeException("Solr response is required instead of JSONArray docs was null");
    }
    if (searchQuery == null) {
        throw new RuntimeException("SearchSQLQuery is required");
    }
    List<TupleList> entries = new ArrayList<TupleList>();
    for (int i = 0; i < docs.length() - 1; i++) {
        List<TupleEntry> row = new ArrayList<TupleEntry>();
        JSONObject docObj = (JSONObject) docs.get(i);
        docObj.keys().forEachRemaining(action -> {
            try {
                String value = docObj.get(action.toString()).toString();
                row.add(new TupleEntry(action.toString(), value));
            } catch (JSONException e) {
                throw new RuntimeException("Unable to parse SQL response. " + e);
            }
        });
        entries.add(new TupleList(row));
    }
    Paging paging = Paging.valueOf(0, searchQuery.getItemLimit());
    return CollectionWithPagingInfo.asPaged(paging, entries);
}
Also used : TupleList(org.alfresco.rest.api.search.model.TupleList) TupleEntry(org.alfresco.rest.api.search.model.TupleEntry) JSONObject(org.json.JSONObject) Paging(org.alfresco.rest.framework.resource.parameters.Paging) ArrayList(java.util.ArrayList) JSONException(org.json.JSONException)

Example 25 with Paging

use of org.alfresco.rest.framework.resource.parameters.Paging in project alfresco-remote-api by Alfresco.

the class NetworksWebScriptGet method execute.

@Override
public void execute(final Api api, final WebScriptRequest req, final WebScriptResponse res) throws IOException {
    try {
        transactionService.getRetryingTransactionHelper().doInTransaction(new RetryingTransactionCallback<Void>() {

            @Override
            public Void execute() throws Throwable {
                final Paging paging = findPaging(req);
                // apply content type
                res.setContentType(Format.JSON.mimetype() + ";charset=UTF-8");
                assistant.getJsonHelper().withWriter(res.getOutputStream(), new Writer() {

                    @Override
                    public void writeContents(JsonGenerator generator, ObjectMapper objectMapper) throws JsonGenerationException, JsonMappingException, IOException {
                        List<Object> entities = new ArrayList<Object>();
                        String personId = AuthenticationUtil.getFullyAuthenticatedUser();
                        CollectionWithPagingInfo<PersonNetwork> networkMemberships = networks.getNetworks(personId, paging);
                        for (PersonNetwork networkMember : networkMemberships.getCollection()) {
                            // TODO this is not ideal, but the only way to populate the embedded network entities (this would normally be
                            // done automatically by the api framework).
                            Object wrapped = helper.processAdditionsToTheResponse(res, Api.ALFRESCO_PUBLIC, NetworksEntityResource.NAME, Params.valueOf(personId, null, req), networkMember);
                            entities.add(wrapped);
                        }
                        objectMapper.writeValue(generator, CollectionWithPagingInfo.asPaged(paging, entities));
                    }
                });
                return null;
            }
        }, true, true);
    } catch (ApiException | WebScriptException apiException) {
        renderException(apiException, res, assistant);
    } catch (RuntimeException runtimeException) {
        renderException(runtimeException, res, assistant);
    }
}
Also used : Paging(org.alfresco.rest.framework.resource.parameters.Paging) ArrayList(java.util.ArrayList) WebScriptException(org.springframework.extensions.webscripts.WebScriptException) JsonGenerator(com.fasterxml.jackson.core.JsonGenerator) PersonNetwork(org.alfresco.rest.api.model.PersonNetwork) ResponseWriter(org.alfresco.rest.framework.tools.ResponseWriter) Writer(org.alfresco.rest.framework.jacksonextensions.JacksonHelper.Writer) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) ApiException(org.alfresco.rest.framework.core.exceptions.ApiException)

Aggregations

Paging (org.alfresco.rest.framework.resource.parameters.Paging)34 ArrayList (java.util.ArrayList)18 InvalidArgumentException (org.alfresco.rest.framework.core.exceptions.InvalidArgumentException)11 Query (org.alfresco.rest.framework.resource.parameters.where.Query)10 PagingRequest (org.alfresco.query.PagingRequest)9 SortColumn (org.alfresco.rest.framework.resource.parameters.SortColumn)8 Pair (org.alfresco.util.Pair)8 AbstractList (java.util.AbstractList)7 HashMap (java.util.HashMap)6 List (java.util.List)6 Test (org.junit.Test)6 EntityNotFoundException (org.alfresco.rest.framework.core.exceptions.EntityNotFoundException)5 SiteInfo (org.alfresco.service.cmr.site.SiteInfo)5 HashSet (java.util.HashSet)4 AuthorityInfo (org.alfresco.repo.security.authority.AuthorityInfo)4 NodeRef (org.alfresco.service.cmr.repository.NodeRef)4 Map (java.util.Map)3 Set (java.util.Set)3 EmptyPagingResults (org.alfresco.query.EmptyPagingResults)3 GroupMember (org.alfresco.rest.api.model.GroupMember)3