Class DescriptiveModelCriteria<M,Self extends DescriptiveModelCriteria<M,Self>>

java.lang.Object
org.keycloak.models.map.storage.criteria.DescriptiveModelCriteria<M,Self>
All Implemented Interfaces:
ModelCriteriaBuilder<M,Self>
Direct Known Subclasses:
DefaultModelCriteria, FileCriteriaBuilder

public abstract class DescriptiveModelCriteria<M,Self extends DescriptiveModelCriteria<M,Self>> extends Object implements ModelCriteriaBuilder<M,Self>
Descriptive model criteria implementation which in other words represents a Boolean formula on searchable fields.
Author:
hmlnarik
  • Field Details

  • Constructor Details

    • DescriptiveModelCriteria

      protected DescriptiveModelCriteria(ModelCriteriaNode<M> node)
  • Method Details

    • compare

      public Self compare(SearchableModelField<? super M> modelField, ModelCriteriaBuilder.Operator op, Object... value)
      Description copied from interface: ModelCriteriaBuilder
      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.
      Specified by:
      compare in interface ModelCriteriaBuilder<M,Self extends DescriptiveModelCriteria<M,Self>>
      Parameters:
      modelField - Field on the logical model to be constrained
      op - Operator
      value - Additional operands of the operator.
      Returns:
    • instantiateForNode

      protected abstract Self instantiateForNode(ModelCriteriaNode<M> targetNode)
    • and

      public Self and(Self... mcbs)
      Description copied from interface: ModelCriteriaBuilder
      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))
         );
       
      Specified by:
      and in interface ModelCriteriaBuilder<M,Self extends DescriptiveModelCriteria<M,Self>>
    • or

      public Self or(Self... mcbs)
      Description copied from interface: ModelCriteriaBuilder
      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)
         );
       
      Specified by:
      or in interface ModelCriteriaBuilder<M,Self extends DescriptiveModelCriteria<M,Self>>
    • not

      public Self not(Self mcb)
      Description copied from interface: ModelCriteriaBuilder
      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.

      Specified by:
      not in interface ModelCriteriaBuilder<M,Self extends DescriptiveModelCriteria<M,Self>>
      Returns:
    • flashToModelCriteriaBuilder

      public <C extends ModelCriteriaBuilder<M, C>> C flashToModelCriteriaBuilder(C mcb)
      Copies contents of this ModelCriteriaBuilder into another ModelCriteriaBuilder.
      Parameters:
      mcb - ModelCriteriaBuilder to copy the contents onto
      Returns:
      Updated ModelCriteriaBuilder
    • partiallyEvaluate

      public Self partiallyEvaluate(DescriptiveModelCriteria.AtomicFormulaTester<M> tester)
    • optimize

      public Self optimize()
      Optimizes this formula into another ModelCriteriaBuilder, using the values of ModelCriteriaNode.ExtOperator.__TRUE__ and ModelCriteriaNode.ExtOperator.__FALSE__ accordingly.
      Returns:
      New instance of
    • getSingleRestrictionArgument

      public <T extends DescriptiveModelCriteria<?, ?>> Object getSingleRestrictionArgument(String fieldName)
      Returns the realm ID which limits the results of this criteria. Does not support formulae which include negation of a condition containing the given field. Only supports plain equality (ModelCriteriaBuilder.Operator.EQ), ignores all instances of the field comparison which do not use plain equality.
      Returns:
      null if the field is not contained in the formula, there are multiple mutually different field values in the formula, or the formula contains field check within a negation.
    • isEmpty

      public boolean isEmpty()
    • getNode

      public ModelCriteriaNode<M> getNode()
    • toString

      public String toString()
      Overrides:
      toString in class Object