Subversion Repositories eFlore/Applications.cel

Rev

Rev 15 | Go to most recent revision | Details | Compare with Previous | 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
 
32 jpm 8
import com.google.gwt.http.client.Request;
9
import com.google.gwt.http.client.RequestBuilder;
10
import com.google.gwt.http.client.RequestCallback;
11
import com.google.gwt.http.client.RequestException;
12
import com.google.gwt.http.client.Response;
15 david 13
import com.google.gwt.json.client.JSONArray;
14
import com.google.gwt.json.client.JSONParser;
15
import com.google.gwt.json.client.JSONString;
16
import com.google.gwt.json.client.JSONValue;
17
import com.google.gwt.user.client.HTTPRequest;
18
import com.google.gwt.user.client.ResponseTextHandler;
19
 
20
/**
21
 * DAO  liste noms scientifiques
22
 * @author David Delon
23
 *
24
 */
25
public class ListeReferentielNomAsynchroneDAO implements FournisseurListe {
26
 
27
 
28
 
29
	/**
30
	 * Le modèle associé au DAO
31
	 */
32
	private ObservationModele observationModele = null ;
33
 
34
	public ListeReferentielNomAsynchroneDAO(ObservationModele observationModele)
35
	{
36
 
37
		this.observationModele=observationModele;
38
	}
39
 
40
 
41
	/**
42
	 * Envoie une requete au serveur jrest pour obtenir les communes  correspondant
43
	 * à des critères données en paramètres
44
	 * @param r le rafraichissable qui demande la mise à jour
45
	 * @param criteres un string contenant le terme a rechercher
46
	 */
47
 
48
 
49
	public void obtenirListeDonnees(final Rafraichissable r, String critere)
50
	{
51
 
32 jpm 52
		RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, observationModele.getConfig().getServiceBaseUrl()+"/NameSearch/"+critere) ;
15 david 53
 
32 jpm 54
		try {
55
 
56
			rb.sendRequest(null, new RequestCallback() {
15 david 57
 
32 jpm 58
				public void onError(Request request, Throwable exception) {
59
					// TODO Auto-generated method stub
60
 
61
				}
15 david 62
 
32 jpm 63
				public void onResponseReceived(Request request,
64
						Response response) {
15 david 65
 
32 jpm 66
					final ListeReferentielNom referentielNomData ;
15 david 67
 
32 jpm 68
					final JSONValue responseValue = JSONParser.parse(response.getText());
15 david 69
 
32 jpm 70
					JSONArray reponse=null;
71
 
72
 
73
					// si c'est un tableau
74
					if ((reponse=responseValue.isArray()) != null) {
75
 
76
						JSONArray noms;
77
						final int taillemax = reponse.size();
78
 
79
						referentielNomData = new ListeReferentielNom(taillemax);
80
 
81
						for (int i = 0; i < taillemax; i++) {
82
							if ((noms=reponse.get(i).isArray()) != null) {
83
 
84
 
85
 
86
								String nom=Util.toCelString(((JSONString) noms.get(0)).toString());
87
								String numeroNom=Util.toCelString(((JSONString) noms.get(1)).toString());
88
 
89
								ReferentielNom nomScientifique=new ReferentielNom(nom, numeroNom);
90
 
91
								// FIXME : et si le numero de nom n'est pas unique ? (cas de multirefrentiel....)
92
 
93
								referentielNomData.put(nomScientifique.getNumeroNom(),nomScientifique);
94
 
95
 
96
							}
97
 
15 david 98
						}
32 jpm 99
					} else {
100
 
101
						referentielNomData = new ListeReferentielNom(0) ;
15 david 102
					}
32 jpm 103
 
15 david 104
					// dans tous les cas on transmet la liste crée au rafraichissable en lui demandant de répandre les données car il est
105
					// le premier à les recevoir
106
 
107
					r.rafraichir(referentielNomData,true);
32 jpm 108
 
15 david 109
				}
32 jpm 110
 
111
 
112
			}) ;
113
 
114
		} catch(RequestException e) {
115
 
116
 
117
		}
15 david 118
	}
119
}