Subversion Repositories eFlore/Applications.cel

Rev

Rev 54 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
12 david 1
package org.tela_botanica.client.modeles;
2
 
3
import org.tela_botanica.client.interfaces.FournisseurListe;
4
import org.tela_botanica.client.interfaces.Rafraichissable;
5
import org.tela_botanica.client.observation.ObservationModele;
6
 
32 jpm 7
import com.google.gwt.http.client.Request;
8
import com.google.gwt.http.client.RequestBuilder;
9
import com.google.gwt.http.client.RequestCallback;
10
import com.google.gwt.http.client.RequestException;
11
import com.google.gwt.http.client.Response;
12 david 12
import com.google.gwt.json.client.JSONArray;
13
import com.google.gwt.json.client.JSONParser;
14
import com.google.gwt.json.client.JSONString;
15
import com.google.gwt.json.client.JSONValue;
16
 
17
/**
65 david 18
 * DAO la liste des communes.
12 david 19
 * @author David Delon
20
 *
21
 */
22
public class ListeReferentielCommuneAsynchroneDAO implements FournisseurListe {
23
 
24
 
25
 
26
 
27
	/**
65 david 28
	 * Le modèle associé au DAO.
12 david 29
	 */
65 david 30
	private ObservationModele observationModele = null;
12 david 31
 
32
 
65 david 33
	/**
34
	 *  Constructeur.
35
	 * @param obs : Modele
36
	 */
37
 
38
	public ListeReferentielCommuneAsynchroneDAO(final ObservationModele obs) {
39
		this.observationModele = obs;
12 david 40
	}
41
 
42
 
43
	/**
44
	 * Envoie une requete au serveur jrest pour obtenir les communes  correspondant
65 david 45
	 * à des critères données en paramètres.
12 david 46
	 * @param r le rafraichissable qui demande la mise à jour
65 david 47
	 * @param critere un string contenant le terme a rechercher
12 david 48
	 */
49
 
50
 
65 david 51
	public final void obtenirListeDonnees(final Rafraichissable r, final String critere) {
32 jpm 52
 
65 david 53
		RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, observationModele.getConfig().getServiceBaseUrl() + "/LocationSearch/" + critere);
32 jpm 54
 
55
		try {
56
 
57
			rb.sendRequest(null, new RequestCallback() {
58
 
65 david 59
				public void onError(final Request request, final Throwable exception) {
32 jpm 60
					// TODO Auto-generated method stub
61
 
62
				}
63
 
65 david 64
				public void onResponseReceived(final Request request,
65
						final Response response) {
32 jpm 66
 
65 david 67
					final ListeReferentielCommune referentielCommuneData;
32 jpm 68
 
69
					final JSONValue responseValue = JSONParser.parse(response.getText());
70
 
65 david 71
					JSONArray reponse = null;
32 jpm 72
 
73
 
74
					// si c'est un tableau
65 david 75
					if ((reponse = responseValue.isArray()) != null) {
32 jpm 76
 
77
						JSONArray communes;
78
						final int taillemax = reponse.size();
79
 
80
						referentielCommuneData = new ListeReferentielCommune(taillemax);
81
 
82
						for (int i = 0; i < taillemax; i++) {
65 david 83
							if ((communes = reponse.get(i).isArray()) != null) {
32 jpm 84
 
65 david 85
								String commune = ((JSONString) communes.get(0)).stringValue();
86
								String departement  = ((JSONString) communes.get(1)).stringValue();
32 jpm 87
 
88
 
65 david 89
								ReferentielCommune com = new ReferentielCommune(commune, departement);
12 david 90
 
65 david 91
								referentielCommuneData.put(com.getCommune() + com.getDepartement(), com);
32 jpm 92
 
93
							}
94
						}
95
					} else {
96
 
65 david 97
						referentielCommuneData = new ListeReferentielCommune(0);
32 jpm 98
 
99
					}
100
					// dans tous les cas on transmet la liste crée au rafraichissable en lui demandant de répandre les données car il est
65 david 101
					// le premier à les recevoir
32 jpm 102
 
65 david 103
					r.rafraichir(referentielCommuneData, true);
104
 
32 jpm 105
				}
106
 
65 david 107
			});
32 jpm 108
 
109
		} catch (RequestException e) {
110
 
65 david 111
			e.printStackTrace();
32 jpm 112
		}
12 david 113
 
114
	}
115
}