package org.ovirt.engine.ui.common.widget.editor; import com.google.gwt.user.client.ui.MultiWordSuggestOracle; /** * A matcher used by {@link RenderableSuggestOracle} to recognize suggestions corresponding to user query string. */ public interface SuggestionMatcher { /** * * @param query text typed by user into combobox * @param suggestion suggestion to match * @return is suggestion matching */ public boolean match(String query, MultiWordSuggestOracle.MultiWordSuggestion suggestion); /** * Case independent matcher. Suggestion matches if replacementString starts with query. */ public static class StartWithSuggestionMatcher implements SuggestionMatcher { @Override public boolean match(String query, MultiWordSuggestOracle.MultiWordSuggestion suggestion) { if (suggestion.getReplacementString() == null || query == null) { return false; } return suggestion.getReplacementString().toLowerCase().startsWith(query.toLowerCase()); } } /** * Case independent matcher. Suggestion matches if all whitespace separated parts of query are contained in * replacement string. */ public static class ContainsSuggestionMatcher implements SuggestionMatcher { @Override public boolean match(String query, MultiWordSuggestOracle.MultiWordSuggestion suggestion) { if (suggestion.getReplacementString() == null || query == null) { return false; } final String lowerQuery = query.toLowerCase(); final String lowerReplacement = suggestion.getReplacementString().toLowerCase(); final String[] querySegments = lowerQuery.split("\\s"); //$NON-NLS-1$ for (String querySegment : querySegments) { if (!lowerReplacement.contains(querySegment)) { return false; } } return true; } } }