Subversion Repositories eFlore/Applications.del

Rev

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

Rev Author Line No. Line
1934 aurelien 1
package org.tela_botanica.del.client.vues.pictoflora.resultats;
2
 
3
import java.util.List;
4
 
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.modeles.Image;
9
import org.tela_botanica.del.client.modeles.ImageServiceResultat;
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.Protocole;
13
import org.tela_botanica.del.client.modeles.ProtocoleServiceResultat;
14
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
15
import org.tela_botanica.del.client.navigation.evenement.changementprotocole.EvenementChangementProtocole;
16
import org.tela_botanica.del.client.navigation.evenement.changementprotocole.GestionnaireEvenementChangementProtocole;
17
import org.tela_botanica.del.client.services.rest.ImageService;
18
import org.tela_botanica.del.client.services.rest.ProtocoleService;
19
import org.tela_botanica.del.client.services.rest.async.ImagesParTaxonCallback;
20
import org.tela_botanica.del.client.services.rest.async.ProtocolesCallback;
21
import org.tela_botanica.del.client.vues.pictoflora.resultats.images.ImagePresenteur;
22
import org.tela_botanica.del.client.vues.pictoflora.resultats.images.ImageVue;
23
 
24
import com.google.gwt.core.shared.GWT;
25
import com.google.gwt.dom.client.NodeList;
26
import com.google.gwt.dom.client.OptionElement;
27
import com.google.gwt.dom.client.SelectElement;
28
import com.google.gwt.event.dom.client.ChangeEvent;
29
import com.google.gwt.event.dom.client.ChangeHandler;
30
import com.google.gwt.event.dom.client.ClickEvent;
31
import com.google.gwt.event.dom.client.ClickHandler;
32
import com.google.gwt.event.dom.client.HasChangeHandlers;
33
import com.google.gwt.event.dom.client.HasClickHandlers;
34
import com.google.gwt.user.client.Window;
35
import com.google.gwt.user.client.ui.HTMLPanel;
36
import com.google.gwt.user.client.ui.HasWidgets;
37
import com.google.gwt.user.client.ui.IsWidget;
38
import com.google.gwt.user.client.ui.ListBox;
39
 
40
public class ResultatPictofloraPresenteur {
41
	public interface Vue extends IsWidget {
42
 
43
 
44
		public void startChargement();
45
 
46
		public void nettoyer();
47
 
48
		public void creerPanneauxObservations(int size);
49
 
50
		public void stopChargement();
51
 
52
		public List<HasWidgets> getPanneauxImages();
53
 
54
		public HasWidgets getPanneauPagination();
55
 
56
		public HasWidgets getPanneauPaginationHaut();
57
 
58
		public HasClickHandlers getTriParMoyenneArithmetiqueAscendant();
59
 
60
		public HasClickHandlers getTriParMoyenneArithmetiqueDescendant();
61
 
62
		public HasClickHandlers getTriParPointsAscendant();
63
 
64
		public HasClickHandlers getTriParPointsDescendant();
65
 
66
		public HasClickHandlers getTriParDateAscendant();
67
 
68
		public HasClickHandlers getTriParDateDescendant();
69
 
70
		public HasClickHandlers getTriParNbTagsAscendant();
71
 
72
		public HasClickHandlers getTriParNbTagsDescendant();
73
 
74
		public void afficherElementsAucunResultatTrouve();
75
 
76
		public void afficherElementsResultatsTrouve();
77
 
78
		public HTMLPanel getImageTable();
79
 
80
		public HasClickHandlers getLabelMoyenneArithmetique();
81
 
82
		public void masquerMoyenneArithmetiqueAscendant();
83
 
84
		public void masquerMoyenneArithmetiqueDescendant();
85
 
86
		public void afficherMoyenneArithmetiqueAscendant();
87
 
88
		public void afficherMoyenneArithmetiqueDescendant();
89
 
90
		public HasClickHandlers getLabelDate();
91
 
92
		public void masquerDateAscendant();
93
 
94
		public void masquerDateDescendant();
95
 
96
		public void afficherDateAscendant();
97
 
98
		public void afficherDateDescendant();
99
 
100
		public HasClickHandlers getLabelTag();
101
 
102
		public void masquerTagAscendant();
103
 
104
		public void afficherTagDescendant();
105
 
106
		public void masquerTagDescendant();
107
 
108
		public void afficherTagAscendant();
109
 
110
		public HasClickHandlers getLabelPoints();
111
 
112
		public void afficherPointsAscendant();
113
 
114
		public void afficherPointsDescendant();
115
 
116
		public void masquerPointsAscendant();
117
 
118
		public void masquerPointsDescendant();
119
 
120
	}
121
 
122
	private Vue vue;
123
	private ImageService imageService;
124
	private ModeTri triCourantMoyenneArithmetique = ModeTri.TRI_ASCENDANT;
125
	private ModeTri triCourantPoints = ModeTri.TRI_ASCENDANT;
126
	private ModeTri triCourantDate = ModeTri.TRI_DESCENDANT;
127
	private ModeTri triCourantTag = ModeTri.TRI_DESCENDANT;
128
 
129
	public ResultatPictofloraPresenteur(ImageService imageService, ProtocoleService protocoleService, Vue vue) {
130
		this.vue = vue;
131
		this.imageService = imageService;
132
	}
133
 
134
	public void go(HasWidgets composite) {
135
		composite.add(vue.asWidget());
136
		vue.startChargement();
137
		rechercherImagesEtCreerWidgetPagination();
138
		gererEvenements();
139
		vue.masquerMoyenneArithmetiqueDescendant();
140
		vue.masquerMoyenneArithmetiqueAscendant();
141
		vue.masquerDateDescendant();
142
		vue.masquerDateAscendant();
143
		vue.masquerTagAscendant();
144
		vue.masquerTagDescendant();
145
		vue.masquerPointsAscendant();
146
		vue.masquerPointsDescendant();
147
 
148
		initialiserAPartirInfosCache();
149
	}
150
 
151
	private void initialiserAPartirInfosCache() {
152
		InformationsRecherche infos = CacheClient.getInstance().getInformationsRechercheImage();
153
		if (infos.getTriParDatePublication() != ModeTri.PAS_DE_TRI) {
154
			triCourantDate = infos.getTriParDatePublication();
155
			mettreAJourAffichageTriDate();
156
		}
157
 
158
		if (infos.getTriParMoyenneArithmetique() != ModeTri.PAS_DE_TRI) {
159
			triCourantMoyenneArithmetique = infos.getTriParMoyenneArithmetique();
160
			mettreAJourAffichageTriMoyenneArithmetique();
161
		}
162
 
163
		if (infos.getTriParNbPoints() != ModeTri.PAS_DE_TRI) {
164
			triCourantPoints = infos.getTriParNbPoints();
165
			mettreAJourAffichageTriPoints();
166
		}
167
 
168
		if (infos.getTriParNbTags() != ModeTri.PAS_DE_TRI) {
169
			triCourantTag = infos.getTriParNbTags();
170
			mettreAjourAffichageTriTag();
171
		}
172
	}
173
 
174
	public void gererEvenements() {
175
		ClickHandler surClicTriMoyenneArithmetique = new ClickHandler() {
176
			@Override
177
			public void onClick(ClickEvent event) {
178
				surClicTriMoyenneArithmetique();
179
			}
180
		};
181
 
182
		vue.getLabelMoyenneArithmetique().addClickHandler(surClicTriMoyenneArithmetique);
183
		vue.getTriParMoyenneArithmetiqueAscendant().addClickHandler(surClicTriMoyenneArithmetique);
184
		vue.getTriParMoyenneArithmetiqueDescendant().addClickHandler(surClicTriMoyenneArithmetique);
185
 
186
		ClickHandler surClicTriPoints = new ClickHandler() {
187
			@Override
188
			public void onClick(ClickEvent event) {
189
				surClicTriPoints();
190
			}
191
		};
192
 
193
		vue.getLabelPoints().addClickHandler(surClicTriPoints);
194
		vue.getTriParPointsAscendant().addClickHandler(surClicTriPoints);
195
		vue.getTriParPointsDescendant().addClickHandler(surClicTriPoints);
196
 
197
		ClickHandler surClicTriDate = new ClickHandler() {
198
			@Override
199
			public void onClick(ClickEvent event) {
200
				surClicTriDate();
201
			}
202
		};
203
 
204
		vue.getLabelDate().addClickHandler(surClicTriDate);
205
		vue.getTriParDateAscendant().addClickHandler(surClicTriDate);
206
		vue.getTriParDateDescendant().addClickHandler(surClicTriDate);
207
 
208
		ClickHandler surClicTriTag = new ClickHandler() {
209
			@Override
210
			public void onClick(ClickEvent event) {
211
				surClicTriTag();
212
			}
213
		};
214
 
215
		vue.getLabelTag().addClickHandler(surClicTriTag);
216
		vue.getTriParNbTagsAscendant().addClickHandler(surClicTriTag);
217
		vue.getTriParNbTagsDescendant().addClickHandler(surClicTriTag);
218
 
219
		BusEvenementiel.getInstance().addHandler(EvenementChangementProtocole.TYPE, new GestionnaireEvenementChangementProtocole() {
220
			@Override
221
			public void onChangementProtocole(EvenementChangementProtocole event) {
222
				InformationsRecherche informationsRechercheImages = CacheClient.getInstance().getInformationsRechercheImage();
223
				if (informationsRechercheImages.getTriParMoyenneArithmetique() != ModeTri.PAS_DE_TRI) {
224
					informationsRechercheImages.setIdProtocoleSelectionne(event.getProtocole().getId() + "");
225
					chargerEtAfficherImagesPageEnCours();
226
				}
227
			}
228
		});
229
	}
230
 
231
	protected void surClicTriTag() {
232
		triCourantTag = (triCourantTag == ModeTri.TRI_ASCENDANT) ? ModeTri.TRI_DESCENDANT : ModeTri.TRI_ASCENDANT;
233
		mettreAjourAffichageTriTag();
234
		InformationsRecherche informationsRechercheImages = CacheClient.getInstance().getInformationsRechercheImage();
235
		informationsRechercheImages.setTriParNbTags(triCourantTag);
236
		informationsRechercheImages.setTriParDatePublication(ModeTri.PAS_DE_TRI);
237
		informationsRechercheImages.setTriParMoyenneArithmetique(ModeTri.PAS_DE_TRI);
238
		informationsRechercheImages.setTriParNbPoints(ModeTri.PAS_DE_TRI);
239
		chargerEtAfficherImagesPageEnCours();
240
	}
241
 
242
	private void mettreAjourAffichageTriTag() {
243
		vue.masquerDateDescendant();
244
		vue.masquerDateAscendant();
245
		vue.masquerMoyenneArithmetiqueDescendant();
246
		vue.masquerMoyenneArithmetiqueAscendant();
247
		vue.masquerPointsAscendant();
248
		vue.masquerPointsDescendant();
249
		if (triCourantTag == ModeTri.TRI_ASCENDANT) {
250
			vue.masquerTagDescendant();
251
			vue.afficherTagAscendant();
252
		} else {
253
			vue.masquerTagAscendant();
254
			vue.afficherTagDescendant();
255
		}
256
	}
257
 
258
	public void surClicTriMoyenneArithmetique() {
259
		triCourantMoyenneArithmetique = (triCourantMoyenneArithmetique == ModeTri.TRI_ASCENDANT) ? ModeTri.TRI_DESCENDANT : ModeTri.TRI_ASCENDANT;
260
		mettreAJourAffichageTriMoyenneArithmetique();
261
		InformationsRecherche informationsRechercheImages = CacheClient.getInstance().getInformationsRechercheImage();
262
		int IdProtocole = CacheClient.getInstance().getProtocoleCourant().getId();
263
		informationsRechercheImages.setTriParMoyenneArithmetique(triCourantMoyenneArithmetique);
264
		informationsRechercheImages.setIdProtocoleSelectionne(IdProtocole + "");
265
		informationsRechercheImages.setTriParDatePublication(ModeTri.PAS_DE_TRI);
266
		informationsRechercheImages.setTriParNbTags(ModeTri.PAS_DE_TRI);
267
		informationsRechercheImages.setTriParNbPoints(ModeTri.PAS_DE_TRI);
268
		chargerEtAfficherImagesPageEnCours();
269
	}
270
 
271
	private void mettreAJourAffichageTriMoyenneArithmetique() {
272
		vue.masquerDateDescendant();
273
		vue.masquerDateAscendant();
274
		vue.masquerTagAscendant();
275
		vue.masquerTagDescendant();
276
		vue.masquerPointsAscendant();
277
		vue.masquerPointsDescendant();
278
		if (triCourantMoyenneArithmetique == ModeTri.TRI_ASCENDANT) {
279
			vue.masquerMoyenneArithmetiqueDescendant();
280
			vue.afficherMoyenneArithmetiqueAscendant();
281
		} else {
282
			vue.masquerMoyenneArithmetiqueAscendant();
283
			vue.afficherMoyenneArithmetiqueDescendant();
284
		}
285
	}
286
 
287
	public void surClicTriPoints() {
288
		triCourantPoints = (triCourantPoints == ModeTri.TRI_ASCENDANT) ? ModeTri.TRI_DESCENDANT : ModeTri.TRI_ASCENDANT;
289
		mettreAJourAffichageTriPoints();
290
		InformationsRecherche informationsRechercheImages = CacheClient.getInstance().getInformationsRechercheImage();
291
		int IdProtocole = CacheClient.getInstance().getProtocoleCourant().getId();
292
		informationsRechercheImages.setTriParNbPoints(triCourantPoints);
293
		informationsRechercheImages.setIdProtocoleSelectionne(IdProtocole + "");
294
		informationsRechercheImages.setTriParDatePublication(ModeTri.PAS_DE_TRI);
295
		informationsRechercheImages.setTriParNbTags(ModeTri.PAS_DE_TRI);
296
		informationsRechercheImages.setTriParMoyenneArithmetique(ModeTri.PAS_DE_TRI);
297
		chargerEtAfficherImagesPageEnCours();
298
	}
299
 
300
	private void mettreAJourAffichageTriPoints() {
301
		vue.masquerDateDescendant();
302
		vue.masquerDateAscendant();
303
		vue.masquerTagAscendant();
304
		vue.masquerTagDescendant();
305
		vue.masquerMoyenneArithmetiqueAscendant();
306
		vue.masquerMoyenneArithmetiqueDescendant();
307
		if (triCourantPoints == ModeTri.TRI_ASCENDANT) {
308
			vue.masquerPointsDescendant();
309
			vue.afficherPointsAscendant();
310
		} else {
311
			vue.masquerPointsAscendant();
312
			vue.afficherPointsDescendant();
313
		}
314
	}
315
 
316
	public void surClicTriDate() {
317
		triCourantDate = (triCourantDate == ModeTri.TRI_ASCENDANT) ? ModeTri.TRI_DESCENDANT : ModeTri.TRI_ASCENDANT;
318
		mettreAJourAffichageTriDate();
319
		InformationsRecherche informationsRechercheImages = CacheClient.getInstance().getInformationsRechercheImage();
320
		informationsRechercheImages.setTriParDatePublication(triCourantDate);
321
		informationsRechercheImages.setTriParMoyenneArithmetique(ModeTri.PAS_DE_TRI);
322
		informationsRechercheImages.setTriParNbTags(ModeTri.PAS_DE_TRI);
323
		informationsRechercheImages.setTriParNbPoints(ModeTri.PAS_DE_TRI);
324
		chargerEtAfficherImagesPageEnCours();
325
	}
326
 
327
	private void mettreAJourAffichageTriDate() {
328
		vue.masquerTagAscendant();
329
		vue.masquerTagDescendant();
330
		vue.masquerMoyenneArithmetiqueDescendant();
331
		vue.masquerMoyenneArithmetiqueAscendant();
332
		vue.masquerPointsAscendant();
333
		vue.masquerPointsDescendant();
334
		if (triCourantDate == ModeTri.TRI_ASCENDANT) {
335
			vue.masquerDateDescendant();
336
			vue.afficherDateAscendant();
337
		} else {
338
			vue.masquerDateAscendant();
339
			vue.afficherDateDescendant();
340
		}
341
	}
342
 
343
	public void rechercherImagesEtCreerWidgetPagination() {
344
		// appel du service d'image pour avoir le nb total d'elements pour la
345
		// pagination
346
		ImagesParTaxonCallback callback = new ImagesParTaxonCallback() {
347
 
348
			@Override
349
			public void surRetour(ImageServiceResultat imagesRecues) {
350
				creerWidgetPagination(imagesRecues.getNbTotalImagesPourLaRecherche());
351
				afficherImages(imagesRecues);
352
 
353
			}
354
 
355
			@Override
356
			public void surErreur(String messageErreur) {
357
				Window.alert(messageErreur);
358
 
359
			}
360
		};
361
		final int debut = (CacheClient.getInstance().getPageCouranteRechercheImage() - 1) * CacheClient.getInstance().getPasPagination();
362
		final int fin = (CacheClient.getInstance().getPageCouranteRechercheImage()) * CacheClient.getInstance().getPasPagination();
363
		imageService.getImagesParTaxon(CacheClient.getInstance().getInformationsRechercheImage(), debut, fin, callback);
364
	}
365
 
366
	private void chargerEtAfficherImages(final int premier, final int dernier) {
367
		vue.startChargement();
368
		vue.nettoyer();
369
		ImagesParTaxonCallback callback = new ImagesParTaxonCallback() {
370
 
371
			@Override
372
			public void surRetour(ImageServiceResultat imagesRecues) {
373
				afficherImages(imagesRecues);
374
			}
375
 
376
			@Override
377
			public void surErreur(String messageErreur) {
378
				Window.alert(messageErreur);
379
			}
380
 
381
		};
382
		imageService.getImagesParTaxon(CacheClient.getInstance().getInformationsRechercheImage(), premier, dernier, callback);
383
	}
384
 
385
	public void afficherImages(ImageServiceResultat imageServiceResult) {
386
		List<Image> images = imageServiceResult.getImages();
387
		if (images == null || images.size() == 0) {
388
			vue.afficherElementsAucunResultatTrouve();
389
		} else {
390
			vue.afficherElementsResultatsTrouve();
391
			for (Image image : images) {
392
				ImagePresenteur imagePresenteur = new ImagePresenteur(image, imageService, CacheClient.getInstance().getProtocoleCourant(), new ImageVue());
393
				imagePresenteur.go(vue.getImageTable());
394
			}
395
		}
396
		CacheClient.getInstance().mettreAjourUrlCourante();
397
		vue.stopChargement();
398
	}
399
 
400
	private void creerWidgetPagination(int nbImages) {
401
		PaginationPresenteur imagesPaginationPresenteurHaut = creerPresenteurPagination(nbImages);
402
		PaginationPresenteur imagesPaginationPresenteurBas = creerPresenteurPagination(nbImages);
403
		imagesPaginationPresenteurHaut.setGroupePagination("pagination_images");
404
		imagesPaginationPresenteurBas.setGroupePagination("pagination_images");
405
		imagesPaginationPresenteurHaut.go(vue.getPanneauPaginationHaut());
406
		imagesPaginationPresenteurBas.go(vue.getPanneauPagination());
407
	}
408
 
409
	public PaginationPresenteur creerPresenteurPagination(int nbImages) {
410
		PaginationPresenteur imagesPaginationPresenteur = new PaginationPresenteur(new PaginationVue(), nbImages, CacheClient.getInstance().getPasPagination(), CacheClient.getInstance().getPageCouranteRechercheImage()) {
411
			@Override
412
			public void chargerElements(int debut, int fin) {
413
				chargerEtAfficherImages(debut, fin);
414
				CacheClient.getInstance().setPageCouranteRechercheImages(getPageCourante());
415
			}
416
 
417
			@Override
418
			public void actualiserPasCache(int pas) {
419
				CacheClient.getInstance().setPasPagination(pas);
420
			}
421
		};
422
		return imagesPaginationPresenteur;
423
	}
424
 
425
	public void chargerEtAfficherImagesPageEnCours() {
426
		final int debut = (CacheClient.getInstance().getPageCouranteRechercheImage() - 1) * CacheClient.getInstance().getPasPagination();
427
		final int fin = (CacheClient.getInstance().getPageCouranteRechercheImage()) * CacheClient.getInstance().getPasPagination();
428
		chargerEtAfficherImages(debut, fin);
429
	}
430
 
431
	public Vue getVue() {
432
		return vue;
433
	}
434
}