Subversion Repositories eFlore/Applications.cel

Rev

Rev 2621 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
989 aurelien 1
package org.tela_botanica.client.modeles.dao;
239 aurelien 2
 
2621 aurelien 3
import org.tela_botanica.client.i18n.Msg;
239 aurelien 4
import org.tela_botanica.client.interfaces.Rafraichissable;
989 aurelien 5
import org.tela_botanica.client.modeles.objets.Configuration;
6
import org.tela_botanica.client.modeles.objets.EntiteGeographiqueObservation;
1293 aurelien 7
import org.tela_botanica.client.util.Util;
239 aurelien 8
 
9
import com.google.gwt.http.client.Request;
1918 aurelien 10
import org.tela_botanica.client.util.RequestBuilderWithCredentials;
239 aurelien 11
import com.google.gwt.http.client.RequestCallback;
12
import com.google.gwt.http.client.RequestException;
13
import com.google.gwt.http.client.Response;
14
import com.google.gwt.http.client.URL;
15
import com.google.gwt.json.client.JSONObject;
16
import com.google.gwt.json.client.JSONParser;
17
import com.google.gwt.json.client.JSONValue;
18
import com.google.gwt.user.client.Window;
19
 
2568 aurelien 20
public class InformationLocaliteDAO {
239 aurelien 21
 
22
	private final String NOM_SERVICE = "CoordSearch";
23
	private final String CODE_PAYS = "FR";
2558 aurelien 24
 
25
	// Ce DAO peut être fréquemment sollicité lors de l'utilisation de la carte
26
	// et peut empiler beaucoup de longues requête, ceci permet donc de les annuler facilement
27
	private static Request requeteEnCours = null;
253 aurelien 28
 
29
	Rafraichissable r = null;
30
 
2568 aurelien 31
	public InformationLocaliteDAO(Rafraichissable r) {
253 aurelien 32
		this.r = r;
239 aurelien 33
	}
34
 
2568 aurelien 35
	public void obtenirLocalitePlusProche(final Rafraichissable r, final double lng,
2558 aurelien 36
			final double lat) {
37
 
38
		annulerRequeteEnCours();
253 aurelien 39
 
40
		String adresseAppel = Configuration.getServiceBaseUrl() + "/"
2568 aurelien 41
				+ NOM_SERVICE + "?lat="+URL.encode("" + lat) + "&lon="+URL.encode("" + lng);
1918 aurelien 42
		RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, adresseAppel);
253 aurelien 43
 
239 aurelien 44
		try {
2558 aurelien 45
			requeteEnCours = rb.sendRequest(null, new RequestCallback() {
253 aurelien 46
 
1293 aurelien 47
				@Override
253 aurelien 48
				public void onError(Request request, Throwable exception) {
239 aurelien 49
					Window.alert(exception.getMessage());
2558 aurelien 50
					requeteEnCours = null;
239 aurelien 51
				}
253 aurelien 52
 
1293 aurelien 53
				@Override
253 aurelien 54
				public void onResponseReceived(Request request,
55
						Response response) {
751 aurelien 56
 
57
					EntiteGeographiqueObservation infos;
58
					String idLocalite = "";
2568 aurelien 59
					String nomLocalite = "";
2558 aurelien 60
					String pays = "";
253 aurelien 61
 
62
					if (response.getStatusCode() == Response.SC_BAD_REQUEST) {
2621 aurelien 63
						Window.alert(Msg.get("requete-mal-formee"));
253 aurelien 64
					} else {
646 aurelien 65
 
66
						if(response.getText().equals("")) {
67
 
2568 aurelien 68
							infos = new EntiteGeographiqueObservation(idLocalite, nomLocalite, null, null);
646 aurelien 69
							infos.setLat(""+lat);
70
							infos.setLon(""+lng);
71
 
72
							r.rafraichir(infos, false);
73
						}
74
 
253 aurelien 75
						final JSONValue responseValue = JSONParser
76
								.parse(response.getText());
77
 
78
						if (responseValue.isObject() != null) {
266 aurelien 79
 
751 aurelien 80
							JSONObject objectRetour = responseValue.isObject();
81
 
82
							if(objectRetour.get("nom").isString() != null) {
2568 aurelien 83
								nomLocalite = objectRetour.get("nom").isString().stringValue();
253 aurelien 84
							}
85
 
2558 aurelien 86
							if(objectRetour.get("code_zone").isString() != null) {
87
								idLocalite = objectRetour.get("code_zone").isString().stringValue().substring(0, 2);
751 aurelien 88
							}
2558 aurelien 89
 
90
							if(objectRetour.get("code_pays").isString() != null) {
91
								pays = objectRetour.get("code_pays").isString().stringValue();
92
							}
239 aurelien 93
						}
94
					}
751 aurelien 95
 
2568 aurelien 96
					infos = new EntiteGeographiqueObservation(idLocalite, nomLocalite, null, null);
751 aurelien 97
					infos.setLat(""+lat);
98
					infos.setLon(""+lng);
2558 aurelien 99
					infos.setPays(pays);
751 aurelien 100
 
101
					r.rafraichir(infos, false);
253 aurelien 102
				}
239 aurelien 103
			});
253 aurelien 104
		} catch (RequestException e) {
239 aurelien 105
			Window.alert(e.getMessage());
106
		}
107
	}
108
 
2568 aurelien 109
	public void obtenirInfosLocalite(final Rafraichissable r,
110
			String valeurLocalite, String codeLoc) {
253 aurelien 111
 
2558 aurelien 112
		annulerRequeteEnCours();
258 aurelien 113
 
2558 aurelien 114
		codeLoc = codeLoc.replaceAll("000null", "*");
115
		codeLoc = codeLoc.replaceAll("\"", "");
116
 
2568 aurelien 117
		valeurLocalite = valeurLocalite.split(" \\([0-9][0-9]\\)")[0];
118
		valeurLocalite = valeurLocalite.replaceAll("000null", "*");
119
		valeurLocalite = valeurLocalite.replaceAll("\"", "");
253 aurelien 120
 
121
 
122
		String adresseAppel = Configuration.getServiceBaseUrl() + "/"
2568 aurelien 123
				+ NOM_SERVICE+"?zone="+ URL.encode(valeurLocalite);
2558 aurelien 124
 
125
		if(!codeLoc.trim().isEmpty()) {
126
			// Cas du code de département ou postal
127
			if(Util.estUnNombre(codeLoc)) {
2568 aurelien 128
				adresseAppel += "&code="+URL.encode(codeLoc)+"&pays="+URL.encode(CODE_PAYS);
2558 aurelien 129
			} else {
130
				//cas du code pays
2568 aurelien 131
				adresseAppel += "&pays="+URL.encode(codeLoc);
2558 aurelien 132
			}
133
 
134
		}
135
 
1918 aurelien 136
		RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, adresseAppel);
239 aurelien 137
 
138
		try {
2558 aurelien 139
			requeteEnCours = rb.sendRequest(null, new RequestCallback() {
253 aurelien 140
 
1293 aurelien 141
				@Override
239 aurelien 142
				public void onError(Request request, Throwable exception) {
253 aurelien 143
					Window.alert(exception.getMessage());
239 aurelien 144
				}
253 aurelien 145
 
1293 aurelien 146
				@Override
253 aurelien 147
				public void onResponseReceived(Request request,
148
						Response response) {
149
 
150
					if (response.getStatusCode() == Response.SC_BAD_REQUEST) {
2621 aurelien 151
						r.rafraichir(Msg.get("impossible-geolocaliser-obs"), false);
1317 aurelien 152
					} else {
253 aurelien 153
						final JSONValue responseValue = JSONParser
154
								.parse(response.getText());
779 aurelien 155
 
253 aurelien 156
						if (responseValue.isObject() != null) {
266 aurelien 157
 
158
							EntiteGeographiqueObservation infos;
159
							Double lng = 0.0;
160
							Double lat = 0.0;
779 aurelien 161
 
162
							JSONObject objectRetour = responseValue.isObject();
266 aurelien 163
 
2568 aurelien 164
							String nomLocalite = Util.getValeurJsonOuVide(objectRetour, "nom");
2558 aurelien 165
							String idLocalite = Util.getValeurJsonOuVide(objectRetour, "code_zone");
1293 aurelien 166
							lat = Util.jsonNonNull(objectRetour,"lat") ? objectRetour.get("lat").isNumber().doubleValue(): 0.0;
167
							lng = Util.jsonNonNull(objectRetour,"lng") ? objectRetour.get("lng").isNumber().doubleValue(): 0.0;
2558 aurelien 168
							String pays = Util.getValeurJsonOuVide(objectRetour, "code_pays");
169
 
2568 aurelien 170
							infos = new EntiteGeographiqueObservation(idLocalite, nomLocalite, null, null);
266 aurelien 171
							infos.setLat(""+lat);
172
							infos.setLon(""+lng);
2558 aurelien 173
							infos.setPays(pays);
779 aurelien 174
 
266 aurelien 175
							r.rafraichir(infos, false);
1317 aurelien 176
						} else {
177
							EntiteGeographiqueObservation infos;
178
							String idLocalite = "";
2568 aurelien 179
							String nomLocalite = "";
1317 aurelien 180
 
2568 aurelien 181
							infos = new EntiteGeographiqueObservation(idLocalite, nomLocalite, null, null);
1317 aurelien 182
							infos.setLat("");
183
							infos.setLon("");
184
 
185
							r.rafraichir(infos, false);
239 aurelien 186
						}
187
					}
253 aurelien 188
				}
239 aurelien 189
			});
253 aurelien 190
		} catch (RequestException e) {
239 aurelien 191
			Window.alert(e.getMessage());
192
		}
193
	}
2558 aurelien 194
 
195
	public static void annulerRequeteEnCours() {
196
		if(requeteEnCours != null) {
197
			requeteEnCours.cancel();
198
			requeteEnCours = null;
199
		}
200
	}
239 aurelien 201
}