package com.baselet.gwt.client.view.widgets.propertiespanel;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import com.baselet.gui.AutocompletionText;
import com.google.gwt.user.client.ui.SuggestOracle;
public class MySuggestOracle extends SuggestOracle {
@Override
public boolean isDisplayStringHTML() {
return true;
}
private List<Suggestion> suggestions = new ArrayList<Suggestion>();
@Override
public void requestSuggestions(final Request request, final Callback callback) {
Collection<Suggestion> result = getSuggestionsForText(request.getQuery());
Response response = new Response(result);
callback.onSuggestionsReady(request, response);
}
public Collection<Suggestion> getSuggestionsForText(String userInput) {
String userInputLc = userInput.toLowerCase();
Collection<Suggestion> result = new LinkedList<Suggestion>();
for (Suggestion suggestion : suggestions) {
if (suggestion.getReplacementString().toLowerCase().startsWith(userInputLc)) {
result.add(highlightUserInput(suggestion, userInputLc));
}
}
return result;
}
private Suggestion highlightUserInput(final Suggestion suggestion, final String userInput) {
return new Suggestion() {
@Override
public String getReplacementString() {
return suggestion.getReplacementString();
}
@Override
public String getDisplayString() {
return "<strong>" + userInput + "</strong>" + suggestion.getDisplayString().substring(userInput.length());
}
};
}
public void setAutocompletionList(List<AutocompletionText> autocompletionList) {
suggestions.clear();
for (AutocompletionText text : autocompletionList) {
suggestions.add(new MySuggestion(text));
}
}
private boolean showAllAsDefault = false;
public void setShowAllAsDefault(boolean showAllAsDefault) {
this.showAllAsDefault = showAllAsDefault;
}
@Override
public void requestDefaultSuggestions(final Request request, final Callback callback) {
if (showAllAsDefault) {
callback.onSuggestionsReady(request, new Response(suggestions));
}
else {
super.requestDefaultSuggestions(request, callback);
}
}
}