This is an automated email from the ASF dual-hosted git repository. ilgrosso pushed a commit to branch 3_0_X in repository https://gitbox.apache.org/repos/asf/syncope.git
commit 474a1467bdcbb4d9f907d73f6b470641c5bc312e Author: Francesco Chicchiriccò <[email protected]> AuthorDate: Fri Jul 12 12:38:52 2024 +0200 SCIM: improving filtering by complex attributes --- .../syncope/core/logic/scim/SearchCondVisitor.java | 42 +++++++++++----------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/ext/scimv2/logic/src/main/java/org/apache/syncope/core/logic/scim/SearchCondVisitor.java b/ext/scimv2/logic/src/main/java/org/apache/syncope/core/logic/scim/SearchCondVisitor.java index ad8cc743fc..4fa1c4f6e1 100644 --- a/ext/scimv2/logic/src/main/java/org/apache/syncope/core/logic/scim/SearchCondVisitor.java +++ b/ext/scimv2/logic/src/main/java/org/apache/syncope/core/logic/scim/SearchCondVisitor.java @@ -18,10 +18,10 @@ */ package org.apache.syncope.core.logic.scim; -import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.stream.Collectors; import org.apache.commons.lang3.StringUtils; import org.apache.syncope.common.lib.scim.SCIMComplexConf; import org.apache.syncope.common.lib.scim.SCIMConf; @@ -206,7 +206,7 @@ public class SearchCondVisitor extends SCIMFilterBaseVisitor<SearchCond> { private <E extends Enum<?>> SearchCond complex( final String operator, final String left, final String right, final List<SCIMComplexConf<E>> items) { - if (left.endsWith(".type")) { + if (left.endsWith(".type") && "eq".equals(operator)) { Optional<SCIMComplexConf<E>> item = items.stream(). filter(object -> object.getType().name().equals(StringUtils.strip(right, "\""))).findFirst(); if (item.isPresent()) { @@ -215,16 +215,15 @@ public class SearchCondVisitor extends SCIMFilterBaseVisitor<SearchCond> { attrCond.setType(AttrCond.Type.ISNOTNULL); return SearchCond.getLeaf(attrCond); } - } else if (!conf.getUserConf().getEmails().isEmpty() - && (MULTIVALUE.contains(left) || left.endsWith(".value"))) { - - List<SearchCond> orConds = new ArrayList<>(); - items.forEach(item -> { - AttrCond cond = new AttrCond(); - cond.setSchema(item.getValue()); - cond.setExpression(StringUtils.strip(right, "\"")); - orConds.add(setOperator(cond, operator)); - }); + } else if (MULTIVALUE.contains(left) || left.endsWith(".value")) { + List<SearchCond> orConds = items.stream(). + filter(item -> item.getValue() != null). + map(item -> { + AttrCond cond = new AttrCond(); + cond.setSchema(item.getValue()); + cond.setExpression(StringUtils.strip(right, "\"")); + return setOperator(cond, operator); + }).collect(Collectors.toList()); if (!orConds.isEmpty()) { return SearchCond.getOr(orConds); } @@ -245,16 +244,15 @@ public class SearchCondVisitor extends SCIMFilterBaseVisitor<SearchCond> { attrCond.setType(AttrCond.Type.ISNOTNULL); return SearchCond.getLeaf(attrCond); } - } else if (!conf.getUserConf().getEmails().isEmpty() - && (MULTIVALUE.contains(left) || left.endsWith(".value"))) { - - List<SearchCond> orConds = new ArrayList<>(); - items.forEach(item -> { - AttrCond cond = new AttrCond(); - cond.setSchema(item.getFormatted()); - cond.setExpression(StringUtils.strip(right, "\"")); - orConds.add(setOperator(cond, operator)); - }); + } else if (MULTIVALUE.contains(left) || left.endsWith(".value")) { + List<SearchCond> orConds = items.stream(). + filter(item -> item.getFormatted() != null). + map(item -> { + AttrCond cond = new AttrCond(); + cond.setSchema(item.getFormatted()); + cond.setExpression(StringUtils.strip(right, "\"")); + return setOperator(cond, operator); + }).collect(Collectors.toList()); if (!orConds.isEmpty()) { return SearchCond.getOr(orConds); }
