Subversion Repositories eFlore/Applications.cel

Rev

Rev 1293 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package org.tela_botanica.client.modeles.dao;

import java.util.HashMap;

import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.objets.Configuration;
import org.tela_botanica.client.modeles.objets.ListeReferentielPerso;
import org.tela_botanica.client.modeles.objets.ListeReferentielPerso.TypesReferentiels;
import org.tela_botanica.client.observation.ObservationModele;

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.http.client.URL;
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONParser;
import com.google.gwt.json.client.JSONString;
import com.google.gwt.json.client.JSONValue;

public class ListeReferentielPersoAsynchroneDAO {
        
        /**
         * Cache
         * 
         */     
        private HashMap<String,ListeReferentielPerso> cache = new HashMap();

        private TypesReferentiels refDemande = null;
        
        public ListeReferentielPersoAsynchroneDAO(ObservationModele obs) {
                
        }
        
        public void setRefDemande(TypesReferentiels refDemande) {
                this.refDemande = refDemande;
        }
        
        public void obtenirListeDonnees(final Rafraichissable r, String utilisateur,  final String critere) {
                                
                        RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, Configuration.getServiceBaseUrl() + 
                                                                                                        "/SelfRefList/"+
                                                                                                        utilisateur+"/"+
                                                                                                        refDemande.toString()+
                                                                                                        "?start=0&limit=50&recherche="+URL.encode(critere));
                        
                        try {
                                
                                rb.sendRequest(null, new RequestCallback() {

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

                                        @Override
                                        public void onResponseReceived(final Request request,
                                                        final Response response) {
                                                
                                                final ListeReferentielPerso referentielData;
                                                
                                                final JSONValue responseValue = JSONParser.parse(response.getText());
                                                
                                                JSONArray reponse = null;
                        
                        
                                                // si c'est un tableau
                                                if ((reponse = responseValue.isArray()) != null) {
                                                        
                                                        JSONString elementsRef;
                                                        final int taillemax = reponse.size();
                                                        
                                                        referentielData = new ListeReferentielPerso(taillemax, refDemande);
                                                        
                                                        for (int i = 0; i < taillemax; i++) {
                                                                if ((elementsRef = reponse.get(i).isString()) != null) {
                                                                        
                                                                        String valeur = elementsRef.stringValue();
                                                                        referentielData.put(i+"", valeur);
                                                                                        
                                                                }       
                                                        }
                                                } else {
                                                        
                                                        referentielData = new ListeReferentielPerso(0, refDemande);
                                                        
                                                }                       
                                                // dans tous les cas on transmet la liste crée au rafraichissable en lui demandant de répandre les données car il est
                                                // le premier à les recevoir           
                                                r.rafraichir(referentielData, true);
                                                
                                        }       
                                        
                                });
                                
                        } catch (RequestException e) {
                                
                                e.printStackTrace();
                        }
        }
}