Subversion Repositories eFlore/Applications.coel

Rev

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

Rev Author Line No. Line
121 jpm 1
package org.tela_botanica.client.modeles;
2
 
770 jpm 3
import org.tela_botanica.client.Mediateur;
121 jpm 4
import org.tela_botanica.client.RegistreId;
770 jpm 5
import org.tela_botanica.client.http.JsonRestRequestBuilder;
6
import org.tela_botanica.client.http.JsonRestRequestCallback;
121 jpm 7
import org.tela_botanica.client.interfaces.Rafraichissable;
770 jpm 8
import org.tela_botanica.client.util.UtilDAO;
121 jpm 9
 
10
import com.extjs.gxt.ui.client.Registry;
153 jpm 11
import com.extjs.gxt.ui.client.widget.Info;
133 jpm 12
import com.google.gwt.core.client.GWT;
121 jpm 13
import com.google.gwt.http.client.Request;
14
import com.google.gwt.http.client.RequestBuilder;
15
import com.google.gwt.http.client.RequestCallback;
16
import com.google.gwt.http.client.RequestException;
17
import com.google.gwt.http.client.Response;
18
import com.google.gwt.http.client.URL;
19
import com.google.gwt.json.client.JSONArray;
156 jp_milcent 20
import com.google.gwt.json.client.JSONObject;
121 jpm 21
import com.google.gwt.json.client.JSONParser;
22
import com.google.gwt.json.client.JSONValue;
23
 
24
public class StructureAsyncDao {
268 jp_milcent 25
	private static final String SERVICE_NOM = "CoelStructure";
264 jp_milcent 26
 
770 jpm 27
	private String utilisateurId = null;
28
	private Rafraichissable vueARafraichir = null;
29
 
30
	public StructureAsyncDao(Rafraichissable vue) {
31
		vueARafraichir = vue;
32
		utilisateurId = ((Mediateur) Registry.get(RegistreId.MEDIATEUR)).getUtilisateurId();
33
	}
34
 
35
	public void selectionner(final String projetId, final String structureId) {
36
		String[] parametres = {projetId, structureId};
37
		final JsonRestRequestBuilder rb = UtilDAO.construireRequete(SERVICE_NOM, parametres);
38
		rb.envoyerRequete(null, new JsonRestRequestCallback() {
39
			@Override
40
			public void surReponse(JSONValue responseValue) {
41
				if (responseValue != null) {
42
					Information info = new Information("selection_structure");
43
					// Si la requête est un succès, reception d'un objet ou d'un tableau
44
					if (responseValue.isObject() != null) {
45
						final JSONObject reponse = responseValue.isObject();
46
						Structure structure = new Structure(reponse);
47
						StructureConservation structureConservation = new StructureConservation(reponse);
48
						StructureValorisation structureValorisation = new StructureValorisation(reponse);
49
						info.setDonnee(0, structure);
50
						info.setDonnee(1, structureConservation);
51
						info.setDonnee(2, structureValorisation);
52
						vueARafraichir.rafraichir(info);
53
					} else if (responseValue.isArray() != null) {
54
						final JSONArray reponse = responseValue.isArray();
55
						StructureListe structures = new StructureListe(reponse);
56
						vueARafraichir.rafraichir(structures);
57
					} else {
58
						GWT.log(rb.getUrl()+"\n\tLa réponse n'est pas un objet ou un talbeau JSON et vaut : "+responseValue.toString(), null);
59
					}
60
				} else {
61
					if (structureId == null) {
62
						// Dans le cas, où nous demandons toutes les institutions et qu'il n'y en a pas, nous retournons un objet vide
63
						StructureListe structures = new StructureListe(0);
64
						vueARafraichir.rafraichir(structures);
65
					}
66
				}
67
			}
68
		});
69
	}
70
 
71
	public void ajouter(final Structure str, StructureConservation conservation, StructureValorisation valorisation) {
72
		String postDonneesEncodees = construirePost(null, str, conservation, valorisation);
156 jp_milcent 73
 
770 jpm 74
		final JsonRestRequestBuilder rb = UtilDAO.construireRequetePost(SERVICE_NOM);
75
		rb.envoyerRequete(postDonneesEncodees, new JsonRestRequestCallback() {
76
			@Override
77
			public void surReponse(JSONValue responseValue) {
78
				if (responseValue.isString() != null) {
79
					Information info = new Information("ajout_structure");
80
					String structureIdOuMessage = responseValue.isString().stringValue();
81
					if (structureIdOuMessage.matches("^[0-9]+$")) {
82
						info.setDonnee(structureIdOuMessage);
156 jp_milcent 83
					} else {
770 jpm 84
						info.setMessage(structureIdOuMessage);
156 jp_milcent 85
					}
770 jpm 86
					vueARafraichir.rafraichir(info);
87
				} else {
88
					GWT.log(rb.getUrl()+"\n\tLa réponse n'est pas une chaine JSON.", null);
156 jp_milcent 89
				}
770 jpm 90
			}
91
		});
156 jp_milcent 92
	}
770 jpm 93
 
94
	public void modifier(String structureId, Structure str, StructureConservation conservation, StructureValorisation valorisation) {
95
		final String url = ((Configuration) Registry.get(RegistreId.CONFIG)).getServiceBaseUrl() +
96
			SERVICE_NOM + "/" + structureId;
156 jp_milcent 97
 
153 jpm 98
		RequestBuilder rb = new RequestBuilder(RequestBuilder.POST, url);
99
 
770 jpm 100
		String postDonneesEncodees = construirePost(structureId, str, conservation, valorisation);
101
 
121 jpm 102
		try {
306 jp_milcent 103
			rb.sendRequest(postDonneesEncodees, new RequestCallback() {
770 jpm 104
 
121 jpm 105
				public void onError(Request request, Throwable exception) {
153 jpm 106
					// Gestion des exceptions déclenchées par l'exécution de la requête
770 jpm 107
					GWT.log("Erreur à l'exécution du service "+SERVICE_NOM+" (modif)", exception);
153 jpm 108
					Info.display("Erreur de Requête", "Une erreur s'est produite lors de l'exécution de la requête.");
121 jpm 109
				}
153 jpm 110
 
111
				public void onErrorHTTP(Request request, Response reponse) {
112
					// Gestion des erreurs HTTP renvoyé par Apache ou JRest
113
					Information info = new Information("erreur_jrest", JSONParser.parse(reponse.getText()).isArray());
114
					GWT.log("Erreur JREST - Code "+reponse.getStatusCode()+"\n"+info.getMessages().toString(), null);
115
					Info.display("Erreur JREST - Code "+reponse.getStatusCode(), info.toString());
116
				}
770 jpm 117
 
121 jpm 118
				public void onResponseReceived(Request request, Response response) {
153 jpm 119
					// Si le code de réponse HTTP ne vaut pas 200 OK, on lance le mécanise d'erreur HTTP
120
					if (response.getStatusCode() != 200) {
121
						onErrorHTTP(request, response);
122
					} else {
770 jpm 123
						Information info = new Information("modif_structure");
606 jp_milcent 124
						if (response.getHeader("X-DebugJrest-Data") != null && response.getHeader("X-DebugJrest-Data").length() != 0) {
306 jp_milcent 125
							final JSONValue reponseEnteteDeboguage = JSONParser.parse(response.getHeader("X-DebugJrest-Data"));
126
							if (reponseEnteteDeboguage.isArray() != null) {
127
								info.setDeboguages(reponseEnteteDeboguage.isArray());
412 jp_milcent 128
								GWT.log("DEBOGUAGE:\n"+info.getDeboguages().toString(), null);
306 jp_milcent 129
							}
130
						}
770 jpm 131
						if (response.getText() != null && response.getText().length() != 0) {
153 jpm 132
							final JSONValue responseValue = JSONParser.parse(response.getText());
133
 
155 jpm 134
							// Si la requête est un succès, reception d'une chaine
135
							if (responseValue.isString() != null) {
306 jp_milcent 136
								info.setMessage(responseValue.isString().stringValue());
153 jpm 137
							} else {
306 jp_milcent 138
								info.setDeboguage("La réponse n'est pas une chaine JSON.");
153 jpm 139
							}
140
						} else {
141
							if (response.getText() == null) {
770 jpm 142
								info.setDeboguage("La réponse vaul null");
306 jp_milcent 143
							} else if (response.getText().length() == 0) {
770 jpm 144
								info.setDeboguage("La réponse a une taille de 0");
153 jpm 145
							}
121 jpm 146
						}
770 jpm 147
						vueARafraichir.rafraichir(info);
121 jpm 148
					}
149
				}
150
 
151
			}) ;
152
		} catch (RequestException e) {
153 jpm 153
			// Gestion des exceptions déclenchées par la création de la requête (url non-valide ?)
770 jpm 154
			GWT.log("Erreur à la création du service "+SERVICE_NOM+" (modif)", e);
153 jpm 155
			Info.display("Erreur de Requête", "Une erreur s'est produite lors de la création de la requête.");
770 jpm 156
		}
121 jpm 157
	}
770 jpm 158
 
159
	public void supprimer(String structureId) {
133 jpm 160
		// Ajout des paramètres et données à supprimer dans l'URL
161
		final String url = ((Configuration) Registry.get(RegistreId.CONFIG)).getServiceBaseUrl() +
264 jp_milcent 162
			SERVICE_NOM + "/" +
163
			utilisateurId + "/" +
164
			structureId +
133 jpm 165
			"";
166
 
167
		// DELETE n'étant pas disponible comme méthode HTTP, nous utilisons POST avec le paramètre action=DELETE
168
		RequestBuilder rb = new RequestBuilder(RequestBuilder.POST, url);
169
		String postDonnees = "action=DELETE";
170
 
171
		try {
172
			rb.sendRequest(postDonnees, new RequestCallback() {
173
 
174
				public void onError(Request request, Throwable exception) {
156 jp_milcent 175
					// Gestion des exceptions déclenchées par l'exécution de la requête
268 jp_milcent 176
					GWT.log("Erreur à l'exécution du service "+SERVICE_NOM+" (suppression)", exception);
156 jp_milcent 177
					Info.display("Erreur de Requête", "Une erreur s'est produite lors de l'exécution de la requête.");
133 jpm 178
				}
179
 
153 jpm 180
				public void onErrorHTTP(Request request, Response reponse) {
181
					// Gestion des erreurs HTTP renvoyé par Apache ou JRest
182
					Information info = new Information("erreur_jrest", JSONParser.parse(reponse.getText()).isArray());
183
					GWT.log("Erreur JREST - Code "+reponse.getStatusCode()+"\n"+info.getMessages().toString(), null);
184
					Info.display("Erreur JREST - Code "+reponse.getStatusCode(), info.toString());
185
				}
186
 
133 jpm 187
				public void onResponseReceived(Request request, Response response) {
153 jpm 188
					// Si le code de réponse HTTP ne vaut pas 200 OK, on lance le mécanise d'erreur HTTP
189
					if (response.getStatusCode() != 200) {
190
						onErrorHTTP(request, response);
191
					} else {
412 jp_milcent 192
						Information info = new Information("suppression_structure");
606 jp_milcent 193
						if (response.getHeader("X-DebugJrest-Data") != null && response.getHeader("X-DebugJrest-Data").length() != 0) {
412 jp_milcent 194
							final JSONValue reponseEnteteDeboguage = JSONParser.parse(response.getHeader("X-DebugJrest-Data"));
195
							if (reponseEnteteDeboguage.isArray() != null) {
196
								info.setDeboguages(reponseEnteteDeboguage.isArray());
197
								GWT.log("DEBOGUAGE:\n"+info.getDeboguages().toString(), null);
198
							}
199
						}
153 jpm 200
						if (response.getText().length() != 0 && response.getText() != null) {
201
							final JSONValue responseValue = JSONParser.parse(response.getText());
202
 
156 jp_milcent 203
							// Si la requête est un succès, reception d'une chaine
153 jpm 204
							if (responseValue.isString() != null) {
412 jp_milcent 205
								info.setMessage(responseValue.isString().stringValue());
206
								vueARafraichir.rafraichir(info);
153 jpm 207
							} else {
208
								GWT.log(url+"\n\tLa réponse n'est pas une chaine JSON.", null);
209
							}
133 jpm 210
						} else {
153 jpm 211
							GWT.log(url, null);
212
							if (response.getText().length() == 0) {
213
								GWT.log("\tLa réponse a une taille de 0", null);
214
							}
215
							if (response.getText() == null) {
216
								GWT.log("\tLa réponse vaul null", null);
217
							}
133 jpm 218
						}
219
					}
220
				}
221
 
222
			}) ;
223
		} catch (RequestException e) {
153 jpm 224
			// Gestion des exceptions déclenchées par la création de la requête (url non-valide ?)
268 jp_milcent 225
			GWT.log("Erreur à la création du service "+SERVICE_NOM+" (suppression)", e);
153 jpm 226
			Info.display("Erreur de Requête", "Une erreur s'est produite lors de la création de la requête.");
133 jpm 227
		}
228
	}
169 jp_milcent 229
 
770 jpm 230
	private String construirePost(String structureId, Structure str, StructureConservation conservation, StructureValorisation valorisation) {
602 jp_milcent 231
		String postDonnees = "cmhl_ce_modifier_par=" + URL.encodeComponent(utilisateurId);
232
		if (str != null) {
612 jp_milcent 233
			if (structureId != null) {
234
				postDonnees += "&cs_id_structure=" + URL.encodeComponent(structureId);
235
			}
602 jp_milcent 236
			postDonnees += "&cs_ce_projet=" + URL.encodeComponent(str.getIdProjet()) +
237
				"&cs_ce_mere=" + URL.encodeComponent(str.getIdMere()) +
238
				"&cs_guid=" + URL.encodeComponent(str.getGuid()) +
239
				"&cs_truk_identifiant_alternatif=" + URL.encodeComponent(str.getIdAlternatif()) +
240
				"&cs_nom=" + URL.encodeComponent(str.getNom()) +
241
				"&cs_truk_nom_alternatif=" + URL.encodeComponent(str.getNomAlternatif()) +
242
				"&cs_ce_type=" + URL.encodeComponent(str.getType()) +
243
				"&cs_ce_truk_type_prive=" + URL.encodeComponent(str.getTypePrive()) +
244
				"&cs_ce_truk_type_public=" + URL.encodeComponent(str.getTypePublic()) +
245
				"&cs_adresse_01=" + URL.encodeComponent(str.getAdresse()) +
246
				"&cs_adresse_02=" + URL.encodeComponent(str.getAdresseComplement()) +
247
				"&cs_date_fondation=" + URL.encodeComponent(str.getDateFondationFormatMysql()) +
248
				"&cs_code_postal=" + URL.encodeComponent(str.getCodePostal()) +
249
				"&cs_ville=" + URL.encodeComponent(str.getVille()) +
250
				"&cs_ce_truk_region=" + URL.encodeComponent(str.getRegion()) +
251
				"&cs_ce_truk_pays=" + URL.encodeComponent(str.getPays()) +
252
				"&cs_truk_telephone=" + URL.encodeComponent(str.getTelephone()) +
253
				"&cs_truk_url=" + URL.encodeComponent(str.getUrl()) +
254
				"&cs_nbre_personne=" + URL.encodeComponent(Integer.toString(str.getNbrePersonne()));
255
		}
256
		if (conservation != null) {
612 jp_milcent 257
			if (structureId != null) {
258
				postDonnees += "&csc_id_structure=" + URL.encodeComponent(structureId);
259
			}
602 jp_milcent 260
			postDonnees += "&csc_mark_formation=" + URL.encodeComponent(conservation.getFormation()) +
261
				"&csc_formation=" + URL.encodeComponent(conservation.getFormationInfo()) +
262
				"&csc_mark_formation_interet=" + URL.encodeComponent(conservation.getFormationInteret()) +
263
				"&csc_truk_stockage_local=" + URL.encodeComponent(conservation.getStockageLocal()) +
264
				"&csc_truk_stockage_meuble=" + URL.encodeComponent(conservation.getStockageMeuble()) +
265
				"&csc_truk_stockage_parametre=" + URL.encodeComponent(conservation.getStockageParametre()) +
266
				"&csc_mark_collection_commune=" + URL.encodeComponent(conservation.getCollectionCommune()) +
267
				"&csc_truk_collection_autre=" + URL.encodeComponent(conservation.getCollectionAutre()) +
268
				"&csc_mark_acces_controle=" + URL.encodeComponent(conservation.getAccesControle()) +
269
				"&csc_mark_restauration=" + URL.encodeComponent(conservation.getRestauration()) +
270
				"&csc_truk_restauration_operation=" + URL.encodeComponent(conservation.getRestaurationOperation()) +
271
				"&csc_ce_materiel_conservation=" + URL.encodeComponent(conservation.getMaterielConservation()) +
272
				"&csc_truk_materiel_autre=" + URL.encodeComponent(conservation.getMaterielAutre()) +
273
				"&csc_mark_traitement=" + URL.encodeComponent(conservation.getTraitement()) +
274
				"&csc_truk_traitement=" + URL.encodeComponent(conservation.getTraitements()) +
275
				"&csc_mark_acquisition_collection=" + URL.encodeComponent(conservation.getAcquisitionCollection()) +
276
				"&csc_mark_acquisition_echantillon=" + URL.encodeComponent(conservation.getAcquisitionEchantillon()) +
277
				"&csc_mark_acquisition_traitement=" + URL.encodeComponent(conservation.getAcquisitionTraitement()) +
278
				"&csc_truk_acquisition_traitement_poison=" + URL.encodeComponent(conservation.getAcquisitionTraitementPoison()) +
279
				"&csc_truk_acquisition_traitement_insecte=" + URL.encodeComponent(conservation.getAcquisitionTraitementInsecte());
280
		}
281
		if (valorisation != null) {
612 jp_milcent 282
			if (structureId != null) {
632 jp_milcent 283
				postDonnees += "&csv_id_structure=" + URL.encodeComponent(structureId);
612 jp_milcent 284
			}
602 jp_milcent 285
			postDonnees += "&csv_mark_action=" + URL.encodeComponent(valorisation.getAction()) +
286
				"&csv_truk_action=" + URL.encodeComponent(valorisation.getActionInfo()) +
287
				"&csv_publication=" + URL.encodeComponent(valorisation.getPublication()) +
288
				"&csv_collection_autre=" + URL.encodeComponent(valorisation.getCollectionAutre()) +
289
				"&csv_mark_action_future=" + URL.encodeComponent(valorisation.getActionFuture()) +
290
				"&csv_action_future=" + URL.encodeComponent(valorisation.getActionFutureInfo()) +
291
				"&csv_mark_recherche=" + URL.encodeComponent(valorisation.getRecherche()) +
292
				"&csv_truk_recherche_provenance=" + URL.encodeComponent(valorisation.getRechercheProvenance()) +
293
				"&csv_truk_recherche_type=" + URL.encodeComponent(valorisation.getRechercheType()) +
294
				"&csv_mark_acces_ss_motif=" + URL.encodeComponent(valorisation.getAccesSansMotif()) +
295
				"&csv_acces_ss_motif=" + URL.encodeComponent(valorisation.getAccesSansMotifInfo()) +
296
				"&csv_mark_visite_avec_motif=" + URL.encodeComponent(valorisation.getVisiteAvecMotif()) +
297
				"&csv_visite_avec_motif=" + URL.encodeComponent(valorisation.getVisiteAvecMotifInfo());
298
		}
299
		return postDonnees;
300
	}
121 jpm 301
}