Class AbstractSearchable

  • All Implemented Interfaces:
    Searchable
    Direct Known Subclasses:
    ListSearchable, TableSearchable, TreeSearchable

    public abstract class AbstractSearchable
    extends java.lang.Object
    implements Searchable
    An abstract implementation of Searchable supporting incremental search. Keeps internal state to represent the previous search result. For all methods taking a string as parameter: compiles the String to a Pattern as-is and routes to the central method taking a Pattern.
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      static class  AbstractSearchable.SearchResult
      A convenience class to hold search state.
    • Method Summary

      All Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and Type Method Description
      protected int adjustStartPosition​(int startIndex, boolean backwards)
      Called if startIndex is different from last search and make sure a backwards/forwards search starts at last/first row, respectively.
      protected AbstractSearchable.SearchResult createSearchResult​(java.util.regex.Matcher matcher, int row, int column)
      Factory method to create a SearchResult from the given parameters.
      protected int doSearch​(java.util.regex.Pattern pattern, int startIndex, boolean backwards)
      Performs a search starting at the given startIndex using the pattern; Pattern.
      protected abstract AbstractSearchable.SearchResult findExtendedMatch​(java.util.regex.Pattern pattern, int row)
      called if sameRowIndex && !hasEqualRegEx.
      protected abstract void findMatchAndUpdateState​(java.util.regex.Pattern pattern, int startRow, boolean backwards)
      Loops through the searchable until a match is found or the end is reached.
      protected abstract int getSize()
      returns the size of this searchable.
      protected boolean isEmpty​(java.lang.String searchString)
      checks if the searchString should be interpreted as empty.
      protected boolean isEqualPattern​(java.util.regex.Pattern pattern)
      Checks if the given Pattern should be considered as the same as in a previous search.
      protected boolean isEqualStartIndex​(int startIndex)
      Checks if the startIndex should be considered as the same as in the previous search.
      protected boolean isTrivialNoMatch​(java.util.regex.Pattern pattern, int startIndex)
      Checks and returns if it can be trivially decided to not match.
      protected boolean isValidIndex​(int index)
      checks if index is in range: 0 <= index < getSize().
      protected abstract void moveMatchMarker()
      Moves the match marker according to current found state.
      protected int moveStartPosition​(int startIndex, boolean backwards)
      Moves the internal start position for matching as appropriate and returns the new startIndex to use.
      int search​(java.lang.String searchString)
      Performs a forward search starting at the beginning across the Searchable using String that represents a regex pattern; Pattern.
      int search​(java.lang.String searchString, int startIndex)
      Performs a forward search starting at the given startIndex using String that represents a regex pattern; Pattern.
      int search​(java.lang.String searchString, int startIndex, boolean backward)
      Performs a search starting at the given startIndex using String that represents a regex pattern; Pattern.
      int search​(java.util.regex.Pattern pattern)
      Performs a forward search starting at the beginning across the Searchable using the pattern; Pattern.
      int search​(java.util.regex.Pattern pattern, int startIndex)
      Performs a forward search starting at the given startIndex using the Pattern; Pattern.
      int search​(java.util.regex.Pattern pattern, int startIndex, boolean backwards)
      Performs a search starting at the given startIndex using the pattern; Pattern.
      protected void updateState​(AbstractSearchable.SearchResult searchResult)
      Update inner searchable state based on provided search result
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • AbstractSearchable

        public AbstractSearchable()
    • Method Detail

      • search

        public int search​(java.lang.String searchString)
        Performs a forward search starting at the beginning across the Searchable using String that represents a regex pattern; Pattern.
        Specified by:
        search in interface Searchable
        Parameters:
        searchString - String that we will try to locate
        Returns:
        the position of the match in appropriate coordinates or -1 if no match found.
      • search

        public int search​(java.lang.String searchString,
                          int startIndex)
        Performs a forward search starting at the given startIndex using String that represents a regex pattern; Pattern.
        Specified by:
        search in interface Searchable
        Parameters:
        searchString - String that we will try to locate
        startIndex - position in the document in the appropriate coordinates from which we will start search or -1 to start from the beginning
        Returns:
        the position of the match in appropriate coordinates or -1 if no match found.
      • search

        public int search​(java.lang.String searchString,
                          int startIndex,
                          boolean backward)
        Performs a search starting at the given startIndex using String that represents a regex pattern; Pattern. The search direction depends on the boolean parameter: forward/backward if false/true, respectively.
        Specified by:
        search in interface Searchable
        Parameters:
        searchString - String that we will try to locate
        startIndex - position in the document in the appropriate coordinates from which we will start search or -1 to start from the beginning
        backward - true if we should perform search towards the beginning
        Returns:
        the position of the match in appropriate coordinates or -1 if no match found.
      • search

        public int search​(java.util.regex.Pattern pattern)
        Performs a forward search starting at the beginning across the Searchable using the pattern; Pattern.
        Specified by:
        search in interface Searchable
        Parameters:
        pattern - Pattern that we will try to locate
        Returns:
        the position of the match in appropriate coordinates or -1 if no match found.
      • search

        public int search​(java.util.regex.Pattern pattern,
                          int startIndex)
        Performs a forward search starting at the given startIndex using the Pattern; Pattern.
        Specified by:
        search in interface Searchable
        Parameters:
        pattern - Pattern that we will try to locate
        startIndex - position in the document in the appropriate coordinates from which we will start search or -1 to start from the beginning
        Returns:
        the position of the match in appropriate coordinates or -1 if no match found.
      • search

        public int search​(java.util.regex.Pattern pattern,
                          int startIndex,
                          boolean backwards)
        Performs a search starting at the given startIndex using the pattern; Pattern. The search direction depends on the boolean parameter: forward/backward if false/true, respectively. Updates visible and internal search state.
        Specified by:
        search in interface Searchable
        Parameters:
        pattern - Pattern that we will try to locate
        startIndex - position in the document in the appropriate coordinates from which we will start search or -1 to start from the beginning
        backwards - true if we should perform search towards the beginning
        Returns:
        the position of the match in appropriate coordinates or -1 if no match found.
      • doSearch

        protected int doSearch​(java.util.regex.Pattern pattern,
                               int startIndex,
                               boolean backwards)
        Performs a search starting at the given startIndex using the pattern; Pattern. The search direction depends on the boolean parameter: forward/backward if false/true, respectively. Updates internal search state.
        Parameters:
        pattern - Pattern that we will try to locate
        startIndex - position in the document in the appropriate coordinates from which we will start search or -1 to start from the beginning
        backwards - true if we should perform search towards the beginning
        Returns:
        the position of the match in appropriate coordinates or -1 if no match found.
      • findMatchAndUpdateState

        protected abstract void findMatchAndUpdateState​(java.util.regex.Pattern pattern,
                                                        int startRow,
                                                        boolean backwards)
        Loops through the searchable until a match is found or the end is reached. Updates internal search state.
        Parameters:
        pattern - Pattern that we will try to locate
        startRow - position in the document in the appropriate coordinates from which we will start search or -1 to start from the beginning
        backwards - true if we should perform search towards the beginning
      • isTrivialNoMatch

        protected boolean isTrivialNoMatch​(java.util.regex.Pattern pattern,
                                           int startIndex)
        Checks and returns if it can be trivially decided to not match. Here: pattern is null or startIndex exceeds the upper size limit.
        Parameters:
        pattern - Pattern that we will try to locate
        startIndex - position in the document in the appropriate coordinates from which we will start search or -1 to start from the beginning
        Returns:
        true if we can say ahead that no match will be found with given search criteria
      • adjustStartPosition

        protected int adjustStartPosition​(int startIndex,
                                          boolean backwards)
        Called if startIndex is different from last search and make sure a backwards/forwards search starts at last/first row, respectively.
        Parameters:
        startIndex - position in the document in the appropriate coordinates from which we will start search or -1 to start from the beginning
        backwards - true if we should perform search from towards the beginning
        Returns:
        adjusted startIndex
      • moveStartPosition

        protected int moveStartPosition​(int startIndex,
                                        boolean backwards)
        Moves the internal start position for matching as appropriate and returns the new startIndex to use. Called if search was messaged with the same startIndex as previously.
        Parameters:
        startIndex - position in the document in the appropriate coordinates from which we will start search or -1 to start from the beginning
        backwards - true if we should perform search towards the beginning
        Returns:
        adjusted startIndex
      • isEqualPattern

        protected boolean isEqualPattern​(java.util.regex.Pattern pattern)
        Checks if the given Pattern should be considered as the same as in a previous search. Here: compares the patterns' regex.
        Parameters:
        pattern - Pattern that we will compare with last request
        Returns:
        if provided Pattern is the same as the stored from the previous search attempt
      • isEqualStartIndex

        protected boolean isEqualStartIndex​(int startIndex)
        Checks if the startIndex should be considered as the same as in the previous search.
        Parameters:
        startIndex - startIndex that we will compare with the index stored by the previous search request
        Returns:
        true if the startIndex should be re-matched, false if not.
      • isEmpty

        protected boolean isEmpty​(java.lang.String searchString)
        checks if the searchString should be interpreted as empty. here: returns true if string is null or has zero length.
        Parameters:
        searchString - String that we should evaluate
        Returns:
        true if the provided String should be interpreted as empty
      • findExtendedMatch

        protected abstract AbstractSearchable.SearchResult findExtendedMatch​(java.util.regex.Pattern pattern,
                                                                             int row)
        called if sameRowIndex && !hasEqualRegEx. Matches the cell at row/lastFoundColumn against the pattern. PRE: lastFoundColumn valid.
        Parameters:
        pattern - Pattern that we will try to match
        row - position at which we will get the value to match with the provided Pattern
        Returns:
        result of the match; AbstractSearchable.SearchResult
      • createSearchResult

        protected AbstractSearchable.SearchResult createSearchResult​(java.util.regex.Matcher matcher,
                                                                     int row,
                                                                     int column)
        Factory method to create a SearchResult from the given parameters.
        Parameters:
        matcher - the matcher after a successful find. Must not be null.
        row - the found index
        column - the found column
        Returns:
        newly created SearchResult
      • isValidIndex

        protected boolean isValidIndex​(int index)
        checks if index is in range: 0 <= index < getSize().
        Parameters:
        index - possible start position that we will check for validity
        Returns:
        true if given parameter is valid index
      • getSize

        protected abstract int getSize()
        returns the size of this searchable.
        Returns:
        size of this searchable
      • updateState

        protected void updateState​(AbstractSearchable.SearchResult searchResult)
        Update inner searchable state based on provided search result
        Parameters:
        searchResult - SearchResult that represents the new state of this AbstractSearchable
      • moveMatchMarker

        protected abstract void moveMatchMarker()
        Moves the match marker according to current found state.