diff --git a/source/java/org/alfresco/rest/api/search/context/SearchContext.java b/source/java/org/alfresco/rest/api/search/context/SearchContext.java index a676b49150..8ea90f8dbf 100644 --- a/source/java/org/alfresco/rest/api/search/context/SearchContext.java +++ b/source/java/org/alfresco/rest/api/search/context/SearchContext.java @@ -25,6 +25,8 @@ */ package org.alfresco.rest.api.search.context; +import org.alfresco.rest.api.search.model.SearchQuery; + import java.util.List; /** @@ -37,10 +39,13 @@ public class SearchContext private final SpellCheckContext spellCheck; private final List facetsFields; private final List facetIntervals; + private final SearchQuery request; - public SearchContext(long lastTxId, List facetQueries, List facetsFields, List facetIntervals, SpellCheckContext spellCheck) + public SearchContext(long lastTxId, List facetQueries, List facetsFields, List facetIntervals, SpellCheckContext spellCheck, + SearchQuery request) { this.spellCheck = spellCheck; + this.request = request; if (lastTxId > 0) { consistency = new Consistency(lastTxId); @@ -79,6 +84,11 @@ public class SearchContext return facetsFields; } + public SearchQuery getRequest() + { + return request; + } + public class Consistency { private final long lastTxId; 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 92bf15600b..f32544645d 100644 --- a/source/java/org/alfresco/rest/api/search/impl/ResultMapper.java +++ b/source/java/org/alfresco/rest/api/search/impl/ResultMapper.java @@ -281,7 +281,7 @@ public class ResultMapper for (Entry fq:facetQueries.entrySet()) { String filterQuery = null; - if (searchQuery != null) + if (searchQuery != null && searchQuery.getFacetQueries() != null) { Optional found = searchQuery.getFacetQueries().stream().filter(facetQuery -> fq.getKey().equals(facetQuery.getLabel())).findFirst(); filterQuery = found.isPresent()? found.get().getQuery():fq.getKey(); @@ -305,7 +305,7 @@ public class ResultMapper } //Put it all together - context = new SearchContext(solrResultSet.getLastIndexedTxId(), facetResults, ffcs, intervals, spellCheckContext); + context = new SearchContext(solrResultSet.getLastIndexedTxId(), facetResults, ffcs, intervals, spellCheckContext, searchQuery.includeRequest()?searchQuery:null); return isNullContext(context)?null:context; } 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 05c98c0505..ea38b9a844 100644 --- a/source/java/org/alfresco/rest/api/search/model/SearchQuery.java +++ b/source/java/org/alfresco/rest/api/search/model/SearchQuery.java @@ -56,12 +56,14 @@ public class SearchQuery private final Limits limits; private final GeneralHighlightParameters highlight; private final IntervalParameters facetIntervals; + private final boolean includeRequest; - public static final SearchQuery EMPTY = new SearchQuery(null, null, null, 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, null, null, null); @JsonCreator public SearchQuery(@JsonProperty("query") Query query, @JsonProperty("paging") Paging paging, + @JsonProperty("includeRequest") Boolean includeRequest, @JsonProperty("include") List include, @JsonProperty("fields") List fields, @JsonProperty("sort") List sort, @@ -77,6 +79,7 @@ public class SearchQuery @JsonProperty("facetIntervals")IntervalParameters facetIntervals) { this.query = query; + this.includeRequest = includeRequest==null?false:includeRequest; this.paging = paging; this.include = include; this.fields = fields; @@ -166,4 +169,9 @@ public class SearchQuery { return limits; } + + public boolean includeRequest() + { + return includeRequest; + } } diff --git a/source/test-java/org/alfresco/rest/api/search/ResultMapperTests.java b/source/test-java/org/alfresco/rest/api/search/ResultMapperTests.java index 9abd5665fe..8bb27d93f6 100644 --- a/source/test-java/org/alfresco/rest/api/search/ResultMapperTests.java +++ b/source/test-java/org/alfresco/rest/api/search/ResultMapperTests.java @@ -230,7 +230,7 @@ public class ResultMapperTests public void testToCollectionWithPagingInfo() throws Exception { ResultSet results = mockResultset(Arrays.asList(514l), Arrays.asList(566l, VERSIONED_ID)); - CollectionWithPagingInfo collectionWithPage = mapper.toCollectionWithPagingInfo(EMPTY_PARAMS, null, results); + CollectionWithPagingInfo collectionWithPage = mapper.toCollectionWithPagingInfo(EMPTY_PARAMS, SearchQuery.EMPTY, results); assertNotNull(collectionWithPage); Long found = results.getNumberFound(); assertEquals(found.intValue(), collectionWithPage.getTotalItems().intValue()); @@ -278,17 +278,21 @@ public class ResultMapperTests assertEquals("last",searchContext.getFacetIntervals().get(0).getBuckets().get(0).getLabel()); assertEquals("cm:creator:(a,b]",searchContext.getFacetIntervals().get(0).getBuckets().get(0).getFilterQuery()); assertEquals(4,searchContext.getFacetIntervals().get(0).getBuckets().get(0).getCount()); + + //Requests search Query + assertNotNull(searchContext.getRequest()); + assertEquals("great", searchContext.getRequest().getQuery().getUserQuery()); } @Test public void testIsNullContext() throws Exception { - assertTrue(mapper.isNullContext(new SearchContext(0l,null,null,null,null))); - assertFalse(mapper.isNullContext(new SearchContext(1l,null,null,null,null))); - assertFalse(mapper.isNullContext(new SearchContext(0l,null,null,null,new SpellCheckContext(null, null)))); - assertFalse(mapper.isNullContext(new SearchContext(0l,Arrays.asList(new FacetQueryContext(null, null, 0)),null,null,null))); - assertFalse(mapper.isNullContext(new SearchContext(0l,null,Arrays.asList(new FacetFieldContext(null, null)),null,null))); - assertFalse(mapper.isNullContext(new SearchContext(0l,null,null,Arrays.asList(new FacetFieldContext(null, null)),null))); + assertTrue(mapper.isNullContext(new SearchContext(0l,null,null,null,null, null))); + assertFalse(mapper.isNullContext(new SearchContext(1l,null,null,null,null, null))); + assertFalse(mapper.isNullContext(new SearchContext(0l,null,null,null,new SpellCheckContext(null, null), null))); + assertFalse(mapper.isNullContext(new SearchContext(0l,Arrays.asList(new FacetQueryContext(null, null, 0)),null,null,null, null))); + assertFalse(mapper.isNullContext(new SearchContext(0l,null,Arrays.asList(new FacetFieldContext(null, null)),null,null, null))); + assertFalse(mapper.isNullContext(new SearchContext(0l,null,null,Arrays.asList(new FacetFieldContext(null, null)),null, null))); } @Test 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 5d8089ddf8..f9c15fc0b7 100644 --- a/source/test-java/org/alfresco/rest/api/search/SearchMapperTests.java +++ b/source/test-java/org/alfresco/rest/api/search/SearchMapperTests.java @@ -652,7 +652,7 @@ public class SearchMapperTests private SearchQuery minimalQuery() { Query query = new Query("cmis", "foo", ""); - SearchQuery sq = new SearchQuery(query,null, null, null, 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, 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 4d01beb9a1..367355640f 100644 --- a/source/test-java/org/alfresco/rest/api/search/SearchQuerySerializerTests.java +++ b/source/test-java/org/alfresco/rest/api/search/SearchQuerySerializerTests.java @@ -50,7 +50,6 @@ import org.junit.Test; import java.io.IOException; import java.util.Arrays; -import java.util.List; /** * Tests json -> SearchQuery deserialization @@ -174,7 +173,7 @@ public class SearchQuerySerializerTests FacetFieldContext ffc = new FacetFieldContext("theLabel", Arrays.asList(new Bucket("b1", "name:b1", 23, "displayText1"), new Bucket("b2", null, 34, "displayText2"))); SearchContext searchContext = new SearchContext(23l, Arrays.asList(new FacetQueryContext("f1", "creator:bob", 15), new FacetQueryContext("f2", null, 20)), Arrays.asList(ffc), null, - new SpellCheckContext("aFlag", Arrays.asList("bish", "bash"))); + new SpellCheckContext("aFlag", Arrays.asList("bish", "bash")), null); CollectionWithPagingInfo coll = CollectionWithPagingInfo.asPaged(null, Arrays.asList(exec1), false, 2, null, searchContext); String out = helper.writeResponse(coll); assertTrue("There must 'context' json output", out.contains("\"context\":{\"consistency\":{\"lastTxId\":23}")); @@ -186,7 +185,7 @@ public class SearchQuerySerializerTests assertTrue("There must 'bucket1' json output", out.contains("{\"label\":\"b1\",\"filterQuery\":\"name:b1\",\"count\":23,\"display\":\"displayText1\"}")); assertTrue("There must 'bucket2' json output", out.contains("{\"label\":\"b2\",\"count\":34,\"display\":\"displayText2\"}")); - searchContext = new SearchContext(-1, null, null,null, null); + searchContext = new SearchContext(-1, null, null,null, null, null); coll = CollectionWithPagingInfo.asPaged(null, Arrays.asList(exec1), false, 2, null, searchContext); out = helper.writeResponse(coll); assertTrue("There must NOT BE a 'context' json output", out.contains("\"context\":{}")); 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 d5540c1948..ef3b5b8f88 100644 --- a/source/test-java/org/alfresco/rest/api/search/SerializerTestHelper.java +++ b/source/test-java/org/alfresco/rest/api/search/SerializerTestHelper.java @@ -56,6 +56,7 @@ public class SerializerTestHelper implements RequestReader public static final String JSON = "{ \"query\": {\"query\": \"g*\",\"userQuery\": \"great\",\"language\": \"afts\"}, " + "\"paging\": {\"maxItems\": \"99\",\"skipCount\": \"4\"}," + + "\"includeRequest\": true," + "\"sort\": {\"type\": \"FIELD\",\"field\": \"cm:title\",\"ascending\": \"true\"}," + "\"templates\": [{\"name\": \"mytemp\",\"template\": \"ATEMP\"}, {\"name\": \"yourtemp\",\"template\": \"%cm:content\"}]," + "\"defaults\": {\"namespace\": \"namesp\",\"defaultFieldName\": \"myfield\",\"defaultFTSOperator\": \"AND\", \"textAttributes\": [\"roy\", \"king\"]},"