Subversion Repositories eFlore/Applications.cel

Rev

Rev 1918 | Go to most recent revision | 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
 
3
import org.tela_botanica.client.interfaces.Rafraichissable;
989 aurelien 4
import org.tela_botanica.client.modeles.objets.Configuration;
5
import org.tela_botanica.client.modeles.objets.EntiteGeographiqueObservation;
1293 aurelien 6
import org.tela_botanica.client.util.Util;
239 aurelien 7
 
8
import com.google.gwt.http.client.Request;
1918 aurelien 9
import org.tela_botanica.client.util.RequestBuilderWithCredentials;
239 aurelien 10
import com.google.gwt.http.client.RequestCallback;
11
import com.google.gwt.http.client.RequestException;
12
import com.google.gwt.http.client.Response;
13
import com.google.gwt.http.client.URL;
14
import com.google.gwt.json.client.JSONObject;
15
import com.google.gwt.json.client.JSONParser;
16
import com.google.gwt.json.client.JSONValue;
17
import com.google.gwt.user.client.Window;
18
 
253 aurelien 19
public class InformationCommuneDAO {
239 aurelien 20
 
21
	private final String NOM_SERVICE = "CoordSearch";
22
	private final String CODE_PAYS = "FR";
2558 aurelien 23
 
24
	// Ce DAO peut être fréquemment sollicité lors de l'utilisation de la carte
25
	// et peut empiler beaucoup de longues requête, ceci permet donc de les annuler facilement
26
	private static Request requeteEnCours = null;
253 aurelien 27
 
28
	Rafraichissable r = null;
29
 
30
	public InformationCommuneDAO(Rafraichissable r) {
31
		this.r = r;
239 aurelien 32
	}
33
 
258 aurelien 34
	public void obtenirCommunePlusProche(final Rafraichissable r, final double lng,
2558 aurelien 35
			final double lat) {
36
 
37
		annulerRequeteEnCours();
253 aurelien 38
 
39
		String adresseAppel = Configuration.getServiceBaseUrl() + "/"
40
				+ NOM_SERVICE + "/" + URL.encode("" + lat) + "/"
41
				+ 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 = "";
59
					String nomCommune = "";
2558 aurelien 60
					String pays = "";
253 aurelien 61
 
62
					if (response.getStatusCode() == Response.SC_BAD_REQUEST) {
239 aurelien 63
						Window.alert("Requete mal formée");
253 aurelien 64
					} else {
646 aurelien 65
 
66
						if(response.getText().equals("")) {
67
 
68
							infos = new EntiteGeographiqueObservation(idLocalite, nomCommune, null, null);
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) {
83
								nomCommune = 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
 
96
					infos = new EntiteGeographiqueObservation(idLocalite, nomCommune, null, null);
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
 
253 aurelien 109
	public void obtenirInfosCommune(final Rafraichissable r,
2558 aurelien 110
			String valeurCommune, String codeLoc) {
253 aurelien 111
 
2558 aurelien 112
		annulerRequeteEnCours();
258 aurelien 113
 
2558 aurelien 114
		codeLoc = codeLoc.replaceAll("000null", "*");
115
		codeLoc = codeLoc.replaceAll("\"", "");
116
 
258 aurelien 117
		valeurCommune = valeurCommune.split(" \\([0-9][0-9]\\)")[0];
253 aurelien 118
		valeurCommune = valeurCommune.replaceAll("000null", "*");
119
		valeurCommune = valeurCommune.replaceAll("\"", "");
120
 
121
 
122
		String adresseAppel = Configuration.getServiceBaseUrl() + "/"
2558 aurelien 123
				+ NOM_SERVICE + "/*/*/" + URL.encode(valeurCommune) + "/";
124
 
125
		if(!codeLoc.trim().isEmpty()) {
126
			// Cas du code de département ou postal
127
			if(Util.estUnNombre(codeLoc)) {
128
				adresseAppel += URL.encode(codeLoc)+"/"+URL.encode(CODE_PAYS);
129
			} else {
130
				//cas du code pays
131
				adresseAppel += "*/"+URL.encode(codeLoc);
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) {
151
						r.rafraichir("Impossible de géolocaliser cette observation", 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
 
1293 aurelien 164
							String nomCommune = 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
 
266 aurelien 170
							infos = new EntiteGeographiqueObservation(idLocalite, nomCommune, null, null);
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 = "";
179
							String nomCommune = "";
180
 
181
							infos = new EntiteGeographiqueObservation(idLocalite, nomCommune, null, null);
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
}