| 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
|
| 2694 |
aurelien |
127 |
if(Util.estUnDepartement(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 |
}
|