Class LikeFilterImpl

All Implemented Interfaces:
Filter, MultiValuedFilter, PropertyIsLike, FilterType

public class LikeFilterImpl extends AbstractFilter implements PropertyIsLike
Defines a like filter, which checks to see if an attribute matches a REGEXP.
Author:
Rob Hranac, Vision for New York
  • Field Details

  • Constructor Details

  • Method Details

    • convertToSQL92

      @Deprecated public static String convertToSQL92(char escape, char multi, char single, boolean matchCase, String pattern) throws IllegalArgumentException
      Deprecated.
      Given OGC PropertyIsLike Filter information, construct an SQL-compatible 'like' pattern.

      SQL % --> match any number of characters _ --> match a single character

      NOTE; the SQL command is 'string LIKE pattern [ESCAPE escape-character]' We could re-define the escape character, but I'm not doing to do that in this code since some databases will not handle this case.

      Method: 1.

      Examples: ( escape ='!', multi='*', single='.' ) broadway* -> 'broadway%' broad_ay -> 'broad_ay' broadway -> 'broadway'

      broadway!* -> 'broadway*' (* has no significance and is escaped) can't -> 'can''t' ( ' escaped for SQL compliance)

      NOTE: we also handle "'" characters as special because they are end-of-string characters. SQL will convert ' to '' (double single quote).

      NOTE: we dont handle "'" as a 'special' character because it would be too confusing to have a special char as another special char. Using this will throw an error (IllegalArgumentException).

      Throws:
      IllegalArgumentException
    • convertToSQL92

      public static String convertToSQL92(char escape, char multi, char single, boolean matchCase, String pattern, boolean escapeSingleQuote)
      Given OGC PropertyIsLike Filter information, construct an SQL-compatible 'like' pattern.

      SQL % --> match any number of characters _ --> match a single character

      NOTE; the SQL command is 'string LIKE pattern [ESCAPE escape-character]' We could re-define the escape character, but I'm not doing to do that in this code since some databases will not handle this case.

      Method: 1.

      Examples: ( escape ='!', multi='*', single='.' ) broadway* -> 'broadway%' broad_ay -> 'broad_ay' broadway -> 'broadway'

      broadway!* -> 'broadway*' (* has no significance and is escaped) can't -> 'can''t' ( ' escaped for SQL compliance)

      NOTE: when the escapeSingleQuote parameter is false, this method will not convert ' to '' (double single quote) and it is the caller's responsibility to ensure that the resulting pattern is used safely in SQL queries.

      NOTE: we dont handle "'" as a 'special' character because it would be too confusing to have a special char as another special char. Using this will throw an error (IllegalArgumentException).

    • getSQL92LikePattern

      @Deprecated public String getSQL92LikePattern() throws IllegalArgumentException
      Deprecated.
      see convertToSQL92
      Throws:
      IllegalArgumentException
    • setWildCard

      public void setWildCard(String wildCard)
    • setSingleChar

      public void setSingleChar(String singleChar)
    • setEscape

      public void setEscape(String escape)
    • setMatchCase

      public void setMatchCase(boolean matchingCase)
    • isMatchingCase

      public boolean isMatchingCase()
      Description copied from interface: PropertyIsLike
      Flag controlling wither comparisons are case sensitive.

      The ability to match case is pending the Filter 2.0 specification.

      Specified by:
      isMatchingCase in interface PropertyIsLike
      Returns:
      true if the comparison is case sensetive, otherwise false.
    • getMatchAction

      public MultiValuedFilter.MatchAction getMatchAction()
      Description copied from interface: MultiValuedFilter
      * Flag Controlling MatchAction property When one or more of the operands evaluates to multiple values rather than a single value, which action should be taken? If there are n values for the left operand and m values for the right operand, there are n * m possible combinations that can be compared,

      ANY - if any of the possible combinations match, the result is true (aggregated OR) ALL - only if all of the possible combinations match, the result is true (aggregated AND) ONE - only if exactly one of the possible combinations match, the result is true (aggregated XOR)

      Specified by:
      getMatchAction in interface MultiValuedFilter
      Returns:
      MatchAction flag
    • setMatchingCase

      public void setMatchingCase(boolean matchingCase)
    • getExpression

      public Expression getExpression()
      Gets the expression for hte filter.

      This method calls th deprecated #getValue() for backwards compatability with subclasses.

      Specified by:
      getExpression in interface PropertyIsLike
    • setExpression

      public void setExpression(Expression e)
    • getLiteral

      public String getLiteral()
      Returns the pattern.
      Specified by:
      getLiteral in interface PropertyIsLike
    • setLiteral

      public void setLiteral(String literal)
      Sets the pattern.
    • evaluate

      public boolean evaluate(Object feature)
      Determines whether or not a given feature matches this pattern.
      Specified by:
      evaluate in interface Filter
      Parameters:
      feature - Specified feature to examine.
      Returns:
      Flag confirming whether or not this feature is inside the filter.
      TODO:
      REVISIT: could the pattern be null such that a null = null?
    • toString

      public String toString()
      Return this filter as a string.
      Overrides:
      toString in class Object
      Returns:
      String representation of this like filter.
    • getEscape

      public String getEscape()
      Getter for property escape.
      Specified by:
      getEscape in interface PropertyIsLike
      Returns:
      Value of property escape.
    • getWildCard

      public String getWildCard()
      Getter for property wildcardMulti
      Specified by:
      getWildCard in interface PropertyIsLike
    • getSingleChar

      public String getSingleChar()
      Getter for property wildcardSingle.
      Specified by:
      getSingleChar in interface PropertyIsLike
    • equals

      public boolean equals(Object o)
      Compares this filter to the specified object. Returns true if the passed in object is the same as this filter. Checks to make sure the filter types, the value, and the pattern are the same. &
      Overrides:
      equals in class Object
      Parameters:
      o - - the object to compare this LikeFilter against.
      Returns:
      true if specified object is equal to this filter; false otherwise.
    • hashCode

      public int hashCode()
      Override of hashCode method.
      Overrides:
      hashCode in class Object
      Returns:
      the hash code for this like filter implementation.
    • accept

      public Object accept(FilterVisitor visitor, Object extraData)
      Used by FilterVisitors to perform some action on this filter instance. Typicaly used by Filter decoders, but may also be used by any thing which needs infomration from filter structure. Implementations should always call: visitor.visit(this); It is importatant that this is not left to a parent class unless the parents API is identical.
      Specified by:
      accept in interface Filter
      Parameters:
      visitor - The visitor which requires access to this filter, the method must call visitor.visit(this);