Merged searchapi (5.2.1) to 5.2.N (5.2.1)

130161 gjames: SEARCH-162: Implement a "fields" json parameter


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/DEV/5.2.N/root@130309 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Gethin James
2016-09-06 15:39:51 +00:00
parent 4368afe040
commit a87495f12a
6 changed files with 24 additions and 4 deletions

View File

@@ -30,6 +30,7 @@ import org.alfresco.rest.api.model.Node;
import org.alfresco.rest.api.search.impl.ResultMapper; import org.alfresco.rest.api.search.impl.ResultMapper;
import org.alfresco.rest.api.search.impl.SearchMapper; import org.alfresco.rest.api.search.impl.SearchMapper;
import org.alfresco.rest.api.search.model.SearchQuery; import org.alfresco.rest.api.search.model.SearchQuery;
import org.alfresco.rest.framework.jacksonextensions.BeanPropertiesFilter;
import org.alfresco.rest.framework.resource.parameters.CollectionWithPagingInfo; import org.alfresco.rest.framework.resource.parameters.CollectionWithPagingInfo;
import org.alfresco.rest.framework.resource.parameters.Params; import org.alfresco.rest.framework.resource.parameters.Params;
import org.alfresco.rest.framework.tools.ApiAssistant; import org.alfresco.rest.framework.tools.ApiAssistant;
@@ -50,6 +51,7 @@ import org.springframework.extensions.webscripts.WebScriptRequest;
import org.springframework.extensions.webscripts.WebScriptResponse; import org.springframework.extensions.webscripts.WebScriptResponse;
import java.io.IOException; import java.io.IOException;
import java.util.Arrays;
/** /**
* An implementation of the {{baseUrl}}/{{networkId}}/public/search/versions/1/search endpoint * An implementation of the {{baseUrl}}/{{networkId}}/public/search/versions/1/search endpoint
@@ -118,7 +120,12 @@ public class SearchApiWebscript extends AbstractWebScript implements RecognizedP
*/ */
protected Params getParams(WebScriptRequest webScriptRequest, SearchQuery searchQuery) protected Params getParams(WebScriptRequest webScriptRequest, SearchQuery searchQuery)
{ {
Params.RecognizedParams recognizedParams = new Params.RecognizedParams(null, null, null, null, null, null, null, null, false); BeanPropertiesFilter filter = null;
if (searchQuery.getFields()!= null && !searchQuery.getFields().isEmpty())
{
filter = getFilter("", searchQuery.getFields());
}
Params.RecognizedParams recognizedParams = new Params.RecognizedParams(null, null, filter, null, null, null, null, null, false);
return Params.valueOf(null, recognizedParams, searchQuery, webScriptRequest); return Params.valueOf(null, recognizedParams, searchQuery, webScriptRequest);
} }

View File

@@ -43,6 +43,7 @@ public class SearchQuery
private final Query query; private final Query query;
private final Paging paging; private final Paging paging;
private final List<String> include; private final List<String> include;
private final List<String> fields;
private final List<SortDef> sort; private final List<SortDef> sort;
private final List<Template> templates; private final List<Template> templates;
private final Default defaults; private final Default defaults;
@@ -53,12 +54,13 @@ public class SearchQuery
private final Scope scope; private final Scope scope;
private final Limits limits; private final Limits limits;
public static final SearchQuery EMPTY = new SearchQuery(null, 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, null);
@JsonCreator @JsonCreator
public SearchQuery(@JsonProperty("query") Query query, public SearchQuery(@JsonProperty("query") Query query,
@JsonProperty("paging") Paging paging, @JsonProperty("paging") Paging paging,
@JsonProperty("include") List<String> include, @JsonProperty("include") List<String> include,
@JsonProperty("fields") List<String> fields,
@JsonProperty("sort") List<SortDef> sort, @JsonProperty("sort") List<SortDef> sort,
@JsonProperty("templates") List<Template> templates, @JsonProperty("templates") List<Template> templates,
@JsonProperty("defaults") Default defaults, @JsonProperty("defaults") Default defaults,
@@ -72,6 +74,7 @@ public class SearchQuery
this.query = query; this.query = query;
this.paging = paging; this.paging = paging;
this.include = include; this.include = include;
this.fields = fields;
this.sort = sort; this.sort = sort;
this.templates = templates; this.templates = templates;
this.defaults = defaults; this.defaults = defaults;
@@ -97,6 +100,12 @@ public class SearchQuery
{ {
return include; return include;
} }
public List<String> getFields()
{
return fields;
}
public List<SortDef> getSort() public List<SortDef> getSort()
{ {
return sort; return sort;

View File

@@ -54,7 +54,7 @@ public class BasicSearchApiIntegrationTest extends AbstractSingleNetworkSiteTest
{ {
private static final String URL_SEARCH = "search"; private static final String URL_SEARCH = "search";
private static final String SEARCH_API_NAME = "search"; private static final String SEARCH_API_NAME = "search";
private static final String json = "{ \"query\": {\"query\": \"cm:name:king\",\"userQuery\": \"great\",\"language\": \"afts\"}}"; private static final String json = "{ \"query\": {\"query\": \"cm:name:king\",\"userQuery\": \"great\",\"language\": \"afts\"}, \"fields\" : [\"id\",\"name\", \"search\"]}";
private static final String bad_json = "{ \"query\": {\"qu\": \"cm:some nonsense \",\"userQuery\": \"great\",\"language\": \"afts\"}}"; private static final String bad_json = "{ \"query\": {\"qu\": \"cm:some nonsense \",\"userQuery\": \"great\",\"language\": \"afts\"}}";
/** /**

View File

@@ -508,7 +508,7 @@ public class SearchMapperTests
private SearchQuery minimalQuery() private SearchQuery minimalQuery()
{ {
Query query = new Query("cmis", "foo", ""); Query query = new Query("cmis", "foo", "");
SearchQuery sq = new SearchQuery(query,null, 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, null);
return sq; return sq;
} }
} }

View File

@@ -106,6 +106,9 @@ public class SearchQuerySerializerTests
assertEquals(Integer.valueOf(5), ff.getMincount()); assertEquals(Integer.valueOf(5), ff.getMincount());
assertEquals(2000, searchQuery.getLimits().getPermissionEvaluationCount().intValue()); assertEquals(2000, searchQuery.getLimits().getPermissionEvaluationCount().intValue());
assertEquals(5000, searchQuery.getLimits().getPermissionEvaluationTime().intValue()); assertEquals(5000, searchQuery.getLimits().getPermissionEvaluationTime().intValue());
assertEquals(2, searchQuery.getFields().size());
assertTrue(searchQuery.getFields().contains("id"));
assertTrue(searchQuery.getFields().contains("name"));
} }
@Test @Test

View File

@@ -65,6 +65,7 @@ public class SerializerTestHelper implements RequestReader
+ "\"spellcheck\": {\"query\": \"alfrezco\"}," + "\"spellcheck\": {\"query\": \"alfrezco\"},"
+ "\"limits\": {\"permissionEvaluationCount\": \"2000\",\"permissionEvaluationTime\": \"5000\"}," + "\"limits\": {\"permissionEvaluationCount\": \"2000\",\"permissionEvaluationTime\": \"5000\"},"
+ "\"scope\": { \"stores\": [\"workspace://SpacesStore\"]}," + "\"scope\": { \"stores\": [\"workspace://SpacesStore\"]},"
+ "\"fields\": [\"id\", \"name\"],"
+ "\"include\": [\"aspectNames\", \"properties\"]}"; + "\"include\": [\"aspectNames\", \"properties\"]}";
public SerializerTestHelper() public SerializerTestHelper()