Class 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 #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
    • Constructor Detail

      • 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 Detail

      • 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())
      • 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