package org.gcube.portlets.widgets.pickitem.client.oracle; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import org.gcube.portlets.widgets.pickitem.client.rpc.PickItemService; import org.gcube.portlets.widgets.pickitem.client.rpc.PickItemServiceAsync; import org.gcube.portlets.widgets.pickitem.shared.ItemBean; import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.MultiWordSuggestOracle; public class UserOracle extends MultiWordSuggestOracle{ private final PickItemServiceAsync pickuserService = GWT.create(PickItemService.class); private List contacts = new LinkedList<>(); public void addContacts(List users) { contacts.addAll(users); } public UserOracle() { //((ServiceDefTarget) pickuserService).setServiceEntryPoint(Utils.getServiceEntryPoint()); } @Override public void requestSuggestions(final Request request, final Callback callback) { GWT.log("UserOracl requestSuggestions"); final Response resp = new Response(); if(contacts.isEmpty()){ GWT.log("callback.onSuggestionsReady"); callback.onSuggestionsReady(request, resp); return; } String text = request.getQuery(); text = text.toLowerCase(); final List list = new ArrayList<>(); GWT.log("calling searchEntities ..." + text); pickuserService.searchEntities(text, new AsyncCallback>() { @Override public void onFailure(Throwable arg0) { GWT.log("error"); callback.onSuggestionsReady(request, resp); return; } @Override public void onSuccess(ArrayList results) { for (ItemBean contact : results){ list.add(new UserSuggestion(contact)); } resp.setSuggestions(list); callback.onSuggestionsReady(request, resp); } }); } }