| 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;
 | 
        
           |  |  | 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;
 | 
        
           |  |  | 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";
 | 
        
           | 253 | aurelien | 23 |   | 
        
           |  |  | 24 | 	Rafraichissable r = null;
 | 
        
           |  |  | 25 |   | 
        
           |  |  | 26 | 	public InformationCommuneDAO(Rafraichissable r) {
 | 
        
           |  |  | 27 | 		this.r = r;
 | 
        
           | 239 | aurelien | 28 | 	}
 | 
        
           |  |  | 29 |   | 
        
           | 258 | aurelien | 30 | 	public void obtenirCommunePlusProche(final Rafraichissable r, final double lng,
 | 
        
           |  |  | 31 | 			final double lat) {
 | 
        
           | 253 | aurelien | 32 |   | 
        
           |  |  | 33 | 		String adresseAppel = Configuration.getServiceBaseUrl() + "/"
 | 
        
           |  |  | 34 | 				+ NOM_SERVICE + "/" + URL.encode("" + lat) + "/"
 | 
        
           |  |  | 35 | 				+ URL.encode("" + lng) + "/*/*/";
 | 
        
           |  |  | 36 | 		RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, adresseAppel);
 | 
        
           |  |  | 37 |   | 
        
           | 239 | aurelien | 38 | 		try {
 | 
        
           | 253 | aurelien | 39 | 			rb.sendRequest(null, new RequestCallback() {
 | 
        
           |  |  | 40 |   | 
        
           | 1293 | aurelien | 41 | 				@Override
 | 
        
           | 253 | aurelien | 42 | 				public void onError(Request request, Throwable exception) {
 | 
        
           | 239 | aurelien | 43 | 					Window.alert(exception.getMessage());
 | 
        
           |  |  | 44 | 				}
 | 
        
           | 253 | aurelien | 45 |   | 
        
           | 1293 | aurelien | 46 | 				@Override
 | 
        
           | 253 | aurelien | 47 | 				public void onResponseReceived(Request request,
 | 
        
           |  |  | 48 | 						Response response) {
 | 
        
           | 751 | aurelien | 49 |   | 
        
           |  |  | 50 | 					EntiteGeographiqueObservation infos;
 | 
        
           |  |  | 51 | 					String idLocalite = "";
 | 
        
           |  |  | 52 | 					String nomCommune = "";
 | 
        
           | 253 | aurelien | 53 |   | 
        
           |  |  | 54 | 					if (response.getStatusCode() == Response.SC_BAD_REQUEST) {
 | 
        
           | 239 | aurelien | 55 | 						Window.alert("Requete mal formée");
 | 
        
           | 253 | aurelien | 56 | 					} else {
 | 
        
           | 646 | aurelien | 57 |   | 
        
           |  |  | 58 | 						if(response.getText().equals("")) {
 | 
        
           |  |  | 59 |   | 
        
           |  |  | 60 | 							infos = new EntiteGeographiqueObservation(idLocalite, nomCommune, null, null);
 | 
        
           |  |  | 61 | 							infos.setLat(""+lat);
 | 
        
           |  |  | 62 | 							infos.setLon(""+lng);
 | 
        
           |  |  | 63 |   | 
        
           |  |  | 64 | 							r.rafraichir(infos, false);
 | 
        
           |  |  | 65 | 						}
 | 
        
           |  |  | 66 |   | 
        
           | 253 | aurelien | 67 | 						final JSONValue responseValue = JSONParser
 | 
        
           |  |  | 68 | 								.parse(response.getText());
 | 
        
           |  |  | 69 |   | 
        
           |  |  | 70 | 						if (responseValue.isObject() != null) {
 | 
        
           | 266 | aurelien | 71 |   | 
        
           | 751 | aurelien | 72 | 							JSONObject objectRetour = responseValue.isObject();
 | 
        
           |  |  | 73 |   | 
        
           |  |  | 74 | 							if(objectRetour.get("nom").isString() != null) {
 | 
        
           |  |  | 75 | 								nomCommune = objectRetour.get("nom").isString().stringValue();
 | 
        
           | 253 | aurelien | 76 | 							}
 | 
        
           |  |  | 77 |   | 
        
           | 751 | aurelien | 78 | 							if(objectRetour.get("code_insee").isString() != null) {
 | 
        
           |  |  | 79 | 								idLocalite = objectRetour.get("code_insee").isString().stringValue().substring(0, 2);
 | 
        
           |  |  | 80 | 							}
 | 
        
           | 239 | aurelien | 81 | 						}
 | 
        
           |  |  | 82 | 					}
 | 
        
           | 751 | aurelien | 83 |   | 
        
           |  |  | 84 | 					infos = new EntiteGeographiqueObservation(idLocalite, nomCommune, null, null);
 | 
        
           |  |  | 85 | 					infos.setLat(""+lat);
 | 
        
           |  |  | 86 | 					infos.setLon(""+lng);
 | 
        
           |  |  | 87 |   | 
        
           |  |  | 88 | 					r.rafraichir(infos, false);
 | 
        
           | 253 | aurelien | 89 | 				}
 | 
        
           | 239 | aurelien | 90 | 			});
 | 
        
           | 253 | aurelien | 91 | 		} catch (RequestException e) {
 | 
        
           | 239 | aurelien | 92 | 			Window.alert(e.getMessage());
 | 
        
           |  |  | 93 | 		}
 | 
        
           |  |  | 94 | 	}
 | 
        
           |  |  | 95 |   | 
        
           | 253 | aurelien | 96 | 	public void obtenirInfosCommune(final Rafraichissable r,
 | 
        
           |  |  | 97 | 			String valeurCommune, String codePostal) {
 | 
        
           |  |  | 98 |   | 
        
           |  |  | 99 | 		codePostal = codePostal.replaceAll("000null", "*");
 | 
        
           |  |  | 100 | 		codePostal = codePostal.replaceAll("\"", "");
 | 
        
           | 258 | aurelien | 101 |   | 
        
           |  |  | 102 | 		valeurCommune = valeurCommune.split(" \\([0-9][0-9]\\)")[0];
 | 
        
           | 253 | aurelien | 103 | 		valeurCommune = valeurCommune.replaceAll("000null", "*");
 | 
        
           |  |  | 104 | 		valeurCommune = valeurCommune.replaceAll("\"", "");
 | 
        
           |  |  | 105 |   | 
        
           |  |  | 106 |   | 
        
           |  |  | 107 | 		String adresseAppel = Configuration.getServiceBaseUrl() + "/"
 | 
        
           |  |  | 108 | 				+ NOM_SERVICE + "/*/*/" + URL.encode(valeurCommune) + "/"
 | 
        
           |  |  | 109 | 				+ URL.encode(codePostal) + "/"
 | 
        
           |  |  | 110 | 				+ URL.encode(CODE_PAYS);
 | 
        
           |  |  | 111 | 		RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, adresseAppel);
 | 
        
           | 239 | aurelien | 112 |   | 
        
           |  |  | 113 | 		try {
 | 
        
           |  |  | 114 | 			rb.sendRequest(null, new RequestCallback() {
 | 
        
           | 253 | aurelien | 115 |   | 
        
           | 1293 | aurelien | 116 | 				@Override
 | 
        
           | 239 | aurelien | 117 | 				public void onError(Request request, Throwable exception) {
 | 
        
           | 253 | aurelien | 118 | 					Window.alert(exception.getMessage());
 | 
        
           | 239 | aurelien | 119 | 				}
 | 
        
           | 253 | aurelien | 120 |   | 
        
           | 1293 | aurelien | 121 | 				@Override
 | 
        
           | 253 | aurelien | 122 | 				public void onResponseReceived(Request request,
 | 
        
           |  |  | 123 | 						Response response) {
 | 
        
           |  |  | 124 |   | 
        
           |  |  | 125 | 					if (response.getStatusCode() == Response.SC_BAD_REQUEST) {
 | 
        
           |  |  | 126 | 						r.rafraichir("Impossible de géolocaliser cette observation", false);
 | 
        
           | 1317 | aurelien | 127 | 					} else {
 | 
        
           | 253 | aurelien | 128 | 						final JSONValue responseValue = JSONParser
 | 
        
           |  |  | 129 | 								.parse(response.getText());
 | 
        
           | 779 | aurelien | 130 |   | 
        
           | 253 | aurelien | 131 | 						if (responseValue.isObject() != null) {
 | 
        
           | 266 | aurelien | 132 |   | 
        
           |  |  | 133 | 							EntiteGeographiqueObservation infos;
 | 
        
           |  |  | 134 | 							Double lng = 0.0;
 | 
        
           |  |  | 135 | 							Double lat = 0.0;
 | 
        
           | 779 | aurelien | 136 |   | 
        
           |  |  | 137 | 							JSONObject objectRetour = responseValue.isObject();
 | 
        
           | 266 | aurelien | 138 |   | 
        
           | 1293 | aurelien | 139 | 							String nomCommune = Util.getValeurJsonOuVide(objectRetour, "nom");
 | 
        
           |  |  | 140 | 							String idLocalite = Util.getValeurJsonOuVide(objectRetour, "code_insee");
 | 
        
           |  |  | 141 | 							lat = Util.jsonNonNull(objectRetour,"lat") ? objectRetour.get("lat").isNumber().doubleValue(): 0.0;
 | 
        
           |  |  | 142 | 							lng = Util.jsonNonNull(objectRetour,"lng") ? objectRetour.get("lng").isNumber().doubleValue(): 0.0;
 | 
        
           |  |  | 143 |   | 
        
           | 266 | aurelien | 144 | 							infos = new EntiteGeographiqueObservation(idLocalite, nomCommune, null, null);
 | 
        
           |  |  | 145 | 							infos.setLat(""+lat);
 | 
        
           |  |  | 146 | 							infos.setLon(""+lng);
 | 
        
           | 779 | aurelien | 147 |   | 
        
           | 266 | aurelien | 148 | 							r.rafraichir(infos, false);
 | 
        
           | 1317 | aurelien | 149 | 						} else {
 | 
        
           |  |  | 150 | 							EntiteGeographiqueObservation infos;
 | 
        
           |  |  | 151 | 							String idLocalite = "";
 | 
        
           |  |  | 152 | 							String nomCommune = "";
 | 
        
           |  |  | 153 |   | 
        
           |  |  | 154 | 							infos = new EntiteGeographiqueObservation(idLocalite, nomCommune, null, null);
 | 
        
           |  |  | 155 | 							infos.setLat("");
 | 
        
           |  |  | 156 | 							infos.setLon("");
 | 
        
           |  |  | 157 |   | 
        
           |  |  | 158 | 							r.rafraichir(infos, false);
 | 
        
           | 239 | aurelien | 159 | 						}
 | 
        
           |  |  | 160 | 					}
 | 
        
           | 253 | aurelien | 161 | 				}
 | 
        
           | 239 | aurelien | 162 | 			});
 | 
        
           | 253 | aurelien | 163 | 		} catch (RequestException e) {
 | 
        
           | 239 | aurelien | 164 | 			Window.alert(e.getMessage());
 | 
        
           |  |  | 165 | 		}
 | 
        
           |  |  | 166 | 	}
 | 
        
           |  |  | 167 | }
 |