Subversion Repositories eFlore/Applications.coel

Rev

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

Rev Author Line No. Line
935 jpm 1
package org.tela_botanica.client.modeles.structure;
121 jpm 2
 
1040 gduche 3
import java.util.HashMap;
4
 
770 jpm 5
import org.tela_botanica.client.Mediateur;
121 jpm 6
import org.tela_botanica.client.RegistreId;
770 jpm 7
import org.tela_botanica.client.http.JsonRestRequestBuilder;
8
import org.tela_botanica.client.http.JsonRestRequestCallback;
121 jpm 9
import org.tela_botanica.client.interfaces.Rafraichissable;
935 jpm 10
import org.tela_botanica.client.modeles.Information;
1040 gduche 11
import org.tela_botanica.client.modeles.personne.PersonneListe;
935 jpm 12
import org.tela_botanica.client.modeles.projet.ProjetListe;
1319 gduche 13
import org.tela_botanica.client.synchronisation.Reponse;
770 jpm 14
import org.tela_botanica.client.util.UtilDAO;
121 jpm 15
 
16
import com.extjs.gxt.ui.client.Registry;
133 jpm 17
import com.google.gwt.core.client.GWT;
121 jpm 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.JSONValue;
1633 aurelien 22
import com.google.gwt.user.client.Window;
121 jpm 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) {
1367 cyprien 31
		if (Mediateur.DEBUG) System.out.println("|| StructureAsyncDao > vueARafraichir = "+vue.getClass().toString());
770 jpm 32
		vueARafraichir = vue;
33
		utilisateurId = ((Mediateur) Registry.get(RegistreId.MEDIATEUR)).getUtilisateurId();
34
	}
1329 cyprien 35
 
36
	/**
37
	 *
38
	 * @param paginationProgressive : définit le mode de consultation de la base de données
39
	 * 			- True :	la consultation des données est progressive, ce qui signifie que la liste est chargée (paginée) au
40
	 * 						fur et à mesure de la consultation des données par l'utilisateur.
41
	 * 			- False :	la consultation des données est classique : un seul appel à la base de données est effectué, le retour
42
	 * 						est renvoyé à l'appelant
43
	 * 			// FIXME : si la taille de la liste est supérieure à la limite du JREST (150), ce deuxieme mode ne fonctionne pas
44
	 */
1691 raphael 45
	public void selectionner(final boolean paginationProgressive, final String projetId, final String structureId, final String nomStructure, final String formatRetour, final int start, final int nbElements, final Integer seqId, final boolean searchCity) {
46
		String[] parametres = {projetId, structureId, nomStructure};
47
 
1040 gduche 48
		HashMap<String, String> restrictions = new HashMap<String, String>();
1468 jpm 49
 
1040 gduche 50
		if (nbElements != -1)	{
51
			restrictions.put("limit", String.valueOf(nbElements));
52
		}
1691 raphael 53
		restrictions.put("searchCity", String.valueOf(searchCity));
1040 gduche 54
 
1526 jpm 55
		if ((formatRetour != null) && (formatRetour != "")) {
56
			restrictions.put("formatRetour", formatRetour);
57
		}
58
 
1329 cyprien 59
		/** GESTION DE LA REQUETE dans le cas d'une liste paginée progressive **/
60
		if (paginationProgressive) {
61
 
62
			/** DEFINITION DU TUPLE DE DEPART **/
63
			restrictions.put("start", String.valueOf(start));
64
 
65
			/** CONSTRUCTION DE LA REQUETE **/
66
    		final JsonRestRequestBuilder rb = UtilDAO.construireRequete(SERVICE_NOM, parametres, restrictions);
1319 gduche 67
 
1329 cyprien 68
    		/** ENVOI DE LA REQUETE **/
69
    		rb.envoyerRequete(null, new JsonRestRequestCallback()
70
    		{
71
    			/** RECEPTION DE LA REPONSE **/
72
    			public void surReponse(JSONValue responseValue)
73
    			{
74
					if (seqId != null)	{
75
						Reponse reponseRequete = new Reponse(responseValue, seqId);
76
						vueARafraichir.rafraichir(reponseRequete);
77
					}
78
 
79
    				/** Dans le cas d'une liste paginée, vueARafraichir est un objet Proxy.
80
    				 * On retourne l'objet JSON au proxy afin que ce soit lui qui le traite **/
81
					else vueARafraichir.rafraichir(responseValue);
82
    			}
83
    		});
84
		}
85
		/** GESTION DE LA REQUETE dans le cas d'une liste NON paginée progressive **/
86
		else {
87
 
88
			/** DEFINITION DU TUPLE DE DEPART **/
89
			restrictions.put("start", String.valueOf(start*nbElements));
90
 
91
			final JsonRestRequestBuilder rb = UtilDAO.construireRequete(SERVICE_NOM, parametres, restrictions);
92
 
93
			rb.envoyerRequete(null, new JsonRestRequestCallback() {
94
 
95
				public void surReponse(JSONValue responseValue) {
96
 
97
					if (responseValue != null) {
1319 gduche 98
 
1329 cyprien 99
						Information info = new Information("selection_structure");
100
 
101
						JSONObject responseObject = responseValue.isObject();
102
 
103
						if (responseObject != null) {
104
 
105
							// Si la réponse est un tableau, alors c'est une liste de structure qui a été retournée
106
							if (responseObject.get("structures").isArray() != null) {
107
 
108
								JSONObject reponse = responseObject;
109
								StructureListe structures;
110
								structures = new StructureListe(reponse.get("structures").isArray(), reponse.get("nbElements").isNumber(), vueARafraichir);
111
								structures.setTaillePage(nbElements);
112
								structures.setPageCourante(start);
113
 
114
								info.setDonnee(0, structures);
115
 
116
								if (seqId != null)	{
117
									Reponse reponseRequete = new Reponse(info, seqId);
118
									vueARafraichir.rafraichir(reponseRequete);
119
								}
120
								else vueARafraichir.rafraichir(structures);
121
 
122
							// Si la réponse est un objet, alors c'est une unique structure qui a été retournée
123
							} else if (responseObject.get("structures").isObject() != null) {
124
 
125
								JSONObject reponse = responseObject.get("structures").isObject();
126
								Structure structure = new Structure(reponse);
127
								StructureConservation structureConservation = new StructureConservation(reponse);
128
								StructureValorisation structureValorisation = new StructureValorisation(reponse);
129
 
130
								info.setDonnee(0, structure);
131
								info.setDonnee(1, structureConservation);
132
								info.setDonnee(2, structureValorisation);
133
 
134
								if (seqId != null)	{
135
									Reponse reponseRequete = new Reponse(info, seqId);
136
									vueARafraichir.rafraichir(reponseRequete);
137
								}
138
								else vueARafraichir.rafraichir(info);
139
							}
140
						} else {
141
							GWT.log(rb.getUrl()+"\n\tLa réponse n'est pas un objet ou un talbeau JSON et vaut : "+responseValue.toString(), null);
1040 gduche 142
						}
1329 cyprien 143
					} else {
144
						if (structureId == null) {
145
							// Dans le cas, où nous demandons toutes les institutions et qu'il n'y en a pas, nous retournons un objet vide
146
							StructureListe structures = new StructureListe(0);
147
							vueARafraichir.rafraichir(structures);
1319 gduche 148
						}
770 jpm 149
					}
150
				}
1329 cyprien 151
			});
152
		}
770 jpm 153
	}
154
 
1329 cyprien 155
 
770 jpm 156
	public void ajouter(final Structure str, StructureConservation conservation, StructureValorisation valorisation) {
157
		String postDonneesEncodees = construirePost(null, str, conservation, valorisation);
156 jp_milcent 158
 
770 jpm 159
		final JsonRestRequestBuilder rb = UtilDAO.construireRequetePost(SERVICE_NOM);
160
		rb.envoyerRequete(postDonneesEncodees, new JsonRestRequestCallback() {
161
			@Override
162
			public void surReponse(JSONValue responseValue) {
1708 raphael 163
				// Si la requête a impliquées des valeurs autogénérées, l'objet modifié est retourné
164
				JSONObject obj;
165
				if ((obj = responseValue.isObject()) != null) {
166
					if (obj.get("structures").isObject() != null) {
167
						Information info = new Information("ajout_structure");
168
						Structure structure = new Structure(obj.get("structures").isObject());
169
						info.setDonnee(structure);
170
						vueARafraichir.rafraichir(info);
171
					}
172
				}
173
				else if (responseValue.isString() != null) {
770 jpm 174
					Information info = new Information("ajout_structure");
175
					String structureIdOuMessage = responseValue.isString().stringValue();
176
					if (structureIdOuMessage.matches("^[0-9]+$")) {
177
						info.setDonnee(structureIdOuMessage);
156 jp_milcent 178
					} else {
770 jpm 179
						info.setMessage(structureIdOuMessage);
156 jp_milcent 180
					}
770 jpm 181
					vueARafraichir.rafraichir(info);
182
				} else {
183
					GWT.log(rb.getUrl()+"\n\tLa réponse n'est pas une chaine JSON.", null);
156 jp_milcent 184
				}
770 jpm 185
			}
186
		});
156 jp_milcent 187
	}
770 jpm 188
 
189
	public void modifier(String structureId, Structure str, StructureConservation conservation, StructureValorisation valorisation) {
190
		String postDonneesEncodees = construirePost(structureId, str, conservation, valorisation);
772 jpm 191
		String[] parametres = {structureId};
192
		final JsonRestRequestBuilder rb = UtilDAO.construireRequetePost(SERVICE_NOM, parametres);
193
		rb.envoyerRequete(postDonneesEncodees, new JsonRestRequestCallback() {
194
			@Override
195
			public void surReponse(JSONValue responseValue) {
1673 raphael 196
				// Si la requête a impliquées des valeurs autogénérées, l'objet modifié est retourné
197
				JSONObject obj;
198
				if ((obj = responseValue.isObject()) != null) {
199
					if (obj.get("structures").isObject() != null) {
200
						Structure structure = new Structure(obj.get("structures").isObject());
201
						Information info = new Information("modif_structure");
202
						info.setDonnee(structure);
203
						vueARafraichir.rafraichir(info);
204
					}
205
				}
772 jpm 206
				// Si la requête est un succès, reception d'une chaine
1673 raphael 207
				else if (responseValue.isString() != null) {
772 jpm 208
					Information info = new Information("modif_structure");
209
					info.setMessage(responseValue.isString().stringValue());
210
					vueARafraichir.rafraichir(info);
211
				} else {
212
					GWT.log(rb.getUrl()+"\n\tLa réponse n'est pas une chaine JSON.", null);
121 jpm 213
				}
772 jpm 214
			}
215
		});
121 jpm 216
	}
770 jpm 217
 
772 jpm 218
	public void supprimer(String structuresId) {
219
		String[] parametres = {utilisateurId, structuresId};
220
		final JsonRestRequestBuilder rb = UtilDAO.construireRequetePost(SERVICE_NOM, parametres);
221
		rb.envoyerRequeteSuppression(new JsonRestRequestCallback() {
222
			@Override
223
			public void surReponse(JSONValue responseValue) {
224
				if (responseValue.isString() != null) {
225
					Information info = new Information("suppression_structure");
226
					info.setMessage(responseValue.isString().stringValue());
227
					vueARafraichir.rafraichir(info);
228
				} else {
229
					GWT.log(rb.getUrl()+"\n\tLa réponse n'est pas une chaine JSON.", null);
133 jpm 230
				}
772 jpm 231
			}
232
		});
133 jpm 233
	}
169 jp_milcent 234
 
770 jpm 235
	private String construirePost(String structureId, Structure str, StructureConservation conservation, StructureValorisation valorisation) {
865 jpm 236
		String postDonnees = "cmhl_ce_modifier_par=" + URL.encodeComponent(utilisateurId);
237
 
602 jp_milcent 238
		if (str != null) {
612 jp_milcent 239
			if (structureId != null) {
240
				postDonnees += "&cs_id_structure=" + URL.encodeComponent(structureId);
241
			}
1369 cyprien 242
 
243
			postDonnees += "&cpr_abreviation=" + URL.encodeComponent(str.getAbreviationProjet());
602 jp_milcent 244
			postDonnees += "&cs_ce_projet=" + URL.encodeComponent(str.getIdProjet()) +
245
				"&cs_ce_mere=" + URL.encodeComponent(str.getIdMere()) +
246
				"&cs_guid=" + URL.encodeComponent(str.getGuid()) +
247
				"&cs_truk_identifiant_alternatif=" + URL.encodeComponent(str.getIdAlternatif()) +
248
				"&cs_nom=" + URL.encodeComponent(str.getNom()) +
249
				"&cs_truk_nom_alternatif=" + URL.encodeComponent(str.getNomAlternatif()) +
1173 jpm 250
				"&cs_description=" + URL.encodeComponent(str.getDescription()) +
602 jp_milcent 251
				"&cs_ce_type=" + URL.encodeComponent(str.getType()) +
252
				"&cs_ce_truk_type_prive=" + URL.encodeComponent(str.getTypePrive()) +
253
				"&cs_ce_truk_type_public=" + URL.encodeComponent(str.getTypePublic()) +
254
				"&cs_adresse_01=" + URL.encodeComponent(str.getAdresse()) +
255
				"&cs_adresse_02=" + URL.encodeComponent(str.getAdresseComplement()) +
256
				"&cs_date_fondation=" + URL.encodeComponent(str.getDateFondationFormatMysql()) +
257
				"&cs_code_postal=" + URL.encodeComponent(str.getCodePostal()) +
258
				"&cs_ville=" + URL.encodeComponent(str.getVille()) +
1037 gduche 259
				"&cs_ce_truk_region=" + URL.encodeComponent(str.get("ce_truk_region").toString()) +
602 jp_milcent 260
				"&cs_ce_truk_pays=" + URL.encodeComponent(str.getPays()) +
1173 jpm 261
				"&cs_latitude=" + URL.encodeComponent(str.getLatitude()) +
262
				"&cs_longitude=" + URL.encodeComponent(str.getLongitude()) +
602 jp_milcent 263
				"&cs_truk_telephone=" + URL.encodeComponent(str.getTelephone()) +
264
				"&cs_truk_url=" + URL.encodeComponent(str.getUrl()) +
1685 raphael 265
				"&cs_nbre_personne=" + (str.getNbrePersonne() != null ? str.getNbrePersonne() : "") +
1173 jpm 266
				"&cs_condition_acces=" + URL.encodeComponent(str.getConditionAcces())+
267
				"&cs_condition_usage=" + URL.encodeComponent(str.getConditionUsage())+
1039 gduche 268
				"&cs_courriel=" + URL.encodeComponent(str.getCourriel());
602 jp_milcent 269
		}
270
		if (conservation != null) {
612 jp_milcent 271
			if (structureId != null) {
272
				postDonnees += "&csc_id_structure=" + URL.encodeComponent(structureId);
273
			}
1693 raphael 274
			postDonnees += "&csc_mark_formation=" + (conservation.getFormation() != null ? conservation.getFormation() : "") +
602 jp_milcent 275
				"&csc_formation=" + URL.encodeComponent(conservation.getFormationInfo()) +
1693 raphael 276
				"&csc_mark_formation_interet=" + (conservation.getFormationInteret() != null ? conservation.getFormationInteret() : "") +
602 jp_milcent 277
				"&csc_truk_stockage_local=" + URL.encodeComponent(conservation.getStockageLocal()) +
278
				"&csc_truk_stockage_meuble=" + URL.encodeComponent(conservation.getStockageMeuble()) +
279
				"&csc_truk_stockage_parametre=" + URL.encodeComponent(conservation.getStockageParametre()) +
1695 raphael 280
				"&csc_mark_collection_commune=" + (conservation.getCollectionCommune() != null ? conservation.getCollectionCommune() : "") +
602 jp_milcent 281
				"&csc_truk_collection_autre=" + URL.encodeComponent(conservation.getCollectionAutre()) +
1695 raphael 282
				"&csc_mark_acces_controle=" + (conservation.getAccesControle() != null ? conservation.getAccesControle() : "") +
283
				"&csc_mark_restauration=" + (conservation.getRestauration() != null ? conservation.getRestauration() : "") +
602 jp_milcent 284
				"&csc_truk_restauration_operation=" + URL.encodeComponent(conservation.getRestaurationOperation()) +
285
				"&csc_ce_materiel_conservation=" + URL.encodeComponent(conservation.getMaterielConservation()) +
286
				"&csc_truk_materiel_autre=" + URL.encodeComponent(conservation.getMaterielAutre()) +
1695 raphael 287
				"&csc_mark_traitement=" + (conservation.getTraitement() != null ? conservation.getTraitement() : "") +
602 jp_milcent 288
				"&csc_truk_traitement=" + URL.encodeComponent(conservation.getTraitements()) +
1695 raphael 289
				"&csc_mark_acquisition_collection=" + (conservation.getAcquisitionCollection() != null ? conservation.getAcquisitionCollection() : "") +
290
				"&csc_mark_acquisition_echantillon=" + (conservation.getAcquisitionEchantillon() != null ? conservation.getAcquisitionEchantillon() : "") +
602 jp_milcent 291
				"&csc_mark_acquisition_traitement=" + URL.encodeComponent(conservation.getAcquisitionTraitement()) +
292
				"&csc_truk_acquisition_traitement_poison=" + URL.encodeComponent(conservation.getAcquisitionTraitementPoison()) +
293
				"&csc_truk_acquisition_traitement_insecte=" + URL.encodeComponent(conservation.getAcquisitionTraitementInsecte());
294
		}
295
		if (valorisation != null) {
612 jp_milcent 296
			if (structureId != null) {
632 jp_milcent 297
				postDonnees += "&csv_id_structure=" + URL.encodeComponent(structureId);
612 jp_milcent 298
			}
602 jp_milcent 299
			postDonnees += "&csv_mark_action=" + URL.encodeComponent(valorisation.getAction()) +
300
				"&csv_truk_action=" + URL.encodeComponent(valorisation.getActionInfo()) +
301
				"&csv_publication=" + URL.encodeComponent(valorisation.getPublication()) +
302
				"&csv_collection_autre=" + URL.encodeComponent(valorisation.getCollectionAutre()) +
303
				"&csv_mark_action_future=" + URL.encodeComponent(valorisation.getActionFuture()) +
304
				"&csv_action_future=" + URL.encodeComponent(valorisation.getActionFutureInfo()) +
305
				"&csv_mark_recherche=" + URL.encodeComponent(valorisation.getRecherche()) +
306
				"&csv_truk_recherche_provenance=" + URL.encodeComponent(valorisation.getRechercheProvenance()) +
307
				"&csv_truk_recherche_type=" + URL.encodeComponent(valorisation.getRechercheType()) +
308
				"&csv_mark_acces_ss_motif=" + URL.encodeComponent(valorisation.getAccesSansMotif()) +
309
				"&csv_acces_ss_motif=" + URL.encodeComponent(valorisation.getAccesSansMotifInfo()) +
310
				"&csv_mark_visite_avec_motif=" + URL.encodeComponent(valorisation.getVisiteAvecMotif()) +
311
				"&csv_visite_avec_motif=" + URL.encodeComponent(valorisation.getVisiteAvecMotifInfo());
312
		}
313
		return postDonnees;
314
	}
1673 raphael 315
}