Subversion Repositories eFlore/Applications.del

Rev

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