Class Predicate

java.lang.Object
com.day.cq.search.Predicate
All Implemented Interfaces:
Cloneable
Direct Known Subclasses:
PredicateGroup

public class Predicate extends Object implements Cloneable
A Predicate is a single constraint for a Query. It is a pure data model object, consisting of a parameter map based on key-value string pairs.

Each Predicate has a type (getType()) that is used to find the right PredicateEvaluator that will handle this predicate and eg. translate it into an XPath statement.

Using the composite pattern, the subclass PredicateGroup allows to group multiple predicates into one. This allows the query to actually consist of a predicate tree and reflects more complex queries that include sub-terms. The methods getName(), getPath() and

invalid reference
#getParent()
return that hierarchy information. The name/path is important, because facets will be returned in a map with the appropriate predicate path as key (see SearchResult.getFacets()).

The parameters are set via the set(String, String) method and retrieved via get(String), get(String, String) or getParameters(). Predicates are also Cloneable, so that it is easy to copy them.

Since:
5.2
  • Field Details

    • PARAM_OFFSET

      public static final String PARAM_OFFSET
      See Also:
    • PARAM_LIMIT

      public static final String PARAM_LIMIT
      See Also:
    • PARAM_EXCERPT

      public static final String PARAM_EXCERPT
      See Also:
    • PARAM_FACET_STRATEGY

      public static final String PARAM_FACET_STRATEGY
      See Also:
    • PARAM_OPTIONS_TRAVERSAL

      public static final String PARAM_OPTIONS_TRAVERSAL
      How to handle traversals - translated into Query Option 'traversal'. Valid values = ok|fail|warn
       p.traversal=ok
       
      See Also:
    • TRAVERSAL_OK

      public static final String TRAVERSAL_OK
      See Also:
    • TRAVERSAL_FAIL

      public static final String TRAVERSAL_FAIL
      See Also:
    • TRAVERSAL_WARN

      public static final String TRAVERSAL_WARN
      See Also:
    • PARAM_OPTIONS_INDEXTAG

      public static final String PARAM_OPTIONS_INDEXTAG
      Translated into Query Option 'index tag'
       p.indexTag=tagName
       
      See Also:
    • PARAM_GUESS_TOTAL

      public static final String PARAM_GUESS_TOTAL
      If true, this allows the implementation to optimize the query and return just a guessed count. Defaults to false, in which case the total is always accurate.
      Since:
      5.4
      See Also:
    • ORDER_BY

      public static final String ORDER_BY
      See Also:
    • PARAM_SORT

      public static final String PARAM_SORT
      Parameter on orderby to control whether the sort order is ascending (default) or descending. Possible values are asc and desc.
       orderby.sort=desc
       
      See Also:
    • SORT_ASCENDING

      public static final String SORT_ASCENDING
      See Also:
    • SORT_DESCENDING

      public static final String SORT_DESCENDING
      See Also:
    • PARAM_CASE

      public static final String PARAM_CASE
      Parameter on orderby to control whether sorting is case insensitive or not. Only the value ignore is supported, in which case "a" comes before "B". If empty or left out, sorting is case sensitive, e.g. "B" comes before "a".
       orderby.case=ignore
       
      See Also:
    • IGNORE_CASE

      public static final String IGNORE_CASE
      See Also:
  • Constructor Details

    • Predicate

      public Predicate(String type)
      Creates a Predicate of the given type. Note that the type cannot be changed later. The name will be deducted automatically, see getName(). Initially no parameters will be set and no parent will be present.
      Parameters:
      type - predicate type name for finding the right PredicateEvaluator
    • Predicate

      public Predicate(String name, String type)
      Creates a Predicate with the given name and type. Note that name and type cannot be changed later. Initially no parameters will be set and no parent will be present.

      The name should not be null - this case is reserved for a root PredicateGroup (using PredicateGroup()).

      Parameters:
      name - identifying name for this predicate
      type - predicate type name for finding the right PredicateEvaluator
  • Method Details

    • getType

      public String getType()
      Returns the predicate type name for finding the right PredicateEvaluator.
    • getName

      public String getName()
      Returns the name of this predicate. The name is used to allow round-trip serialization of predicate trees (where the order is encoded in the names) and for identifying predicates in the facet map, in logging or other debug output.

      When a predicate is included in PredicateGroup, the names of the parent predicates will make up the path, eg. parent.child.grandchild. The name must not be changed after the predicate is passed to a Query.

      If no name was set previously, it will be automatically created. If this predicate is part of a group, it will get a name of the form "N_type" where N is the 1-based index of its position in the parent group and "type" is it's type. If it does not have a parent group, the name will only consist of the type.

      Returns:
      identifying name for this predicate (can be null if no name was set)
    • getPath

      public String getPath()
      Returns the path in a predicate tree of PredicateGroups to this predicate, eg. parent.child.grandchild. This can be null if no name was set. The path is used for identifying predicates in the facet map, in logging or other debug output.
    • get

      public String get(String parameterName)
      Returns the value for the given parameter name or null if that parameter is not set. Parameters always have String values.
    • get

      public String get(String parameterName, String defaultValue)
      Returns the value for the given parameter name or the given default value if that parameter is not set. Parameters always have String values.
    • getBool

      public boolean getBool(String parameterName)
      Returns the boolean value for the given parameter name or false if that parameter is not set, ie. it assumes false as the default of the boolean parameter.

      Since actual parameter values are strings, it is considered true if the string value is either "true" or "on" (used by HTTP forms for checkboxes).

    • set

      public Predicate set(String parameterName, String value)
      Sets the parameter 'parameterName' to the value given by 'value'. Parameters have always String values.
      Returns:
      returns itself for simple one-liners: group.add(new Predicate("mytype", "type").set("type", "nt:file"));
    • hasNonEmptyValue

      public boolean hasNonEmptyValue(String parameterName)
      Returns true when there is a parameter present with the given name and if the string value is not empty. Parameters always have String values.
    • getParameters

      public Map<String,String> getParameters()
      Returns an unmodifiable map of all parameters and their values.
    • setIgnored

      public void setIgnored(boolean ignore)
      This is used only during evaluation and marks this predicate as "invisible" for any PredicateEvaluator that will encounter it. Don't use that method when creating a query.
      Parameters:
      ignore - true if this predicate should be ignored by evaluators (default is false)
    • ignored

      public boolean ignored()
      This is used only during evaluation and indicates that this predicate is marked as "invisible" for any PredicateEvaluator that will encounter it. This method has no use for clients of the querybuilder API.
      Returns:
      true if this predicate should be ignored by evaluators (default is false)
    • clone

      public Predicate clone()
      Clones this predicate so that the returned clone can be used completely independently from this original. Same as clone(false).
    • clone

      public Predicate clone(boolean resetName)
      Clones this predicate so that the returned clone can be used completely independently from this original. Allows for automatic reset of the name.
      Parameters:
      resetName - whether to reset the name to null so that they will be automatically deducted (see getName())
    • equals

      public boolean equals(Object obj)
      Overrides:
      equals in class Object
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • toString

      public String toString()
      Overwrites the standard Object.toString() implementation and returns a debug-friendly string representation of the predicate.
      Overrides:
      toString in class Object