/**
 *                                                                            
 * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
 *                                                                            
 * All rights reserved. This program and the accompanying materials           
 * are made available under the terms of the Eclipse Public License v1.0       
 * which accompanies this distribution, and is available at                  
 * http://www.eclipse.org/legal/epl-v10.html                                 
 *                                                                            
 * Contributors:   
 * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
 */
package org.eclipse.osbp.vaadin.addons.suggesttext.client;

import com.vaadin.shared.communication.ServerRpc;

// TODO: Auto-generated Javadoc
/**
 * The Interface SuggestTextFieldServerRpc.
 */
public interface SuggestTextFieldServerRpc extends ServerRpc {

	/**
	 * Requests a response with suggestions from the server.
	 * 
	 * @param handleId
	 *            a unique id for every request to link request/response.
	 * @param filter the filter string.
	 * @param limit the maximum number of suggestions to be contained in the response. 
	 */
	public void requestSuggestions(String handleId, String filter, int limit);

	/**
	 * The suggestion with the given id was selected.
	 *
	 * @param uuid the uuid
	 */
	public void selectionChanged(String uuid);

}
