From eaf1ead705f1213782c43ecad0a1830a6a252372 Mon Sep 17 00:00:00 2001 From: Gethin James Date: Thu, 1 Jun 2017 11:11:53 +0000 Subject: [PATCH] Merged searchrep (5.2.1) to 5.2.N (5.2.1) 136888 msuzuki: Search-340, align range response with interval response git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/DEV/5.2.N/root@137067 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../rest/api/search/impl/ResultMapper.java | 69 ++++--------------- .../rest/api/search/ResultMapperTests.java | 24 ++++--- .../rest/api/search/SearchMapperTests.java | 16 ++++- .../rest/api/search/SerializerTestHelper.java | 2 +- 4 files changed, 45 insertions(+), 66 deletions(-) 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 8b2cdc607e..f98f8d004e 100644 --- a/source/java/org/alfresco/rest/api/search/impl/ResultMapper.java +++ b/source/java/org/alfresco/rest/api/search/impl/ResultMapper.java @@ -30,6 +30,20 @@ import static org.alfresco.rest.api.search.impl.StoreMapper.DELETED; import static org.alfresco.rest.api.search.impl.StoreMapper.HISTORY; import static org.alfresco.rest.api.search.impl.StoreMapper.LIVE_NODES; import static org.alfresco.rest.api.search.impl.StoreMapper.VERSIONS; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; + import org.alfresco.repo.search.impl.lucene.SolrJSONResultSet; import org.alfresco.repo.search.impl.solr.facet.facetsresponse.GenericBucket; import org.alfresco.repo.search.impl.solr.facet.facetsresponse.GenericFacetResponse; @@ -73,19 +87,6 @@ import org.alfresco.util.Pair; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Optional; -import java.util.Set; -import java.util.stream.Collectors; - /** * Maps from a ResultSet to a json public api representation. * @@ -331,7 +332,7 @@ public class ResultMapper facets.addAll(getGenericFacetsForIntervals(facetInterval, searchQuery)); Map>> facetRanges = solrResultSet.getFacetRanges(); - facets.addAll(getGenericFacetsForRanges(facetRanges, searchQuery)); + facets.addAll(RangeResultMapper.getGenericFacetsForRanges(facetRanges, searchQuery)); List stats = getFieldStats(searchRequestContext, solrResultSet.getStats()); List pimped = getPivots(searchRequestContext, solrResultSet.getPivotFacets(), stats); @@ -498,46 +499,6 @@ public class ResultMapper } return Collections.emptyList(); } - /** - * Transforms the facet range response into generic facet response. - * @param facetFields - * @param searchQuery - * @return GenericFacetResponse - */ - protected static List getGenericFacetsForRanges( Map>> facetFields, SearchQuery searchQuery) - { - List ffcs = new ArrayList<>(facetFields.size()); - if (facetFields != null && !facetFields.isEmpty() && searchQuery.getQuery() != null) - { - for (Entry>> facet : facetFields.entrySet()) - { - List buckets = new ArrayList<>(); - facet.getValue().forEach(action -> buckets.add(buildGenericBucketFromRange(facet.getKey(), (Map) action))); - ffcs.add(new GenericFacetResponse(FACET_TYPE.range, facet.getKey(), buckets)); - } - } - return ffcs; - } - private static GenericBucket buildGenericBucketFromRange(String facetField, Map facet) - { - String from = facet.get(GenericFacetResponse.START); - String to = facet.get(GenericFacetResponse.END); - String label = facet.get(GenericFacetResponse.LABEL); - facet.remove(GenericFacetResponse.LABEL); - String filterQ = String.format("%s:(%s TO %s)", - facetField, - from, - to); - return new GenericBucket(label, - filterQ, - null, - new HashSet(Arrays.asList(new SimpleMetric(METRIC_TYPE.count,facet.get(GenericFacetResponse.COUNT)))), - null, - facet); - - } - - /** * Returns generic faceting responses for Intervals * @param facetFields 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 9773389f4e..da975c32c1 100644 --- a/source/test-java/org/alfresco/rest/api/search/ResultMapperTests.java +++ b/source/test-java/org/alfresco/rest/api/search/ResultMapperTests.java @@ -478,37 +478,43 @@ public class ResultMapperTests assertEquals(2, rangeFacets.size()); assertEquals(4, rangeFacets.get(0).getBuckets().size()); assertEquals("created",rangeFacets.get(0).getLabel()); - assertEquals("2015-09-29T10:45:15.729Z - 2016-01-07T10:45:15.729Z",rangeFacets.get(0).getBuckets().get(0).getLabel()); + assertEquals("[2015-09-29T10:45:15.729Z - 2016-01-07T10:45:15.729Z)",rangeFacets.get(0).getBuckets().get(0).getLabel()); Object[] metrics1 = rangeFacets.get(0).getBuckets().get(0).getMetrics().toArray(); assertEquals("0",((SimpleMetric) metrics1[0]).getValue().get("count")); - assertEquals("created:(2015-09-29T10:45:15.729Z TO 2016-01-07T10:45:15.729Z)", rangeFacets.get(0).getBuckets().get(0).getFilterQuery()); + assertEquals("created:[2015-09-29T10:45:15.729Z TO 2016-01-07T10:45:15.729Z>", rangeFacets.get(0).getBuckets().get(0).getFilterQuery()); + assertEquals(null,rangeFacets.get(0).getBuckets().get(0).getBucketInfo().get("count")); + assertEquals("false",rangeFacets.get(0).getBuckets().get(0).getBucketInfo().get("endInclusive")); + assertEquals("true",rangeFacets.get(0).getBuckets().get(0).getBucketInfo().get("startInclusive")); assertEquals(3, rangeFacets.get(1).getBuckets().size()); assertEquals("content.size",rangeFacets.get(1).getLabel()); - assertEquals("0 - 100",rangeFacets.get(1).getBuckets().get(0).getLabel()); + assertEquals("[0 - 100)",rangeFacets.get(1).getBuckets().get(0).getLabel()); Object[] metrics = rangeFacets.get(1).getBuckets().get(0).getMetrics().toArray(); assertEquals("4",((SimpleMetric) metrics[0]).getValue().get("count")); - assertEquals("content.size:(0 TO 100)", rangeFacets.get(1).getBuckets().get(0).getFilterQuery()); - + assertEquals("content.size:[0 TO 100>", rangeFacets.get(1).getBuckets().get(0).getFilterQuery()); + assertEquals(null,rangeFacets.get(1).getBuckets().get(0).getBucketInfo().get("count")); Map facetInfo = rangeFacets.get(1).getBuckets().get(0).getBucketInfo(); assertEquals("0",facetInfo.get("start")); assertEquals("100",facetInfo.get("end")); - assertEquals("100 - 200",rangeFacets.get(1).getBuckets().get(1).getLabel()); + assertEquals("[100 - 200)",rangeFacets.get(1).getBuckets().get(1).getLabel()); metrics = rangeFacets.get(1).getBuckets().get(1).getMetrics().toArray(); assertEquals("6",((SimpleMetric) metrics[0]).getValue().get("count")); facetInfo = rangeFacets.get(1).getBuckets().get(1).getBucketInfo(); assertEquals("100",facetInfo.get("start")); assertEquals("200",facetInfo.get("end")); - assertEquals("content.size:(100 TO 200)", rangeFacets.get(1).getBuckets().get(1).getFilterQuery()); + assertEquals("content.size:[100 TO 200>", rangeFacets.get(1).getBuckets().get(1).getFilterQuery()); + assertEquals(null,rangeFacets.get(1).getBuckets().get(1).getBucketInfo().get("count")); + assertEquals("false",rangeFacets.get(1).getBuckets().get(0).getBucketInfo().get("endInclusive")); + assertEquals("true",rangeFacets.get(1).getBuckets().get(0).getBucketInfo().get("startInclusive")); - assertEquals("200 - 300",rangeFacets.get(1).getBuckets().get(2).getLabel()); + assertEquals("[200 - 300)",rangeFacets.get(1).getBuckets().get(2).getLabel()); metrics = rangeFacets.get(1).getBuckets().get(2).getMetrics().toArray(); assertEquals("3",((SimpleMetric) metrics[0]).getValue().get("count")); facetInfo = rangeFacets.get(1).getBuckets().get(2).getBucketInfo(); assertEquals("200",facetInfo.get("start")); assertEquals("300",facetInfo.get("end")); - assertEquals("content.size:(200 TO 300)", rangeFacets.get(1).getBuckets().get(2).getFilterQuery()); + assertEquals("content.size:[200 TO 300>", rangeFacets.get(1).getBuckets().get(2).getFilterQuery()); } @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 a5b6acfda3..359d4ac038 100644 --- a/source/test-java/org/alfresco/rest/api/search/SearchMapperTests.java +++ b/source/test-java/org/alfresco/rest/api/search/SearchMapperTests.java @@ -34,6 +34,13 @@ import static org.alfresco.service.cmr.search.SearchService.LANGUAGE_FTS_ALFRESC import static org.alfresco.service.cmr.search.SearchService.LANGUAGE_LUCENE; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + import org.alfresco.rest.api.search.context.SearchRequestContext; import org.alfresco.rest.api.search.impl.SearchMapper; import org.alfresco.rest.api.search.impl.StoreMapper; @@ -1000,12 +1007,17 @@ public class SearchMapperTests assertEquals(searchParameters.getRanges(), rangeParams); rangeParams.clear(); - rangeParams.add(new RangeParameters("content.size", "0", "100000", "1000",true,"before","lower",null,null)); + List includes = new ArrayList(); + includes.add("lower"); + List other = new ArrayList(); + includes.add("before"); + + rangeParams.add(new RangeParameters("content.size", "0", "100000", "1000",true, other,includes,null,null)); searchMapper.fromRange(searchParameters, rangeParams); assertEquals(searchParameters.getRanges(), rangeParams); //Assert multiple ranges - rangeParams.add(new RangeParameters("created", "2015-09-29T10:45:15.729Z", "2016-09-29T10:45:15.729Z", "+100DAY", true, "before", "lower", null, null)); + rangeParams.add(new RangeParameters("created", "2015-09-29T10:45:15.729Z", "2016-09-29T10:45:15.729Z", "+100DAY", true, other, includes, null, null)); searchMapper.fromRange(searchParameters, rangeParams); assertEquals(searchParameters.getRanges(), rangeParams); assertEquals(2,searchParameters.getRanges().size()); 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 06df10a888..4c09ac0288 100644 --- a/source/test-java/org/alfresco/rest/api/search/SerializerTestHelper.java +++ b/source/test-java/org/alfresco/rest/api/search/SerializerTestHelper.java @@ -64,7 +64,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\"}, {\"field\": \"owner\",\"label\": \"ownerLabel\"}]}," + "\"facetQueries\": [{\"query\": \"cm:created:bob\",\"label\": \"small\"}]," + "\"pivots\": [{\"key\": \"mylabel\"}]," - + "\"ranges\": [{\"field\": \"content.size\",\"start\": \"0\",\"end\": \"300\",\"gap\": \"100\"}]," + + "\"ranges\": [{\"field\": \"content.size\",\"start\": \"0\",\"end\": \"300\",\"gap\": \"100\",\"include\":[\"lower\"]}]," + "\"facetIntervals\": {\"sets\": [{ \"label\": \"king\", \"start\": \"1\", \"end\": \"2\",\"startInclusive\": true,\"endInclusive\": false}]" + ",\"intervals\": [{\"field\": \"cm:creator\",\"label\": \"creator\"," + "\"sets\": [{\"label\": \"last\",\"start\": \"a\",\"end\": \"b\",\"startInclusive\": false}]"