This is an automated email from the ASF dual-hosted git repository.
ilgrosso pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/syncope.git
The following commit(s) were added to refs/heads/master by this push:
new d5bb35c8e7 SCIM: improving filtering by complex attributes
d5bb35c8e7 is described below
commit d5bb35c8e7299d620696f0b002e95b399e154694
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);
}