in scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/InMemoryScimFilterMatcher.java [169:216]
protected boolean test(Schema.Attribute attribute, Object actualValue) {
if (actualValue == null) {
return false;
}
if (attribute.isMultiValued()) {
log.warn("Invalid expression, target is collection");
return false;
}
CompareOperator op = expression.getOperation();
Object compareValue = expression.getCompareValue();
if (op == CompareOperator.EQ) {
if (isStringExpression(attribute, compareValue) && !attribute.isCaseExact()) {
return actualValue.toString().equalsIgnoreCase(compareValue.toString());
}
return compareValue.equals(actualValue);
}
if (op == CompareOperator.NE) {
if (isStringExpression(attribute, compareValue) && !attribute.isCaseExact()) {
return !actualValue.toString().equalsIgnoreCase(compareValue.toString());
}
return !compareValue.equals(actualValue);
}
if (op == CompareOperator.SW) {
return isStringExpression(attribute, compareValue)
&& actualValue.toString().startsWith(compareValue.toString());
}
if (op == CompareOperator.EW) {
return isStringExpression(attribute, compareValue)
&& actualValue.toString().endsWith(compareValue.toString());
}
if (op == CompareOperator.CO) {
return isStringExpression(attribute, compareValue)
&& actualValue.toString().contains(compareValue.toString());
}
if (actualValue instanceof Comparable) {
Comparable actual = (Comparable) actualValue;
Comparable compare = (Comparable) compareValue;
return CompareOperatorPredicate.naturalOrder(op, compare).test(actual);
}
throw new ScimResourceInvalidException("Unsupported operation in filter: " + op.name());
}