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 a51139ee0d..a2f8de3398 100644
--- a/source/java/org/alfresco/rest/api/search/impl/SearchMapper.java
+++ b/source/java/org/alfresco/rest/api/search/impl/SearchMapper.java
@@ -32,6 +32,7 @@ import org.alfresco.rest.api.search.model.FacetField;
import org.alfresco.rest.api.search.model.FacetFields;
import org.alfresco.rest.api.search.model.FacetQuery;
import org.alfresco.rest.api.search.model.FilterQuery;
+import org.alfresco.rest.api.search.model.Limits;
import org.alfresco.rest.api.search.model.Query;
import org.alfresco.rest.api.search.model.Scope;
import org.alfresco.rest.api.search.model.SearchQuery;
@@ -112,6 +113,7 @@ public class SearchMapper
fromFacetFields(sp, searchQuery.getFacetFields());
fromSpellCheck(sp, searchQuery.getSpellcheck());
fromScope(sp, searchQuery.getScope());
+ fromLimits(sp, searchQuery.getLimits());
return sp;
}
@@ -429,4 +431,29 @@ public class SearchMapper
}
}
}
+
+ /**
+ * SearchParameters from the Limits object
+ * @param sp SearchParameters
+ * @param paging Paging
+ */
+ public void fromLimits(SearchParameters sp, Limits limits)
+ {
+ if (limits != null)
+ {
+ if (limits.getPermissionEvaluationCount() != null)
+ {
+ sp.setMaxItems(-1);
+ sp.setLimitBy(LimitBy.NUMBER_OF_PERMISSION_EVALUATIONS);
+ sp.setMaxPermissionChecks(limits.getPermissionEvaluationCount());
+ }
+
+ if (limits.getPermissionEvaluationTime() != null)
+ {
+ sp.setMaxItems(-1);
+ sp.setLimitBy(LimitBy.NUMBER_OF_PERMISSION_EVALUATIONS);
+ sp.setMaxPermissionCheckTimeMillis(limits.getPermissionEvaluationTime());
+ }
+ }
+ }
}
diff --git a/source/java/org/alfresco/rest/api/search/model/Limits.java b/source/java/org/alfresco/rest/api/search/model/Limits.java
new file mode 100644
index 0000000000..ea8f3a5b63
--- /dev/null
+++ b/source/java/org/alfresco/rest/api/search/model/Limits.java
@@ -0,0 +1,58 @@
+/*-
+ * #%L
+ * Alfresco Remote API
+ * %%
+ * Copyright (C) 2005 - 2016 Alfresco Software Limited
+ * %%
+ * This file is part of the Alfresco software.
+ * If the software was purchased under a paid Alfresco license, the terms of
+ * the paid license agreement will prevail. Otherwise, the software is
+ * provided under the following open source license terms:
+ *
+ * Alfresco is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Alfresco is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with Alfresco. If not, see .
+ * #L%
+ */
+
+package org.alfresco.rest.api.search.model;
+
+import org.codehaus.jackson.annotate.JsonCreator;
+import org.codehaus.jackson.annotate.JsonProperty;
+
+/**
+ * POJO class representing the query Limits
+ **/
+public class Limits
+{
+
+ private final Integer permissionEvaluationTime;
+ private final Integer permissionEvaluationCount;
+
+ @JsonCreator
+ public Limits(@JsonProperty("permissionEvaluationTime") Integer permissionEvaluationTime,
+ @JsonProperty("permissionEvaluationCount") Integer permissionEvaluationCount)
+ {
+ this.permissionEvaluationTime = permissionEvaluationTime;
+ this.permissionEvaluationCount = permissionEvaluationCount;
+ }
+
+ public Integer getPermissionEvaluationTime()
+ {
+ return permissionEvaluationTime;
+ }
+
+ public Integer getPermissionEvaluationCount()
+ {
+ return permissionEvaluationCount;
+ }
+}
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 fe48d7c64d..e9e3217a4a 100644
--- a/source/java/org/alfresco/rest/api/search/model/SearchQuery.java
+++ b/source/java/org/alfresco/rest/api/search/model/SearchQuery.java
@@ -51,8 +51,9 @@ public class SearchQuery
private final FacetFields facetFields;
private final Spelling spellcheck;
private final Scope scope;
+ private final Limits limits;
- public static final SearchQuery EMPTY = new SearchQuery(null, null, null, null, null,null, null, null, null, null, null);
+ public static final SearchQuery EMPTY = new SearchQuery(null, null, null, null, null,null, null, null,null, null, null, null);
@JsonCreator
public SearchQuery(@JsonProperty("query") Query query,
@@ -65,7 +66,8 @@ public class SearchQuery
@JsonProperty("facetFields") FacetFields facetFields,
@JsonProperty("facetQueries") List facetQueries,
@JsonProperty("spellcheck") Spelling spellcheck,
- @JsonProperty("scope") Scope scope)
+ @JsonProperty("scope") Scope scope,
+ @JsonProperty("limits")Limits limits)
{
this.query = query;
this.paging = paging;
@@ -78,6 +80,7 @@ public class SearchQuery
this.spellcheck = spellcheck;
this.scope = scope;
this.facetFields = facetFields;
+ this.limits = limits;
}
public Query getQuery()
@@ -132,4 +135,9 @@ public class SearchQuery
{
return facetFields;
}
+
+ public Limits getLimits()
+ {
+ return limits;
+ }
}
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 76e8bfcc9e..ba65c4e556 100644
--- a/source/test-java/org/alfresco/rest/api/search/SearchMapperTests.java
+++ b/source/test-java/org/alfresco/rest/api/search/SearchMapperTests.java
@@ -42,6 +42,7 @@ import org.alfresco.rest.api.search.model.FacetField;
import org.alfresco.rest.api.search.model.FacetFields;
import org.alfresco.rest.api.search.model.FacetQuery;
import org.alfresco.rest.api.search.model.FilterQuery;
+import org.alfresco.rest.api.search.model.Limits;
import org.alfresco.rest.api.search.model.Query;
import org.alfresco.rest.api.search.model.Scope;
import org.alfresco.rest.api.search.model.SearchQuery;
@@ -474,10 +475,40 @@ public class SearchMapperTests
assertEquals("ENUM" ,ff.getMethod().toString());
}
+ @Test
+ public void fromLimits() throws Exception
+ {
+ SearchParameters searchParameters = new SearchParameters();
+ searchMapper.setDefaults(searchParameters);
+
+ //Doesn't error
+ searchMapper.fromLimits(searchParameters, null);
+ assertEquals(LimitBy.FINAL_SIZE, searchParameters.getLimitBy());
+ assertEquals(100, searchParameters.getMaxItems());
+
+ searchMapper.fromLimits(searchParameters, new Limits(null, null));
+ assertEquals(LimitBy.FINAL_SIZE, searchParameters.getLimitBy());
+ assertEquals(100, searchParameters.getMaxItems());
+
+ searchMapper.fromLimits(searchParameters, new Limits(null, 34));
+ assertEquals(LimitBy.NUMBER_OF_PERMISSION_EVALUATIONS, searchParameters.getLimitBy());
+ assertEquals(34, searchParameters.getMaxPermissionChecks());
+ assertEquals(-1, searchParameters.getMaxItems());
+ assertEquals(-1, searchParameters.getMaxPermissionCheckTimeMillis());
+
+ searchParameters = new SearchParameters();
+ searchMapper.setDefaults(searchParameters);
+ searchMapper.fromLimits(searchParameters, new Limits(1000, null));
+ assertEquals(LimitBy.NUMBER_OF_PERMISSION_EVALUATIONS, searchParameters.getLimitBy());
+ assertEquals(1000, searchParameters.getMaxPermissionCheckTimeMillis());
+ assertEquals(-1, searchParameters.getMaxItems());
+ assertEquals(-1, searchParameters.getMaxPermissionChecks());
+ }
+
private SearchQuery minimalQuery()
{
Query query = new Query("cmis", "foo", "");
- SearchQuery sq = new SearchQuery(query,null, null, null, null, null, null, null, null, null, null);
+ SearchQuery sq = new SearchQuery(query,null, null, null, null, null, null, null, null, null, null, null);
return sq;
}
}
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 ebb69de481..0036479ebc 100644
--- a/source/test-java/org/alfresco/rest/api/search/SearchQuerySerializerTests.java
+++ b/source/test-java/org/alfresco/rest/api/search/SearchQuerySerializerTests.java
@@ -104,9 +104,10 @@ public class SearchQuerySerializerTests
assertEquals("mylabel", ff.getLabel());
assertEquals("FC", ff.getMethod());
assertEquals(Integer.valueOf(5), ff.getMincount());
+ assertEquals(2000, searchQuery.getLimits().getPermissionEvaluationCount().intValue());
+ assertEquals(5000, searchQuery.getLimits().getPermissionEvaluationTime().intValue());
}
-
@Test
public void testSerializeContext() throws IOException
{
diff --git a/source/test-java/org/alfresco/rest/api/search/SerializerTestHelper.java b/source/test-java/org/alfresco/rest/api/search/SerializerTestHelper.java
index 92cbaaddb6..63f56330c3 100644
--- a/source/test-java/org/alfresco/rest/api/search/SerializerTestHelper.java
+++ b/source/test-java/org/alfresco/rest/api/search/SerializerTestHelper.java
@@ -63,6 +63,7 @@ public class SerializerTestHelper implements RequestReader
+ "\"facetFields\": {\"facets\": [{\"field\": \"cm:creator\",\"prefix\": \"myquery2\",\"sort\": \"COUNT\",\"missing\": \"false\"}, {\"field\": \"modifier\",\"label\": \"mylabel\",\"method\": \"FC\",\"mincount\": \"5\"}]},"
+ "\"facetQueries\": [{\"query\": \"facquery\",\"label\": \"facnoused\"}],"
+ "\"spellcheck\": {\"query\": \"alfrezco\"},"
+ + "\"limits\": {\"permissionEvaluationCount\": \"2000\",\"permissionEvaluationTime\": \"5000\"},"
+ "\"scope\": { \"stores\": [\"workspace://SpacesStore\"]},"
+ "\"include\": [\"aspectNames\", \"properties\"]}";