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);
             }

Reply via email to