Class Criterion

All Implemented Interfaces:
HasHandlers
Direct Known Subclasses:
AdvancedCriteria

public class Criterion extends Criteria
An object representing a criterion to apply to a record.

A criterion is part of the definition of an AdvancedCriteria object, which is used to filter records according to search criteria.

A criterion consists of an operator and typically a fieldName from a Record and a value to compare to. However some operators either don't require a value (eg, isNull) or act on other criteria rather than directly on a Record's fields (eg, the "and" and "or" logical operators). Also, it is possible to specify a fieldQuery instead of a fieldName and/or a valueQuery instead of a value

A shortcut form is also allowed where only fieldName and value values are provided. In this case the operator is assumed to be "equals".

See Also:
  • Constructor Details

    • Criterion

      public Criterion()
    • Criterion

      public Criterion(JavaScriptObject jsObj)
    • Criterion

      public Criterion(Criterion c)
    • Criterion

      public Criterion(Criterion[] criterias)
    • Criterion

      public Criterion(OperatorId operator, Criterion[] criterias)
    • Criterion

      public Criterion(OperatorId operator)
    • Criterion

      public Criterion(String fieldName)
    • Criterion

      public Criterion(String fieldName, OperatorId operator)
    • Criterion

      public Criterion(String fieldName, OperatorId operator, Integer value)
      Constructor for Criterion with fieldName, operator and value.
      Parameters:
      fieldName - the field name
      operator - the operator
      value - the value
    • Criterion

      public Criterion(String fieldName, OperatorId operator, Integer start, Integer end)
      Constructor for Criterion with fieldName, operator, start and end values. This constructor is only valid when the operator is OperatorId.BETWEEN or OperatorId.BETWEEN_INCLUSIVE
      Parameters:
      fieldName - the field name
      operator - the operator
      start - the start value
      end - the end value
    • Criterion

      public Criterion(String fieldName, OperatorId operator, String value)
      Constructor for Criterion with fieldName, operator and value.
      Parameters:
      fieldName - the field name
      operator - the operator
      value - the value
    • Criterion

      public Criterion(String fieldName, OperatorId operator, String start, String end)
      Constructor for Criterion with fieldName, operator, start and end values. This constructor is only valid when the operator is OperatorId.BETWEEN or OperatorId.BETWEEN_INCLUSIVE
      Parameters:
      fieldName - the field name
      operator - the operator
      start - the start value
      end - the end value
    • Criterion

      public Criterion(String fieldName, OperatorId operator, Float value)
      Constructor for Criterion with fieldName, operator and value.
      Parameters:
      fieldName - the field name
      operator - the operator
      value - the value
    • Criterion

      public Criterion(String fieldName, OperatorId operator, Float start, Float end)
      Constructor for Criterion with fieldName, operator, start and end values. This constructor is only valid when the operator is OperatorId.BETWEEN or OperatorId.BETWEEN_INCLUSIVE
      Parameters:
      fieldName - the field name
      operator - the operator
      start - the start value
      end - the end value
    • Criterion

      public Criterion(String fieldName, OperatorId operator, Date value)
      Constructor for Criterion with fieldName, operator and value.
      Parameters:
      fieldName - the field name
      operator - the operator
      value - the value
    • Criterion

      public Criterion(String fieldName, OperatorId operator, Date start, Date end)
      Constructor for Criterion with fieldName, operator, start and end values. This constructor is only valid when the operator is OperatorId.BETWEEN or OperatorId.BETWEEN_INCLUSIVE
      Parameters:
      fieldName - the field name
      operator - the operator
      start - the start value
      end - the end value
    • Criterion

      public Criterion(String fieldName, OperatorId operator, RelativeDate value)
      Constructor for Criterion with fieldName, operator and RelativeDate value.
      Parameters:
      fieldName - the field name
      operator - the operator
      value - the RelativeDate value
    • Criterion

      public Criterion(String fieldName, OperatorId operator, RelativeDate start, RelativeDate end)
      Constructor for Criterion with fieldName, operator, start and end RelativeDate values. This constructor is only valid when the operator is OperatorId.BETWEEN or OperatorId.BETWEEN_INCLUSIVE
      Parameters:
      fieldName - the field name
      operator - the operator
      start - the start value
      end - the end value
    • Criterion

      public Criterion(String fieldName, OperatorId operator, Boolean value)
      Constructor for Criterion with fieldName, operator and value.
      Parameters:
      fieldName - the field name
      operator - the operator
      value - the value
    • Criterion

      public Criterion(String fieldName, OperatorId operator, Long value)
      Constructor for Criterion with fieldName, operator and value. Note that JavaScript does not natively have an equivalent format to Java long (fixed point 64 bit). As such the value passed in will be converted to a double value for storage.
      Parameters:
      fieldName - the field name
      operator - the operator
      value - the value
    • Criterion

      public Criterion(String fieldName, OperatorId operator, Long start, Long end)
      Constructor for Criterion with fieldName, operator, start and end values. This constructor is only valid when the operator is OperatorId.BETWEEN or OperatorId.BETWEEN_INCLUSIVE
      Parameters:
      fieldName - the field name
      operator - the operator
      start - the start value
      end - the end value
    • Criterion

      public Criterion(String fieldName, OperatorId operator, Integer[] value)
    • Criterion

      public Criterion(String fieldName, OperatorId operator, String[] value)
    • Criterion

      public Criterion(String fieldName, OperatorId operator, Float[] value)
    • Criterion

      public Criterion(String fieldName, OperatorId operator, Long[] value)
    • Criterion

      public Criterion(String fieldName, OperatorId operator, Date[] value)
    • Criterion

      public Criterion(String fieldName, OperatorId operator, Boolean[] value)
  • Method Details

    • getOrCreateRef

      public static Criterion getOrCreateRef(JavaScriptObject jsObj)
    • setCriteria

      public Criterion setCriteria(Criterion... criteria)
      For a criterion with an operator that acts on other criteria (eg "and", "or"), a list of sub-criteria that are grouped together by the operator.
      Parameters:
      criteria - New criteria value. Default value is null
      Returns:
      Criterion instance, for chaining setter calls
      See Also:
    • getCriteria

      public Criterion[] getCriteria()
      For a criterion with an operator that acts on other criteria (eg "and", "or"), a list of sub-criteria that are grouped together by the operator.
      Returns:
      Current criteria value. Default value is null
      See Also:
    • setFieldName

      public Criterion setFieldName(String fieldName)
      Name of the field in each Record that this criterion applies to. Not applicable for a criterion with sub-criteria. Can be specified as a dataPath to allow matching nested objects. Use '/' as delimiters for dataPath. See dataPath for more information.

      fieldQuery shortcuts

      fieldName can also be used to express a compact form of related-field filtering. If you set this property to the qualified name of a field on a related DataSource, it will be transformed into a basic AdvancedCriterionSubquery. For example, say you have an Order dataSource, which has a foreign key relation to your Customer dataSource, and your Customer dataSource has a "region" field. If you wanted to fetch all Orders for Customers in the EMEA region, you could declare criteria like this:
           {fieldName: "Customer.region", operator: "equals", value: "EMEA"}
        
      This would be transformed into a subquery filter that would select only the records you want:
        {
             fieldQuery: {
                 dataSource: "Customer",
                 queryOutput: "region"
             }, operator: "equals", value: "EMEA"
        }
        
      This transformation takes place before the filtering subsystem even sees the criteria, so declaring the shortcut form via fieldName leads to exactly the same filtering behavior as if you specified the subquery directly as a fieldQuery

      See the AdvancedCriterionSubquery overview linked above for more details of the extremely powerful subquery filtering options.

      Parameters:
      fieldName - New fieldName value. Default value is null
      Returns:
      Criterion instance, for chaining setter calls
      See Also:
    • getFieldName

      public String getFieldName()
      Name of the field in each Record that this criterion applies to. Not applicable for a criterion with sub-criteria. Can be specified as a dataPath to allow matching nested objects. Use '/' as delimiters for dataPath. See dataPath for more information.

      fieldQuery shortcuts

      fieldName can also be used to express a compact form of related-field filtering. If you set this property to the qualified name of a field on a related DataSource, it will be transformed into a basic AdvancedCriterionSubquery. For example, say you have an Order dataSource, which has a foreign key relation to your Customer dataSource, and your Customer dataSource has a "region" field. If you wanted to fetch all Orders for Customers in the EMEA region, you could declare criteria like this:
           {fieldName: "Customer.region", operator: "equals", value: "EMEA"}
        
      This would be transformed into a subquery filter that would select only the records you want:
        {
             fieldQuery: {
                 dataSource: "Customer",
                 queryOutput: "region"
             }, operator: "equals", value: "EMEA"
        }
        
      This transformation takes place before the filtering subsystem even sees the criteria, so declaring the shortcut form via fieldName leads to exactly the same filtering behavior as if you specified the subquery directly as a fieldQuery

      See the AdvancedCriterionSubquery overview linked above for more details of the extremely powerful subquery filtering options.

      Returns:
      Current fieldName value. Default value is null
      See Also:
    • setFieldQuery

      public Criterion setFieldQuery(AdvancedCriterionSubquery fieldQuery)
      A subquery to use instead of a fieldName. When you use a fieldQuery instead of a fieldName, you are comparing the criterion value to the result of running a per-record subquery, rather than a field value found directly on the record. Note, it is also possible to specify both a fieldQuery and a valueQuery.

      See the subquery overview for more details of the criteria subquery feature, and examples of use.

      Note, if you specify both fieldQuery and fieldName in a criterion, we use the fieldName and the fieldQuery is ignored.

      Note also that fieldName supports a special shortcut syntax for declaring a fieldQuery as a simple qualified reference to a related field. See the fieldName doc linked above for details

      Parameters:
      fieldQuery - New fieldQuery value. Default value is null
      Returns:
      Criterion instance, for chaining setter calls
      See Also:
    • getFieldQuery

      public AdvancedCriterionSubquery getFieldQuery()
      A subquery to use instead of a fieldName. When you use a fieldQuery instead of a fieldName, you are comparing the criterion value to the result of running a per-record subquery, rather than a field value found directly on the record. Note, it is also possible to specify both a fieldQuery and a valueQuery.

      See the subquery overview for more details of the criteria subquery feature, and examples of use.

      Note, if you specify both fieldQuery and fieldName in a criterion, we use the fieldName and the fieldQuery is ignored.

      Note also that fieldName supports a special shortcut syntax for declaring a fieldQuery as a simple qualified reference to a related field. See the fieldName doc linked above for details

      Returns:
      Current fieldQuery value. Default value is null
      See Also:
    • setOperator

      public Criterion setOperator(OperatorId operator)
      Operator this criterion applies.
      Parameters:
      operator - New operator value. Default value is null
      Returns:
      Criterion instance, for chaining setter calls
      See Also:
    • getOperator

      public OperatorId getOperator()
      Operator this criterion applies.
      Returns:
      Current operator value. Default value is null
      See Also:
    • setValuePath

      public Criterion setValuePath(String valuePath)
      Wherever DynamicCriteria are supported, valuePath can be specified as a path in the current Canvas.ruleScope as an alternative to setting a fixed value.

      Note: valuePath vs setting a path for fieldName:

      • use a path for criterion.fieldName when criteria will be matched against a nested data structure.
      • use criterion.valuePath when the values used in filtering should be dynamically derived based on the Canvas.ruleScope. This does not imply that the criteria will be matched against a nested structure.
      Parameters:
      valuePath - New valuePath value. Default value is null
      Returns:
      Criterion instance, for chaining setter calls
    • getValuePath

      public String getValuePath()
      Wherever DynamicCriteria are supported, valuePath can be specified as a path in the current Canvas.ruleScope as an alternative to setting a fixed value.

      Note: valuePath vs setting a path for fieldName:

      • use a path for criterion.fieldName when criteria will be matched against a nested data structure.
      • use criterion.valuePath when the values used in filtering should be dynamically derived based on the Canvas.ruleScope. This does not imply that the criteria will be matched against a nested structure.
      Returns:
      Current valuePath value. Default value is null
    • setValueQuery

      public Criterion setValueQuery(AdvancedCriterionSubquery valueQuery)
      A subquery to use instead of a value. When you use a valueQuery instead of a value, you are comparing the values in the record field named in the criterion fieldName to the result of running a per-record subquery, rather than a literal scalar value. . Note, it is also possible to specify both a valueQuery and a fieldQuery.

      See the subquery overview for more details of the criteria subquery feature, and examples of use.

      Note, if you specify both valueQuery and value in a criterion, we use the value and the valueQuery is ignored

      Parameters:
      valueQuery - New valueQuery value. Default value is null
      Returns:
      Criterion instance, for chaining setter calls
      See Also:
    • getValueQuery

      public AdvancedCriterionSubquery getValueQuery()
      A subquery to use instead of a value. When you use a valueQuery instead of a value, you are comparing the values in the record field named in the criterion fieldName to the result of running a per-record subquery, rather than a literal scalar value. . Note, it is also possible to specify both a valueQuery and a fieldQuery.

      See the subquery overview for more details of the criteria subquery feature, and examples of use.

      Note, if you specify both valueQuery and value in a criterion, we use the value and the valueQuery is ignored

      Returns:
      Current valueQuery value. Default value is null
      See Also:
    • instanceOf

      public static final boolean instanceOf(Object object)
    • addCriteria

      public void addCriteria(Criterion c)
      Adds a new criteria.

      If the present criteria operation is "and", the new criteria is appended to the criteria list.

      Otherwise, the existing criteria is replaced with an "and" criteria, with two sub-criteria: the existing criteria, and the passed criteria.

      Note that if the existing criteria was empty (as would happen if new AdvancedCriteria() were called with no arguments), an "and" operator will still be introduced, but the passed criteria will be the only sub-criteria.

      To add an additional Criterion when using the "or" operator, use appendToCriterionList(com.smartgwt.client.data.Criterion).

      Parameters:
      c - the passed criteria object
    • addCriteria

      public void addCriteria(Criteria c)
      Adds a new criteria. If the passed criteria is a simple Criteria or Criterion, it will turn into AdvancedCriteria, and will be added to the existent criteria.
      Overrides:
      addCriteria in class Criteria
      Parameters:
      c - the passed criteria object
    • addCriteria

      public void addCriteria(String field)
      This method calls addCriteria(String, OperatorId, value), passing "EQUALS" as the OperatorId and Boolean.TRUE as value.
      See Also:
    • addCriteria

      public void addCriteria(String field, String value)
      This method calls addCriteria(String, OperatorId, String), passing "EQUALS" as the OperatorId.
      Overrides:
      addCriteria in class Criteria
      See Also:
    • addCriteria

      public void addCriteria(String field, Integer value)
      This method is similar to addCriteria(String, String).
      Overrides:
      addCriteria in class Criteria
    • addCriteria

      public void addCriteria(String field, Float value)
      This method is similar to addCriteria(String, String).
      Overrides:
      addCriteria in class Criteria
    • addCriteria

      public void addCriteria(String field, Date value)
      This method is similar to addCriteria(String, String).
      Overrides:
      addCriteria in class Criteria
    • addCriteria

      public void addCriteria(String field, Boolean value)
      This method is similar to addCriteria(String, String).
      Overrides:
      addCriteria in class Criteria
    • addCriteria

      public void addCriteria(String field, String[] value)
      This method is similar to addCriteria(String, String).
      Overrides:
      addCriteria in class Criteria
    • addCriteria

      public void addCriteria(String field, Integer[] value)
      This method is similar to addCriteria(String, String).
      Overrides:
      addCriteria in class Criteria
    • addCriteria

      public void addCriteria(String field, Float[] value)
      This method is similar to addCriteria(String, String).
      Overrides:
      addCriteria in class Criteria
    • addCriteria

      public void addCriteria(String field, Date[] value)
      This method is similar to addCriteria(String, String).
    • addCriteria

      public void addCriteria(String field, Boolean[] value)
      This method is similar to addCriteria(String, String).
      Overrides:
      addCriteria in class Criteria
    • addCriteria

      public void addCriteria(String field, OperatorId op, String value)
      Creates a Criterion and calls addCriteria(Criterion).
    • addCriteria

      public void addCriteria(String field, OperatorId op, Integer value)
      This method is similar to addCriteria(String, OperatorId, String).
    • addCriteria

      public void addCriteria(String field, OperatorId op, Float value)
      This method is similar to addCriteria(String, OperatorId, String).
    • addCriteria

      public void addCriteria(String field, OperatorId op, Date value)
      This method is similar to addCriteria(String, OperatorId, String).
    • addCriteria

      public void addCriteria(String field, OperatorId op, Boolean value)
      This method is similar to addCriteria(String, OperatorId, String).
    • addCriteria

      public void addCriteria(String field, OperatorId op, String[] value)
      This method is similar to addCriteria(String, OperatorId, String).
    • addCriteria

      public void addCriteria(String field, OperatorId op, Integer[] value)
      This method is similar to addCriteria(String, OperatorId, String).
    • addCriteria

      public void addCriteria(String field, OperatorId op, Float[] value)
      This method is similar to addCriteria(String, OperatorId, String).
    • addCriteria

      public void addCriteria(String field, OperatorId op, Date[] value)
      This method is similar to addCriteria(String, OperatorId, String).
    • addCriteria

      public void addCriteria(String field, OperatorId op, Boolean[] value)
      This method is similar to addCriteria(String, OperatorId, String).
    • buildCriterionFromList

      public void buildCriterionFromList(OperatorId operator, Criterion[] criterias)
    • appendToCriterionList

      public void appendToCriterionList(Criterion c)
      For a Criterion that uses OperatorId.AND or OperatorId.OR, add an additional Criterion to the list of subcriteria to be evaluated.
    • setCustomOperator

      public void setCustomOperator(String operator)
      Specifies a "custom" operator to this criterion.
      Parameters:
      operator - the operator
    • markAdvancedCriteria

      public void markAdvancedCriteria()
    • unmarkAdvancedCriteria

      public void unmarkAdvancedCriteria()
    • getValueAsString

      public String getValueAsString()
      Retrieves the specified value for this criterion. Only applies to criterion where operator and value have been specified - will not apply to criterion containing {@link #getCriteria(),sub criteria}.
      Returns:
    • getValueAsInt

      public final Integer getValueAsInt()
    • getValueAsInteger

      public Integer getValueAsInteger()
      Retrieves the specified value for this criterion. Only applies to criterion where operator and value have been specified - will not apply to criterion containing {@link #getCriteria(),sub criteria}.
      Returns:
    • getValueAsFloat

      public Float getValueAsFloat()
      Retrieves the specified value for this criterion. Only applies to criterion where operator and value have been specified - will not apply to criterion containing {@link #getCriteria(),sub criteria}.
      Returns:
    • getValueAsDate

      public Date getValueAsDate()
      Retrieves the specified value for this criterion. Only applies to criterion where operator and value have been specified - will not apply to criterion containing {@link #getCriteria(),sub criteria}.
      Returns:
    • getValueAsBoolean

      public Boolean getValueAsBoolean()
      Retrieves the specified value for this criterion. Only applies to criterion where operator and value have been specified - will not apply to criterion containing {@link #getCriteria(),sub criteria}.
      Returns:
    • getValueAsStringArray

      public String[] getValueAsStringArray()
      Retrieves the specified value for this criterion. Only applies to criterion where operator and value have been specified - will not apply to criterion containing {@link #getCriteria(),sub criteria}.
      Returns:
    • getValueAsIntArray

      public int[] getValueAsIntArray()
      Retrieves the specified value for this criterion. Only applies to criterion where operator and value have been specified - will not apply to criterion containing {@link #getCriteria(),sub criteria}.
      Returns:
    • asAdvancedCriteria

      public AdvancedCriteria asAdvancedCriteria()
      Returns an AdvancedCriteria derived from this Criteria object.
      Overrides:
      asAdvancedCriteria in class Criteria
      Returns: