Class LikeFilterImpl

    • Constructor Detail

      • LikeFilterImpl

        protected LikeFilterImpl()
        Constructor which flags the operator as like.
      • LikeFilterImpl

        public LikeFilterImpl​(Expression expr,
                              String pattern,
                              String wildcardMulti,
                              String wildcardSingle,
                              String escape)
    • Method Detail

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