protected boolean test()

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