Package org.jdesktop.swingx.search
Class AbstractSearchable
- java.lang.Object
-
- org.jdesktop.swingx.search.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.
-
Field Summary
Fields Modifier and Type Field Description protected AbstractSearchable.SearchResult
lastSearchResult
stores the result of the previous search.static java.lang.String
MATCH_HIGHLIGHTER
key for client property to use SearchHighlighter as match marker.static AbstractSearchable.SearchResult
NO_MATCH
a constant representing not-found state.
-
Constructor Summary
Constructors Constructor Description AbstractSearchable()
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected int
adjustStartPosition(int startIndex, boolean backwards)
Called ifstartIndex
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
-
-
-
Field Detail
-
NO_MATCH
public static final AbstractSearchable.SearchResult NO_MATCH
a constant representing not-found state.
-
lastSearchResult
protected AbstractSearchable.SearchResult lastSearchResult
stores the result of the previous search.
-
MATCH_HIGHLIGHTER
public static final java.lang.String MATCH_HIGHLIGHTER
key for client property to use SearchHighlighter as match marker.- See Also:
- Constant Field Values
-
-
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 interfaceSearchable
- 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 interfaceSearchable
- Parameters:
searchString
-String
that we will try to locatestartIndex
- 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 interfaceSearchable
- Parameters:
searchString
-String
that we will try to locatestartIndex
- position in the document in the appropriate coordinates from which we will start search or -1 to start from the beginningbackward
-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 interfaceSearchable
- 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 interfaceSearchable
- Parameters:
pattern
-Pattern
that we will try to locatestartIndex
- 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 interfaceSearchable
- Parameters:
pattern
-Pattern
that we will try to locatestartIndex
- position in the document in the appropriate coordinates from which we will start search or -1 to start from the beginningbackwards
-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 locatestartIndex
- position in the document in the appropriate coordinates from which we will start search or -1 to start from the beginningbackwards
-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 locatestartRow
- position in the document in the appropriate coordinates from which we will start search or -1 to start from the beginningbackwards
-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 locatestartIndex
- 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 ifstartIndex
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 beginningbackwards
-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 beginningbackwards
-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 matchrow
- position at which we will get the value to match with the providedPattern
- 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 indexcolumn
- 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 thisAbstractSearchable
-
moveMatchMarker
protected abstract void moveMatchMarker()
Moves the match marker according to current found state.
-
-