Subversion Repositories eFlore/Applications.cel

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

package org.tela_botanica.client.vues.observation;

import java.util.Vector;

import org.tela_botanica.client.utils.Configuration;

import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.http.client.RequestCallback;
import com.google.gwt.http.client.RequestException;
import com.google.gwt.http.client.Response;
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONParser;
import com.google.gwt.json.client.JSONValue;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.MultiWordSuggestOracle;
import com.google.gwt.user.client.ui.SuggestBox;
import com.google.gwt.user.client.ui.SuggestOracle;

public class FormulaireAutocompletion extends Composite implements IsWidget {

        MultiWordSuggestOracle msu = new MultiWordSuggestOracle();
        SuggestBox suggestions = null;
        Timer suggestionTimer = null;
        
        SuggestOracle.Request requeteOracle;
    SuggestOracle.Callback callBackOracle;
    
    int tempsAvantRequete = 500;
        
        public FormulaireAutocompletion() {
                                
                suggestions = new SuggestBox(msu);
                suggestions.setWidth(300+"px");
                
                suggestions.addKeyPressHandler(new KeyPressHandler() {
                        public void onKeyPress(KeyPressEvent event) {
                                
                                if(event.getUnicodeCharCode() != 0) {
                                
                                        if(suggestionTimer == null) {
                                                suggestionTimer = new Timer() {
                                                        public void run() {
                                                                requeteSuggestions(suggestions.getValue());
                                                        }       
                                                };                                      
                                                suggestionTimer.schedule(tempsAvantRequete);
                                        } else {
                                                suggestionTimer.schedule(tempsAvantRequete);
                                        }
                                }
                        }
                        
                });
                
                requeteOracle = new SuggestOracle.Request();
                callBackOracle = new SuggestOracle.Callback() {

                        public void onSuggestionsReady(
                                        com.google.gwt.user.client.ui.SuggestOracle.Request request,
                                        com.google.gwt.user.client.ui.SuggestOracle.Response response) {
                                suggestions.showSuggestionList();       
                        }
            };
                
                this.setWidget(suggestions);
        }
        
        public void setTempsAvantRequete(int temps) {
                tempsAvantRequete = temps;
        }
        
        public int getTempsAvantRequete(int temps) {
                return tempsAvantRequete;
        }
        
        private void requeteSuggestions(final String requete) {
                
                String requeteAjax = requete;
                String[] parties = requete.split(" ", 2);
                
                if(parties.length == 2) {
                        if(parties[1].trim().isEmpty()) {
                                parties[1] = "*";
                        }
                        
                        requeteAjax = parties[0]+"/"+parties[1];
                }
                
                RequestBuilder rb = new RequestBuilder(RequestBuilder.GET,Configuration.getServiceBaseUrl()
                                +"/NameSearch/"+requeteAjax) ;
                
                try {
                        
                        rb.sendRequest(null, new RequestCallback() {

                                public void onError(final Request request, final Throwable exception) {
                                        // TODO Auto-generated method stub
                                        
                                }

                                public void onResponseReceived(final Request request,
                                                final Response response) {
                                        
                                                final JSONValue responseValue = JSONParser.parseStrict(response.getText());
                                                JSONArray noms;
                                        
                                                if ((noms=responseValue.isArray()) != null) {
                                                                                        
                                                        msu.clear();
        
                                                        final int taillemax = noms.size();      
                                                        for (int i = 0; i < taillemax; i++) {
                                                                msu.add(noms.get(i).isArray().get(0).isString().stringValue());
                                                        }
                                                    
                                                    msu.requestSuggestions(requeteOracle, callBackOracle);
                                                        
                                                }
                                }
                        }) ;

                } catch (RequestException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        }
}