Class Filter

  • All Implemented Interfaces:
    Serializable

    public class Filter
    extends Object
    implements Serializable

    A Filter is used by the Search class to specify a restriction on what results should be returned in the search. For example, if a filter Filter.equal("name","Paul") were added to the search, only objects with the property "name" equal to the string "Paul" would be returned.

    Nested properties can also be specified, for example Filter.greaterThan("employee.age",65).

    Author:
    dwolverton
    See Also:
    Serialized Form
    • Field Detail

      • ROOT_ENTITY

        public static final String ROOT_ENTITY
        Property string representing the root entity of the search. This is just the empty string ("").
        See Also:
        Constant Field Values
      • property

        protected String property
        The name of the property to filter on. It may be nested. Examples: "name", "dateOfBirth", "employee.age", "employee.spouse.job.title"
      • value

        protected Object value
        The value to compare the property with. Should be of a compatible type with the property. Examples: "Fred", new Date(), 45
      • operator

        protected int operator
        The type of comparison to do between the property and the value. The options are limited to the integer constants on this class: OP_EQAUL, OP_NOT_EQUAL, OP_LESS_THAN, OP_GREATER_THAN, LESS_OR_EQUAL, OP_GREATER_OR_EQUAL, OP_IN, OP_NOT_IN, OP_LIKE, OP_ILIKE, OP_NULL, OP_NOT_NULL, OP_EMPTY, OP_NOT_EMPTY, OP_SOME, OP_ALL, OP_NONE, OP_AND, OP_OR, OP_NOT .
    • Constructor Detail

      • Filter

        public Filter()
      • Filter

        public Filter​(String property,
                      Object value,
                      int operator)
      • Filter

        public Filter​(Map<String,​?> filterAsMap)
    • Method Detail

      • reconstructFromMap

        public static Filter reconstructFromMap​(Map<String,​?> filterAsMap)
      • isFilter

        public static boolean isFilter​(Map<String,​?> filter)
      • equal

        public static Filter equal​(String property,
                                   Object value)
        Create a new Filter using the == operator.
      • lessThan

        public static Filter lessThan​(String property,
                                      Object value)
        Create a new Filter using the < operator.
      • greaterThan

        public static Filter greaterThan​(String property,
                                         Object value)
        Create a new Filter using the > operator.
      • lessOrEqual

        public static Filter lessOrEqual​(String property,
                                         Object value)
        Create a new Filter using the <= operator.
      • greaterOrEqual

        public static Filter greaterOrEqual​(String property,
                                            Object value)
        Create a new Filter using the >= operator.
      • in

        public static Filter in​(String property,
                                Collection<?> value)
        Create a new Filter using the IN operator.

        This takes a variable number of parameters. Any number of values can be specified.

      • in

        public static Filter in​(String property,
                                Object... value)
        Create a new Filter using the IN operator.

        This takes a variable number of parameters. Any number of values can be specified.

      • notIn

        public static Filter notIn​(String property,
                                   Collection<?> value)
        Create a new Filter using the NOT IN operator.

        This takes a variable number of parameters. Any number of values can be specified.

      • notIn

        public static Filter notIn​(String property,
                                   Object... value)
        Create a new Filter using the NOT IN operator.

        This takes a variable number of parameters. Any number of values can be specified.

      • like

        public static Filter like​(String property,
                                  String value)
        Create a new Filter using the LIKE operator.
      • ilike

        public static Filter ilike​(String property,
                                   String value)
        Create a new Filter using the ILIKE operator.
      • notEqual

        public static Filter notEqual​(String property,
                                      Object value)
        Create a new Filter using the != operator.
      • isNull

        public static Filter isNull​(String property)
        Create a new Filter using the IS NULL operator.
      • isNotNull

        public static Filter isNotNull​(String property)
        Create a new Filter using the IS NOT NULL operator.
      • isEmpty

        public static Filter isEmpty​(String property)
        Create a new Filter using the IS EMPTY operator.
      • isNotEmpty

        public static Filter isNotEmpty​(String property)
        Create a new Filter using the IS NOT EMPTY operator.
      • and

        public static Filter and​(Filter... filters)
        Create a new Filter using the AND operator.

        This takes a variable number of parameters. Any number of Filters can be specified.

      • or

        public static Filter or​(Filter... filters)
        Create a new Filter using the OR operator.

        This takes a variable number of parameters. Any number of Filters can be specified.

      • not

        public static Filter not​(Filter filter)
        Create a new Filter using the NOT operator.
      • some

        public static Filter some​(String property,
                                  Filter filter)
        Create a new Filter using the SOME operator.
      • all

        public static Filter all​(String property,
                                 Filter filter)
        Create a new Filter using the ALL operator.
      • none

        public static Filter none​(String property,
                                  Filter filter)
        Create a new Filter using the NONE operator. This is equivalent to NOT SOME.
      • custom

        public static Filter custom​(String expression)

        Create a new Filter using a custom JPQL/HQL expression. This can be any valid where-clause type expression. Reference properties by wrapping them with curly braces ({}).

        Here are some examples:

         // Referencing a property in a custom expression
         Filter.custom("{serialNumber} like '%4780%'");
         // comparing two properties
         Filter.custom("{parent.spotCount} > {spotCount} + 4");
         // A constant
         Filter.custom("1 = 1");
         // A function
         Filter.custom("{dueDate} > current_date()");
         // A subquery
         Filter.custom("{id} in (select pc.cat_id from popular_cats pc where pc.color = 'blue')");
         
        Parameters:
        expression - JPQL/HQL where-clause expression
      • custom

        public static Filter custom​(String expression,
                                    Object... values)

        Create a new Filter using a custom JPQL/HQL expression. This can be any valid where-clause type expression. Reference properties by wrapping them with curly braces ({}). The expression can also contain place holders for the Filter values; these are indicated by JPQL-style positional parameters (i.e. a question mark (?) followed by a number indicating the parameter order, starting with one).

        Here are some examples:

         // Referencing a property in a custom expression
         Filter.custom("{serialNumber} like ?1", "%4780%");
         // comparing two properties
         Filter.custom("{parent.spotCount} + ?1 > {spotCount} + ?2", 0, 4);
         // A constant
         Filter.custom("?1 = ?2", 1, 1);
         // A function
         Filter.custom("?1 > current_date()", someDate);
         // A subquery
         Filter.custom("{id} in (select pc.cat_id from popular_cats pc where pc.color = ?1)", "blue");
         
        Parameters:
        expression - JPQL/HQL where-clause expression
        values - one or more values to fill in the numbered placeholders in the expression
      • custom

        public static Filter custom​(String expression,
                                    Collection<?> values)

        Create a new Filter using a custom JPQL/HQL expression. This can be any valid where-clause type expression. Reference properties by wrapping them with curly braces ({}). The expression can also contain place holders for the Filter values; these are indicated by JPQL-style positional parameters (i.e. a question mark (?) followed by a number indicating the parameter order, starting with one).

        Here are some examples:

         // Referencing a property in a custom expression
         Filter.custom("{serialNumber} like ?1", Collections.singleton("%4780%"));
         // comparing two properties
         Filter.custom("{parent.spotCount} + ?1 > {spotCount} + ?2", Arrays.asList(0, 4));
         // A constant
         Filter.custom("?1 = ?2", Arrays.asList(1, 1));
         // A function
         Filter.custom("?1 > current_date()", Collections.singleton(someDate));
         // A subquery
         Filter.custom("{id} in (select pc.cat_id from popular_cats pc where pc.color = ?1)", Collections.singleton("blue"));
         
        Parameters:
        expression - JPQL/HQL where-clause expression
        values - one or more values to fill in the numbered placeholders in the expression
      • add

        public void add​(Filter filter)
        Used with OP_OR and OP_AND filters. These filters take a collection of filters as their value. This method adds a filter to that list.
      • remove

        public void remove​(Filter filter)
        Used with OP_OR and OP_AND filters. These filters take a collection of filters as their value. This method removes a filter from that list.
      • getProperty

        public String getProperty()
      • setProperty

        public void setProperty​(String property)
      • getValue

        public Object getValue()
      • setValue

        public void setValue​(Object value)
      • getOperator

        public int getOperator()
      • setOperator

        public void setOperator​(int operator)
      • getValuesAsList

        public List<?> getValuesAsList()
        Returns the value as a List, converting if necessary. If the value is a List, it will be returned directly. If it is any other Collection type or if it is an Array, an ArrayList will be returned with all the same elements. If the value is any other non-null value, a List containing just that one value will be returned. If it is null, null will be returned.
      • getValuesAsCollection

        public Collection<?> getValuesAsCollection()
        Returns the value as a Collection, converting if necessary. If the value is a Collection, it will be returned directly. If it is an Array, an ArrayList will be returned with all the same elements. If the value is any other non-null value, a Set containing just that one value will be returned. If it is null, null will be returned.
        Returns:
      • isTakesSingleValue

        public boolean isTakesSingleValue()
        Returns:
        true if the operator should have a single value specified.

        EQUAL, NOT_EQUAL, LESS_THAN, LESS_OR_EQUAL, GREATER_THAN, GREATER_OR_EQUAL, LIKE, ILIKE

      • isTakesListOfValues

        public boolean isTakesListOfValues()
        Returns:
        true if the operator should have a list of values specified.

        IN, NOT_IN

      • isTakesNoValue

        public boolean isTakesNoValue()
        Returns:
        true if the operator does not require a value to be specified.

        NULL, NOT_NULL, EMPTY, NOT_EMPTY

      • isTakesSingleSubFilter

        public boolean isTakesSingleSubFilter()
        Returns:
        true if the operator should have a single Filter specified for the value.

        NOT, ALL, SOME, NONE

      • isTakesListOfSubFilters

        public boolean isTakesListOfSubFilters()
        Returns:
        true if the operator should have a list of Filters specified for the value.

        AND, OR

      • isTakesNoProperty

        public boolean isTakesNoProperty()
        Returns:
        true if the operator does not require a property to be specified.

        AND, OR, NOT

      • hashCode

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

        public boolean matches​(MatcherContext context)
      • toQueryString

        public String toQueryString()