org.keycloak.models.map.storage

## Interface ModelCriteriaBuilder<M>

- All Known Implementing Classes:
    MapModelCriteriaBuilder

      public interface ModelCriteriaBuilder<M>

  Builder for criteria that can be used to limit results obtained from the store. This class is used for similar purpose as e.g. JPA's `CriteriaBuilder`, however it is much simpler version as it is tailored to very specific needs of future Keycloak store.

  Implementations are expected to be immutable. The expected use is like this:

       cb = storage.getCriteriaBuilder();
       storage.read(
         cb.or(
           cb.compare(FIELD1, EQ, 1).compare(FIELD2, EQ, 2),
           cb.compare(FIELD1, EQ, 3).compare(FIELD2, EQ, 4)
         )
       );

  The above code should read items where `(FIELD1 == 1 && FIELD2 == 2) || (FIELD1 == 3 && FIELD2 == 4)`.

  It is equivalent to this:

       cb = storage.getCriteriaBuilder();
       storage.read(
         cb.or(
           cb.and(cb.compare(FIELD1, EQ, 1), cb.compare(FIELD2, EQ, 2)),
           cb.and(cb.compare(FIELD1, EQ, 3), cb.compare(FIELD2, EQ, 4))
         )
       );

  Author:
    hmlnarik

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Interface and Description
    --- | ---
    `static class` | `ModelCriteriaBuilder.Operator` The operators are very basic ones for this use case.

  - ### Method Summary

    All Methods Instance Methods Abstract Methods Default Methods
    Modifier and Type | Method and Description
    --- | ---
    `ModelCriteriaBuilder<M>` | `and(ModelCriteriaBuilder<M>... builders)` Creates and returns a new instance of `ModelCriteriaBuilder` that combines the given builders with the Boolean AND operator.
    `ModelCriteriaBuilder<M>` | `compare(SearchableModelField<M> modelField, ModelCriteriaBuilder.Operator op, Object... value)` Adds a constraint for the given model field to this criteria builder and returns a criteria builder that is combined with the the new constraint.
    `ModelCriteriaBuilder<M>` | `not(ModelCriteriaBuilder<M> builder)` Creates and returns a new instance of `ModelCriteriaBuilder` that negates the given builder.
    `ModelCriteriaBuilder<M>` | `or(ModelCriteriaBuilder<M>... builders)` Creates and returns a new instance of `ModelCriteriaBuilder` that combines the given builders with the Boolean OR operator.
    `default <T extends ModelCriteriaBuilder> T` | `unwrap(Class<T> clazz)` Returns this object cast to the given class, or `null` if the class cannot be cast to that `clazz`.

- - ### Method Detail

    - #### compare

          ModelCriteriaBuilder<M> compare(SearchableModelField<M> modelField,
                                          ModelCriteriaBuilder.Operator op,
                                          Object... value)

      Adds a constraint for the given model field to this criteria builder and returns a criteria builder that is combined with the the new constraint. The resulting constraint is a logical conjunction (i.e. AND) of the original constraint present in this `ModelCriteriaBuilder` and the given operator.
      Parameters:
        `modelField` - Field on the logical model to be constrained
        `op` - Operator
        `value` - Additional operands of the operator.
      Returns:
      Throws:
        `CriterionNotSupported` - If the operator is not supported for the given field.

    - #### and

          ModelCriteriaBuilder<M> and(ModelCriteriaBuilder<M>... builders)

      Creates and returns a new instance of `ModelCriteriaBuilder` that combines the given builders with the Boolean AND operator.

      Predicate coming out of `and` on an empty array of `builders` (i.e. empty conjunction) is always `true`.

             cb = storage.getCriteriaBuilder();
             storage.read(cb.or(
               cb.and(cb.compare(FIELD1, EQ, 1), cb.compare(FIELD2, EQ, 2)),
               cb.and(cb.compare(FIELD1, EQ, 3), cb.compare(FIELD2, EQ, 4))
             );

      Throws:
        `CriterionNotSupported` - If the operator is not supported for the given field.

    - #### or

          ModelCriteriaBuilder<M> or(ModelCriteriaBuilder<M>... builders)

      Creates and returns a new instance of `ModelCriteriaBuilder` that combines the given builders with the Boolean OR operator.

      Predicate coming out of `or` on an empty array of `builders` (i.e. empty disjunction) is always `false`.

             cb = storage.getCriteriaBuilder();
             storage.read(cb.or(
               cb.compare(FIELD1, EQ, 1).compare(FIELD2, EQ, 2),
               cb.compare(FIELD1, EQ, 3).compare(FIELD2, EQ, 4)
             );

      Throws:
        `CriterionNotSupported` - If the operator is not supported for the given field.

    - #### not

          ModelCriteriaBuilder<M> not(ModelCriteriaBuilder<M> builder)

      Creates and returns a new instance of `ModelCriteriaBuilder` that negates the given builder.

      Note that if the `builder` has no condition yet, there is nothing to negate: empty negation is always `true`.

      Parameters:
        `builder` -
      Returns:
      Throws:
        `CriterionNotSupported` - If the operator is not supported for the given field.

    - #### unwrap

          default <T extends ModelCriteriaBuilder> T unwrap(Class<T> clazz)

      Returns this object cast to the given class, or `null` if the class cannot be cast to that `clazz`.
      Type Parameters:
        `T` -
      Parameters:
        `clazz` -
      Returns:

Copyright © 2021 JBoss by Red Hat. All rights reserved.