diff --git a/source/java/org/alfresco/rest/api/search/SearchApiWebscript.java b/source/java/org/alfresco/rest/api/search/SearchApiWebscript.java index f7ecdccf88..59b13f89e7 100644 --- a/source/java/org/alfresco/rest/api/search/SearchApiWebscript.java +++ b/source/java/org/alfresco/rest/api/search/SearchApiWebscript.java @@ -88,7 +88,7 @@ public class SearchApiWebscript extends AbstractWebScript implements RecognizedP SearchQuery searchQuery = extractJsonContent(webScriptRequest, assistant.getJsonHelper(), SearchQuery.class); //Parse the parameter - Params.RecognizedParams recognizedParams = new Params.RecognizedParams(null, null, null, null, null, null, null, null, false); + Params.RecognizedParams recognizedParams = new Params.RecognizedParams(null, searchQuery.getPaging(), null, null, null, null, null, null, false); Params params = Params.valueOf(null, recognizedParams, searchQuery, webScriptRequest); //Turn the params into the Java SearchParameters object diff --git a/source/java/org/alfresco/rest/api/search/impl/ResultMapper.java b/source/java/org/alfresco/rest/api/search/impl/ResultMapper.java index 63ad9b8004..de99286c42 100644 --- a/source/java/org/alfresco/rest/api/search/impl/ResultMapper.java +++ b/source/java/org/alfresco/rest/api/search/impl/ResultMapper.java @@ -86,7 +86,7 @@ public class ResultMapper ); Integer total = Integer.valueOf(totalItems.intValue()); - return CollectionWithPagingInfo.asPaged(null, noderesults, noderesults.size() < total, total); + return CollectionWithPagingInfo.asPaged(params.getPaging(), noderesults, noderesults.size() < total, total); } } diff --git a/source/java/org/alfresco/rest/api/search/impl/SearchMapper.java b/source/java/org/alfresco/rest/api/search/impl/SearchMapper.java index e4761f9483..5ae873fa14 100644 --- a/source/java/org/alfresco/rest/api/search/impl/SearchMapper.java +++ b/source/java/org/alfresco/rest/api/search/impl/SearchMapper.java @@ -31,6 +31,7 @@ import org.alfresco.rest.api.search.model.SearchQuery; import org.alfresco.rest.framework.core.exceptions.InvalidArgumentException; import org.alfresco.rest.framework.resource.content.BasicContentInfo; import org.alfresco.rest.framework.resource.parameters.CollectionWithPagingInfo; +import org.alfresco.rest.framework.resource.parameters.Paging; import org.alfresco.rest.framework.resource.parameters.Params; import org.alfresco.service.cmr.repository.StoreRef; import org.alfresco.service.cmr.search.ResultSet; @@ -64,6 +65,7 @@ public class SearchMapper SearchParameters sp = new SearchParameters(); fromQuery(sp, searchQuery.getQuery()); + fromPaging(sp, searchQuery.getPaging()); //Hardcode workspace store sp.addStore(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE); @@ -99,4 +101,13 @@ public class SearchMapper sp.setSearchTerm(q.getUserQuery()); } + + public void fromPaging(SearchParameters sp, Paging paging) + { + if (paging != null) + { + sp.setMaxItems(paging.getMaxItems()); + sp.setSkipCount(paging.getSkipCount()); + } + } } diff --git a/source/java/org/alfresco/rest/api/search/model/SearchQuery.java b/source/java/org/alfresco/rest/api/search/model/SearchQuery.java index eae6984512..e493b10e23 100644 --- a/source/java/org/alfresco/rest/api/search/model/SearchQuery.java +++ b/source/java/org/alfresco/rest/api/search/model/SearchQuery.java @@ -26,6 +26,8 @@ package org.alfresco.rest.api.search.model; +import org.alfresco.rest.framework.resource.parameters.Paging; + /** * POJO class representing the JSON body for a search request * @@ -34,6 +36,7 @@ package org.alfresco.rest.api.search.model; public class SearchQuery { Query query; + Paging paging; public SearchQuery() { @@ -48,4 +51,14 @@ public class SearchQuery { this.query = query; } + + public Paging getPaging() + { + return paging; + } + + public void setPaging(Paging paging) + { + this.paging = paging; + } } diff --git a/source/java/org/alfresco/rest/framework/resource/parameters/Paging.java b/source/java/org/alfresco/rest/framework/resource/parameters/Paging.java index 3f4db5f3d7..b375f0e363 100644 --- a/source/java/org/alfresco/rest/framework/resource/parameters/Paging.java +++ b/source/java/org/alfresco/rest/framework/resource/parameters/Paging.java @@ -26,6 +26,8 @@ package org.alfresco.rest.framework.resource.parameters; import org.alfresco.rest.framework.core.exceptions.InvalidArgumentException; +import org.codehaus.jackson.annotate.JsonCreator; +import org.codehaus.jackson.annotate.JsonProperty; /** * Represents paging of collections of resources. Set by the client request.
@@ -77,7 +79,8 @@ public class Paging return this.maxItems; } - public static Paging valueOf(int skipCount, int maxItems) + @JsonCreator + public static Paging valueOf(@JsonProperty("skipCount") int skipCount, @JsonProperty("maxItems") int maxItems) { return new Paging(skipCount,maxItems); } diff --git a/source/test-java/org/alfresco/rest/api/search/SearchMapperTests.java b/source/test-java/org/alfresco/rest/api/search/SearchMapperTests.java index e19ed0f8ee..f036c4e9ce 100644 --- a/source/test-java/org/alfresco/rest/api/search/SearchMapperTests.java +++ b/source/test-java/org/alfresco/rest/api/search/SearchMapperTests.java @@ -36,6 +36,7 @@ import org.alfresco.rest.api.search.impl.SearchMapper; import org.alfresco.rest.api.search.model.Query; import org.alfresco.rest.api.search.model.SearchQuery; import org.alfresco.rest.framework.core.exceptions.InvalidArgumentException; +import org.alfresco.rest.framework.resource.parameters.Paging; import org.alfresco.rest.framework.resource.parameters.Params; import org.alfresco.service.cmr.repository.StoreRef; import org.alfresco.service.cmr.search.SearchParameters; @@ -127,6 +128,18 @@ public class SearchMapperTests assertEquals("Heload", searchParameters.getSearchTerm()); } + @Test + public void fromPaging() throws Exception + { + SearchParameters searchParameters = new SearchParameters(); + //Doesn't error + searchMapper.fromPaging(searchParameters, null); + Paging paging = Paging.DEFAULT; + searchMapper.fromPaging(searchParameters, paging); + assertEquals(searchParameters.getMaxItems(),paging.getMaxItems()); + assertEquals(searchParameters.getSkipCount(),paging.getSkipCount()); + } + private SearchQuery minimalQuery() { SearchQuery sq = new SearchQuery(); diff --git a/source/test-java/org/alfresco/rest/api/search/SearchQuerySerializerTests.java b/source/test-java/org/alfresco/rest/api/search/SearchQuerySerializerTests.java index 7d1c0c0603..a2e073c7df 100644 --- a/source/test-java/org/alfresco/rest/api/search/SearchQuerySerializerTests.java +++ b/source/test-java/org/alfresco/rest/api/search/SearchQuerySerializerTests.java @@ -63,12 +63,15 @@ public class SearchQuerySerializerTests implements RequestReader @Test public void testDeserializeQuery() throws IOException { - String json = "{ \"query\": {\"query\": \"g*\",\"userQuery\": \"great\",\"language\": \"bob\"}}"; + String json = "{ \"query\": {\"query\": \"g*\",\"userQuery\": \"great\",\"language\": \"bob\"}, " + + "\"paging\": {\"maxItems\": \"99\",\"skipCount\": \"4\"}}"; SearchQuery searchQuery = extractFromJson(json); assertEquals(SearchQuery.class, searchQuery.getClass()); assertEquals("bob", searchQuery.getQuery().getLanguage()); assertEquals("g*", searchQuery.getQuery().getQuery()); assertEquals("great", searchQuery.getQuery().getUserQuery()); + assertEquals(99, searchQuery.getPaging().getMaxItems()); + assertEquals(4, searchQuery.getPaging().getSkipCount()); } private SearchQuery extractFromJson(String json) throws IOException