From 35b5980abb9188c77e8b299d7a3bae81d6b46b4c Mon Sep 17 00:00:00 2001 From: Gethin James Date: Thu, 1 Jun 2017 11:10:53 +0000 Subject: [PATCH] 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/BRANCHES/DEV/5.2.N/root@137059 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() }); } }