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 656135a284..72580c2d2d 100644 --- a/source/java/org/alfresco/rest/api/search/impl/SearchMapper.java +++ b/source/java/org/alfresco/rest/api/search/impl/SearchMapper.java @@ -524,40 +524,43 @@ public class SearchMapper Pivot pivot = piterator.next(); ParameterCheck.mandatoryString("pivot key", pivot.getKey()); String pivotKey = pivot.getKey(); + if (facetFields.getFacets() != null && !facetFields.getFacets().isEmpty()) { - Optional found = facetFields.getFacets().stream().filter( - queryable -> pivotKey.equals(queryable.getLabel()!=null?queryable.getLabel():queryable.getField())).findFirst(); + Optional found = facetFields.getFacets().stream() + .filter(queryable -> pivotKey.equals(queryable.getLabel() != null ? queryable.getLabel() : queryable.getField())).findFirst(); if (found.isPresent()) { sp.addPivot(found.get().getField()); facetFields.getFacets().remove(found.get()); searchRequestContext.getPivotKeys().put(found.get().getField(), pivotKey); + continue; } - else + } + + if (piterator.hasNext()) + { + //Its not the last one so lets complain + throw new InvalidArgumentException(InvalidArgumentException.DEFAULT_MESSAGE_ID, + new Object[] { ": Pivot parameter " + pivotKey + " is does not reference a facet Field." }); + } + else + { + if (stats != null && !stats.isEmpty()) { - if (piterator.hasNext()) + //It is the last one so it can reference stats + Optional foundStat = stats.stream().filter(stas -> pivotKey.equals(stas.getLabel()!=null?stas.getLabel():stas.getField())).findFirst(); + if (foundStat.isPresent()) { - //Its not the last one so lets complain - throw new InvalidArgumentException(InvalidArgumentException.DEFAULT_MESSAGE_ID, - new Object[] { ": Pivot parameter " + pivotKey + " is does not reference a facet Field." }); - } - else - { - //It is the last one so it can reference facetquery or stats - /** - Optional foundStat = stats.stream().filter(stas -> pivotKey.equals(stas.getLabel())).findFirst(); - if (foundStat.isPresent()) - { - stats.remove(foundStat.get()); - } - **/ sp.addPivot(pivotKey); searchRequestContext.getPivotKeys().put(pivotKey, pivotKey); + continue; } - } + } + throw new InvalidArgumentException(InvalidArgumentException.DEFAULT_MESSAGE_ID, + new Object[] { ": Pivot parameter " + pivotKey + " is does not reference a facet Field or stats." }); } } } 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 b81cb5d6b4..d90c06a49f 100644 --- a/source/test-java/org/alfresco/rest/api/search/SearchMapperTests.java +++ b/source/test-java/org/alfresco/rest/api/search/SearchMapperTests.java @@ -697,8 +697,15 @@ public class SearchMapperTests SearchRequestContext searchRequestContext = SearchRequestContext.from(minimalQuery()); - //"bob" doesn't refer to a field facet but its the last one so lets be kind - searchMapper.fromPivot(searchParameters, null, ff, Arrays.asList(new Pivot("bob")), searchRequestContext); + //"bob" doesn't refer to a field facet but its the last one so needs to refer to a stat + StatsRequestParameters bobf = new StatsRequestParameters("bob", null, null, null,null, null, null, null,null, null, null, null,null, null, null, null); + StatsRequestParameters bobL = new StatsRequestParameters("creator", "bob", null, null,null, null, null, null,null, null, null, null,null, null, null, null); + searchMapper.fromPivot(searchParameters, Arrays.asList(bobf), ff, Arrays.asList(new Pivot("bob")), searchRequestContext); + assertEquals(1 ,searchParameters.getPivots().size()); + + searchParameters = new SearchParameters(); + searchMapper.fromPivot(searchParameters, Arrays.asList(bobf), ff, Arrays.asList(new Pivot("bob")), searchRequestContext); + assertEquals(1 ,searchParameters.getPivots().size()); try {