Subversion Repositories eFlore/Applications.cel

Rev

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

Rev Author Line No. Line
15 david 1
package org.tela_botanica.client.modeles;
2
 
3
import org.tela_botanica.client.Util;
4
import org.tela_botanica.client.interfaces.FournisseurListe;
5
import org.tela_botanica.client.interfaces.Rafraichissable;
6
import org.tela_botanica.client.observation.ObservationModele;
7
 
8
import com.google.gwt.json.client.JSONArray;
9
import com.google.gwt.json.client.JSONParser;
10
import com.google.gwt.json.client.JSONString;
11
import com.google.gwt.json.client.JSONValue;
12
import com.google.gwt.user.client.HTTPRequest;
13
import com.google.gwt.user.client.ResponseTextHandler;
14
 
15
/**
16
 * DAO  liste noms scientifiques
17
 * @author David Delon
18
 *
19
 */
20
public class ListeReferentielNomAsynchroneDAO implements FournisseurListe {
21
 
22
 
23
 
24
	/**
25
	 * Le modèle associé au DAO
26
	 */
27
	private ObservationModele observationModele = null ;
28
 
29
	public ListeReferentielNomAsynchroneDAO(ObservationModele observationModele)
30
	{
31
 
32
		this.observationModele=observationModele;
33
	}
34
 
35
 
36
	/**
37
	 * Envoie une requete au serveur jrest pour obtenir les communes  correspondant
38
	 * à des critères données en paramètres
39
	 * @param r le rafraichissable qui demande la mise à jour
40
	 * @param criteres un string contenant le terme a rechercher
41
	 */
42
 
43
 
44
	public void obtenirListeDonnees(final Rafraichissable r, String critere)
45
	{
46
 
47
 
48
		// on envoie le get asynchrone
49
		HTTPRequest.asyncGet(observationModele.getConfig().getServiceBaseUrl()+"/NameSearch/"+critere, new ResponseTextHandler() {
50
 
51
 
52
			// si tout se passe bien on reçoit une réponse JSON
53
			public void onCompletion(String responseText) {
54
 
55
 
56
				final ListeReferentielNom referentielNomData ;
57
 
58
				final JSONValue responseValue = JSONParser.parse(responseText);
59
 
60
				JSONArray reponse=null;
61
 
62
 
63
				// si c'est un tableau
64
				if ((reponse=responseValue.isArray()) != null) {
65
 
66
					JSONArray noms;
67
					final int taillemax = reponse.size();
68
 
69
					referentielNomData = new ListeReferentielNom(taillemax);
70
 
71
					for (int i = 0; i < taillemax; i++) {
72
						if ((noms=reponse.get(i).isArray()) != null) {
73
 
74
 
75
 
76
							String nom=Util.toCelString(((JSONString) noms.get(0)).toString());
77
							String numeroNom=Util.toCelString(((JSONString) noms.get(1)).toString());
78
 
79
							ReferentielNom nomScientifique=new ReferentielNom(nom, numeroNom);
80
 
81
							// FIXME : et si le numero de nom n'est pas unique ? (cas de multirefrentiel....)
82
 
83
							referentielNomData.put(nomScientifique.getNumeroNom(),nomScientifique);
84
 
85
 
86
						}
87
 
88
					}
89
 
90
 
91
					// dans tous les cas on transmet la liste crée au rafraichissable en lui demandant de répandre les données car il est
92
					// le premier à les recevoir
93
 
94
					r.rafraichir(referentielNomData,true);
95
				}
96
		    }
97
 
98
 
99
		});
100
	}
101
}