From 4789c31b3b91df9e7e7f902df9f88505d210f4d9 Mon Sep 17 00:00:00 2001 From: Andrei Rebegea Date: Thu, 15 Jun 2017 11:16:02 +0000 Subject: [PATCH] Merged 5.2.N (5.2.2) to HEAD (5.2) 137059 gjames: Merged searchrep (5.2.1) to 5.2.N (5.2.1) 136807 gjames: SEARCH-339: Adding validation for duplicate interval set labels 1 git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@137574 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../rest/api/search/impl/SearchMapper.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) 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 67111da09c..c5ccc96284 100644 --- a/source/java/org/alfresco/rest/api/search/impl/SearchMapper.java +++ b/source/java/org/alfresco/rest/api/search/impl/SearchMapper.java @@ -26,6 +26,8 @@ package org.alfresco.rest.api.search.impl; +import static java.util.stream.Collectors.groupingBy; +import static java.util.stream.Collectors.toList; import static org.alfresco.rest.api.Nodes.PARAM_INCLUDE_ALLOWABLEOPERATIONS; import static org.alfresco.rest.api.Nodes.PARAM_INCLUDE_ASPECTNAMES; import static org.alfresco.rest.api.Nodes.PARAM_INCLUDE_ASSOCIATION; @@ -37,12 +39,17 @@ import static org.alfresco.service.cmr.search.SearchService.LANGUAGE_FTS_ALFRESC import static org.alfresco.service.cmr.search.SearchService.LANGUAGE_LUCENE; import java.time.ZoneId; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.ListIterator; +import java.util.Map; import java.util.Optional; import java.util.Set; +import java.util.TimeZone; +import java.util.function.Function; import java.util.regex.Matcher; +import java.util.stream.Collectors; import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.repo.search.impl.lucene.LuceneQueryLanguageSPI; @@ -506,6 +513,7 @@ public class SearchMapper if (facetIntervals.getIntervals() != null && !facetIntervals.getIntervals().isEmpty()) { + List intervalLabels = new ArrayList<>(facetIntervals.getIntervals().size()); for (Interval interval:facetIntervals.getIntervals()) { ParameterCheck.mandatory("facetIntervals intervals field", interval.getField()); @@ -515,6 +523,26 @@ public class SearchMapper interval.getSets().addAll(globalSets); } ParameterCheck.mandatoryCollection("facetIntervals intervals sets", interval.getSets()); + + List> duplicateSetLabels = + interval.getSets().stream().collect(groupingBy(IntervalSet::getLabel, Collectors.counting())) + .entrySet().stream().filter(e -> e.getValue().intValue() > 1).collect(toList()); + if (!duplicateSetLabels.isEmpty()) + { + throw new InvalidArgumentException(InvalidArgumentException.DEFAULT_MESSAGE_ID, + new Object[] { ": duplicate set interval label "+duplicateSetLabels.toString() }); + + } + if (interval.getLabel() != null) intervalLabels.add(interval.getLabel()); + } + + List> duplicateIntervalLabels = + intervalLabels.stream().collect(groupingBy(Function.identity(), Collectors.counting())) + .entrySet().stream().filter(e -> e.getValue().intValue() > 1).collect(toList()); + if (!duplicateIntervalLabels.isEmpty()) + { + throw new InvalidArgumentException(InvalidArgumentException.DEFAULT_MESSAGE_ID, + new Object[] { ": duplicate interval label "+duplicateIntervalLabels.toString() }); } }