Subversion Repositories eFlore/Applications.del

Rev

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

Rev Author Line No. Line
1196 gduche 1
package org.tela_botanica.del.client.vues.identiplante.resultats;
2
 
1283 aurelien 3
import java.util.List;
4
 
1196 gduche 5
import org.tela_botanica.del.client.cache.CacheClient;
6
import org.tela_botanica.del.client.composants.pagination.PaginationPresenteur;
7
import org.tela_botanica.del.client.composants.pagination.PaginationVue;
8
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
1283 aurelien 9
import org.tela_botanica.del.client.modeles.Image;
1196 gduche 10
import org.tela_botanica.del.client.modeles.InformationsRecherche;
11
import org.tela_botanica.del.client.modeles.ModeTri;
12
import org.tela_botanica.del.client.modeles.Observation;
13
import org.tela_botanica.del.client.modeles.ObservationServiceResultat;
14
import org.tela_botanica.del.client.services.rest.ObservationService;
15
import org.tela_botanica.del.client.services.rest.async.ObservationsCallback;
16
import org.tela_botanica.del.client.vues.identiplante.resultats.observations.ObservationPresenteur;
17
import org.tela_botanica.del.client.vues.identiplante.resultats.observations.ObservationVue;
18
 
19
import com.google.gwt.event.dom.client.ClickEvent;
20
import com.google.gwt.event.dom.client.ClickHandler;
21
import com.google.gwt.event.dom.client.HasClickHandlers;
22
import com.google.gwt.user.client.Window;
23
import com.google.gwt.user.client.ui.HasWidgets;
24
import com.google.gwt.user.client.ui.IsWidget;
1934 aurelien 25
import com.google.gwt.user.client.ui.Label;
1196 gduche 26
 
27
public class ResultatsIdentiplantePresenteur extends Presenteur {
28
 
29
	/**
30
	 * Interface vue : création des composants graphiques
31
	 * */
32
	public abstract interface Vue extends IsWidget {
33
		public HasWidgets getZoneObservations();
34
 
35
		public HasWidgets getZonePaginationHaut();
36
 
37
		public HasWidgets getZonePaginationBas();
38
 
39
		public void startChargement();
40
 
41
		public void stopChargement();
42
 
43
		public void nettoyer();
44
 
1934 aurelien 45
		public HasClickHandlers getTriParDateObservationAscendant();
1196 gduche 46
 
1934 aurelien 47
		public HasClickHandlers getTriParDateObservationDescendant();
48
 
49
		public HasClickHandlers getTriParDatePublicationAscendant();
1196 gduche 50
 
1934 aurelien 51
		public HasClickHandlers getTriParDatePublicationDescendant();
52
 
53
		public HasClickHandlers getTriParNbCommentairesAscendant();
54
 
55
		public HasClickHandlers getTriParNbCommentairesDescendant();
56
 
1196 gduche 57
		public void afficherElementsAucunResultatTrouve();
58
 
59
		public void afficherElementsResultatsTrouves();
60
 
1934 aurelien 61
		public HasClickHandlers getLabelDateObservation();
62
 
63
		public HasClickHandlers getLabelDatePublication();
64
 
65
		public HasClickHandlers getLabelNbCommentaires();
1196 gduche 66
 
1934 aurelien 67
		void setModeTriPublication(ModeTri mode);
68
 
69
		void setModeTriObservation(ModeTri mode);
70
 
71
		void setModeTriNbCommentaires(ModeTri mode);
1196 gduche 72
	}
73
 
74
	private Vue vue;
75
	private ObservationService serviceObs;
1934 aurelien 76
	private ModeTri triCourantDatePublication = ModeTri.TRI_DESCENDANT;
77
	private ModeTri triCourantDateObservation = ModeTri.PAS_DE_TRI;
78
	private ModeTri triCourantNbCommentaires = ModeTri.PAS_DE_TRI;
1196 gduche 79
	private CacheClient cache = CacheClient.getInstance();
80
	private String statut;
81
 
82
	/**
83
	 * Constructeur de la classe
84
	 *
85
	 * @param ObservationService
86
	 *            serviceObs le service pour récupérer les observations
87
	 * @Vue Vue l'objet implémentant l'interface
88
	 * */
1234 gduche 89
	public ResultatsIdentiplantePresenteur(ObservationService serviceObs, Vue vue) {
90
		String statut = CacheClient.getInstance().getFiltreStatut();
1196 gduche 91
		this.vue = vue;
1934 aurelien 92
		InformationsRecherche infos = CacheClient.getInstance().getInformationsRechercheObservation();
93
 
94
		if (infos.getTriParDatePublication() != ModeTri.PAS_DE_TRI) {
95
			triCourantDatePublication = infos.getTriParDatePublication();
96
			vue.setModeTriPublication(triCourantDatePublication);
97
		}
98
 
99
		if (infos.getTriParDateObservation() != ModeTri.PAS_DE_TRI) {
100
			triCourantDateObservation = infos.getTriParDateObservation();
101
			vue.setModeTriObservation(triCourantDatePublication);
102
		}
103
 
104
		if (infos.getTriParNbCommentaires() != ModeTri.PAS_DE_TRI) {
105
			triCourantNbCommentaires = infos.getTriParNbCommentaires();
106
			vue.setModeTriNbCommentaires(triCourantNbCommentaires);
107
		}
108
 
1196 gduche 109
		this.serviceObs = serviceObs;
110
		this.statut = statut;
111
	}
112
 
113
	/**
114
	 * Lancer l'affichage de la recherche dans le composant passé en paramètre
115
	 *
1665 jpm 116
	 * @param HasWidgets composite le conteneur de widgets dans lequel ajouter la vue
1196 gduche 117
	 * */
118
	public void go(HasWidgets composite) {
119
		composite.add(vue.asWidget());
120
		lancerRechercheEtCreerWidgetPagination();
121
		gererEvenements();
122
	}
123
 
124
	/**
125
	 * Initier un callback pour créer le widget de pagination et afficher les
126
	 * observations recues et lancer la recherche avec le service
127
	 * */
128
	public void lancerRechercheEtCreerWidgetPagination() {
129
 
130
		int debut = (cache.getPageCouranteRechercheObservations() - 1) * cache.getPasPagination();
131
		int fin = cache.getPageCouranteRechercheObservations() * cache.getPasPagination();
132
 
133
		ObservationsCallback callback = new ObservationsCallback() {
134
 
135
			@Override
136
			public void surRetour(ObservationServiceResultat observationsRecues) {
137
				creerWidgetPagination(observationsRecues.getNbTotalObservationsPourLaRecherche());
138
				afficherObservations(observationsRecues);
139
 
140
			}
141
 
142
			@Override
143
			public void surErreur(String messageErreur) {
144
				Window.alert(messageErreur);
145
 
146
			}
147
		};
148
 
149
		serviceObs.getObservations(cache.getInformationsRechercheObservation(), debut, fin, statut, callback);
150
	}
151
 
152
	/**
153
	 * Créer les widgets de pagination en fonction du nombre d'observation
154
	 *
155
	 * @param int nbObservations le nombre d'observations à afficher
156
	 * */
157
	private void creerWidgetPagination(int nbObservations) {
158
		vue.getZonePaginationHaut().clear();
159
		PaginationPresenteur paginationPresenteurHaut = creerPresenteurPagination(nbObservations);
160
		paginationPresenteurHaut.setGroupePagination("pagination_observations");
161
		paginationPresenteurHaut.go(vue.getZonePaginationHaut());
162
 
163
		vue.getZonePaginationBas().clear();
164
		PaginationPresenteur paginationPresenteurBas = creerPresenteurPagination(nbObservations);
165
		paginationPresenteurBas.setGroupePagination("pagination_observations");
166
		paginationPresenteurBas.go(vue.getZonePaginationBas());
167
	}
168
 
169
	/**
170
	 * Créer un présenteur du widget pagination
171
	 *
172
	 * @param int nbObservations le nombre total d'observation à afficher
173
	 * */
174
	private PaginationPresenteur creerPresenteurPagination(int nbObservations) {
175
		PaginationPresenteur presenteur = new PaginationPresenteur(new PaginationVue(), nbObservations, cache.getPasPagination(), cache.getPageCouranteRechercheObservations()) {
176
 
177
			@Override
178
			public void chargerElements(int debut, int fin) {
179
				chargerEtAfficherObservations(debut, fin);
180
				cache.setPageCouranteRechercheObservations(getPageCourante());
181
			}
182
 
183
			@Override
184
			public void actualiserPasCache(int pas) {
185
				cache.setPasPagination(pas);
186
			}
187
 
188
		};
189
		return presenteur;
190
	}
191
 
192
	/**
193
	 * Gestion des évènements de la vue recherche Observation
194
	 * */
195
	protected void gererEvenements() {
196
 
1934 aurelien 197
		ClickHandler surClicDateObservation = new ClickHandler() {
1196 gduche 198
			/**
199
			 * Gestion du clic sur l'option de tri par date d'observation Masque
200
			 * les éléments de tri qui sont en cours et affiche les autres
201
			 * */
202
			public void onClick(ClickEvent event) {
1934 aurelien 203
				toggleModeTriObservation();
1196 gduche 204
 
205
				InformationsRecherche informationsRechercheObservations = cache.getInformationsRechercheObservation();
1934 aurelien 206
				informationsRechercheObservations.setTriParDatePublication(ModeTri.PAS_DE_TRI);
207
				informationsRechercheObservations.setTriParNbCommentaires(ModeTri.PAS_DE_TRI);
208
				informationsRechercheObservations.setTriParDateObservation(triCourantDateObservation);
1196 gduche 209
				chercherEtAfficherObservationsPageEnCours();
210
			}
211
		};
1934 aurelien 212
 
213
		ClickHandler surClicDatePublication = new ClickHandler() {
214
			/**
215
			 * Gestion du clic sur l'option de tri par date d'observation Masque
216
			 * les éléments de tri qui sont en cours et affiche les autres
217
			 * */
218
			public void onClick(ClickEvent event) {
219
				toggleModeTriPublication();
1196 gduche 220
 
1934 aurelien 221
				InformationsRecherche informationsRechercheObservations = cache.getInformationsRechercheObservation();
222
				informationsRechercheObservations.setTriParDateObservation(ModeTri.PAS_DE_TRI);
223
				informationsRechercheObservations.setTriParNbCommentaires(ModeTri.PAS_DE_TRI);
224
				informationsRechercheObservations.setTriParDatePublication(triCourantDatePublication);
225
 
226
				chercherEtAfficherObservationsPageEnCours();
227
			}
228
		};
229
 
230
		ClickHandler surClicNbCommentaires = new ClickHandler() {
231
			/**
232
			 * Même comportement qu'au dessus mais pour le tri par nb de commentaires
233
			 */
234
			public void onClick(ClickEvent event) {
235
				toggleModeTriNbCommentaires();
236
 
237
				InformationsRecherche informationsRechercheObservations = cache.getInformationsRechercheObservation();
238
				informationsRechercheObservations.setTriParDateObservation(ModeTri.PAS_DE_TRI);
239
				informationsRechercheObservations.setTriParDatePublication(ModeTri.PAS_DE_TRI);
240
				informationsRechercheObservations.setTriParNbCommentaires(triCourantNbCommentaires);
241
				chercherEtAfficherObservationsPageEnCours();
242
			}
243
		};
244
 
245
		vue.getLabelDateObservation().addClickHandler(surClicDateObservation);
246
		vue.getTriParDateObservationAscendant().addClickHandler(surClicDateObservation);
247
		vue.getTriParDateObservationDescendant().addClickHandler(surClicDateObservation);
248
 
249
		vue.getLabelDatePublication().addClickHandler(surClicDatePublication);
250
		vue.getTriParDatePublicationAscendant().addClickHandler(surClicDatePublication);
251
		vue.getTriParDatePublicationDescendant().addClickHandler(surClicDatePublication);
252
 
253
		vue.getLabelNbCommentaires().addClickHandler(surClicNbCommentaires);
254
		vue.getTriParNbCommentairesAscendant().addClickHandler(surClicNbCommentaires);
255
		vue.getTriParNbCommentairesDescendant().addClickHandler(surClicNbCommentaires);
1196 gduche 256
	}
257
 
258
	/**
259
	 * Inverser le mode de tri en fonction du précédent
260
	 * */
1934 aurelien 261
	public void toggleModeTriPublication() {
262
		if (triCourantDatePublication == ModeTri.TRI_ASCENDANT) {
263
			triCourantDatePublication = ModeTri.TRI_DESCENDANT;
1967 aurelien 264
		} else if(triCourantDatePublication == ModeTri.TRI_DESCENDANT) {
265
			triCourantDatePublication = ModeTri.TRI_ASCENDANT;
1196 gduche 266
		} else {
1967 aurelien 267
			triCourantDatePublication = ModeTri.TRI_DESCENDANT;
1196 gduche 268
		}
1934 aurelien 269
 
270
		triCourantDateObservation = ModeTri.PAS_DE_TRI;
271
		triCourantNbCommentaires = ModeTri.PAS_DE_TRI;
1196 gduche 272
 
1934 aurelien 273
		vue.setModeTriPublication(triCourantDatePublication);
1196 gduche 274
	}
1934 aurelien 275
 
276
	/**
277
	 * Inverser le mode de tri en fonction du précédent
278
	 * */
279
	public void toggleModeTriObservation() {
280
		if (triCourantDateObservation == ModeTri.TRI_ASCENDANT) {
281
			triCourantDateObservation = ModeTri.TRI_DESCENDANT;
1967 aurelien 282
		} else if(triCourantDateObservation == ModeTri.TRI_DESCENDANT) {
283
			triCourantDateObservation = ModeTri.TRI_ASCENDANT;
1934 aurelien 284
		} else {
1967 aurelien 285
			triCourantDateObservation = ModeTri.TRI_DESCENDANT;
1934 aurelien 286
		}
287
 
288
		triCourantDatePublication = ModeTri.PAS_DE_TRI;
289
		triCourantNbCommentaires = ModeTri.PAS_DE_TRI;
1196 gduche 290
 
1934 aurelien 291
		vue.setModeTriObservation(triCourantDateObservation);
292
	}
293
 
1196 gduche 294
	/**
1934 aurelien 295
	 * Inverser le mode de tri en fonction du précédent
296
	 * */
297
	public void toggleModeTriNbCommentaires() {
298
		if (triCourantNbCommentaires == ModeTri.TRI_ASCENDANT) {
299
			triCourantNbCommentaires = ModeTri.TRI_DESCENDANT;
1967 aurelien 300
		} else if(triCourantNbCommentaires == ModeTri.TRI_DESCENDANT) {
301
			triCourantNbCommentaires = ModeTri.TRI_ASCENDANT;
1934 aurelien 302
		} else {
1967 aurelien 303
			triCourantNbCommentaires = ModeTri.TRI_DESCENDANT;
1934 aurelien 304
		}
305
 
306
		triCourantDateObservation = ModeTri.PAS_DE_TRI;
307
		triCourantDatePublication = ModeTri.PAS_DE_TRI;
308
 
309
		vue.setModeTriNbCommentaires(triCourantNbCommentaires);
310
	}
311
 
312
	/**
1196 gduche 313
	 * Initialiser les variable de début et fin et lancer le chargement des
314
	 * observations
315
	 * */
316
	public void chercherEtAfficherObservationsPageEnCours() {
317
		int debut = (cache.getPageCouranteRechercheObservations() - 1) * cache.getPasPagination();
318
		int fin = (cache.getPageCouranteRechercheObservations()) * cache.getPasPagination();
319
		chargerEtAfficherObservations(debut, fin);
320
	}
321
 
322
	/**
323
	 * Lancer le service pour charger les observations entre debut et fin et les
324
	 * afficher
325
	 *
326
	 * @param int debut l'entier de départ de la requete
327
	 * @param int fin l'entier de limite de la requete
328
	 * */
329
	public void chargerEtAfficherObservations(int debut, int fin) {
330
		vue.startChargement();
331
		vue.nettoyer();
332
 
333
		ObservationsCallback surReceptionObservation = new ObservationsCallback() {
334
 
335
			@Override
336
			public void surRetour(ObservationServiceResultat observationsRecues) {
337
				afficherObservations(observationsRecues);
338
 
339
			}
340
 
341
			@Override
342
			public void surErreur(String messageErreur) {
343
				Window.alert(messageErreur);
344
 
345
			}
346
		};
347
		serviceObs.getObservations(cache.getInformationsRechercheObservation(), debut, fin, statut, surReceptionObservation);
348
	}
349
 
350
	/**
351
	 * Parcrourir les résultats de la recherche pour initier l'affichage de
352
	 * chaque observation
353
	 *
354
	 * @param ObservationServiceResultat
355
	 *            resultats les résultats issus de la requête
356
	 * */
357
	private void afficherObservations(ObservationServiceResultat resultats) {
358
		vue.nettoyer();
359
 
360
		if (resultats.getObservations() == null || resultats.getObservations().size() == 0) {
361
			vue.afficherElementsAucunResultatTrouve();
362
		} else {
363
			vue.afficherElementsResultatsTrouves();
364
			for (Observation observation : resultats.getObservations()) {
1283 aurelien 365
				List<Image> listeImagesObs = observation.getImages();
366
				Image imagePrincipale = null;
367
				if(listeImagesObs != null && listeImagesObs.size() > 0) {
368
					imagePrincipale = listeImagesObs.get(0);
369
				}
370
				ObservationPresenteur presenteur = new ObservationPresenteur(new ObservationVue(), observation, imagePrincipale);
1196 gduche 371
				presenteur.go(vue.getZoneObservations());
372
			}
373
		}
1501 aurelien 374
		CacheClient.getInstance().mettreAjourUrlCourante();
1196 gduche 375
		vue.stopChargement();
376
	}
377
}