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 final ProtocoleService protocoleService;
125
	private ModeTri triCourantMoyenneArithmetique = ModeTri.TRI_ASCENDANT;
126
	private ModeTri triCourantPoints = ModeTri.TRI_ASCENDANT;
127
	private ModeTri triCourantDate = ModeTri.TRI_DESCENDANT;
128
	private ModeTri triCourantTag = ModeTri.TRI_DESCENDANT;
129
 
130
	public ResultatPictofloraPresenteur(ImageService imageService, ProtocoleService protocoleService, Vue vue) {
131
		this.vue = vue;
132
		this.imageService = imageService;
133
		this.protocoleService=protocoleService;
134
	}
135
 
136
	public void go(HasWidgets composite) {
137
		composite.add(vue.asWidget());
138
		vue.startChargement();
139
		rechercherImagesEtCreerWidgetPagination();
140
		gererEvenements();
141
		vue.masquerMoyenneArithmetiqueDescendant();
142
		vue.masquerMoyenneArithmetiqueAscendant();
143
		vue.masquerDateDescendant();
144
		vue.masquerDateAscendant();
145
		vue.masquerTagAscendant();
146
		vue.masquerTagDescendant();
147
		vue.masquerPointsAscendant();
148
		vue.masquerPointsDescendant();
149
 
150
		initialiserAPartirInfosCache();
151
	}
152
 
153
	private void initialiserAPartirInfosCache() {
154
		InformationsRecherche infos = CacheClient.getInstance().getInformationsRechercheImage();
155
		if (infos.getTriParDatePublication() != ModeTri.PAS_DE_TRI) {
156
			triCourantDate = infos.getTriParDatePublication();
157
			mettreAJourAffichageTriDate();
158
		}
159
 
160
		if (infos.getTriParMoyenneArithmetique() != ModeTri.PAS_DE_TRI) {
161
			triCourantMoyenneArithmetique = infos.getTriParMoyenneArithmetique();
162
			mettreAJourAffichageTriMoyenneArithmetique();
163
		}
164
 
165
		if (infos.getTriParNbPoints() != ModeTri.PAS_DE_TRI) {
166
			triCourantPoints = infos.getTriParNbPoints();
167
			mettreAJourAffichageTriPoints();
168
		}
169
 
170
		if (infos.getTriParNbTags() != ModeTri.PAS_DE_TRI) {
171
			triCourantTag = infos.getTriParNbTags();
172
			mettreAjourAffichageTriTag();
173
		}
174
	}
175
 
176
	public void gererEvenements() {
177
		ClickHandler surClicTriMoyenneArithmetique = new ClickHandler() {
178
			@Override
179
			public void onClick(ClickEvent event) {
180
				surClicTriMoyenneArithmetique();
181
			}
182
		};
183
 
184
		vue.getLabelMoyenneArithmetique().addClickHandler(surClicTriMoyenneArithmetique);
185
		vue.getTriParMoyenneArithmetiqueAscendant().addClickHandler(surClicTriMoyenneArithmetique);
186
		vue.getTriParMoyenneArithmetiqueDescendant().addClickHandler(surClicTriMoyenneArithmetique);
187
 
188
		ClickHandler surClicTriPoints = new ClickHandler() {
189
			@Override
190
			public void onClick(ClickEvent event) {
191
				surClicTriPoints();
192
			}
193
		};
194
 
195
		vue.getLabelPoints().addClickHandler(surClicTriPoints);
196
		vue.getTriParPointsAscendant().addClickHandler(surClicTriPoints);
197
		vue.getTriParPointsDescendant().addClickHandler(surClicTriPoints);
198
 
199
		ClickHandler surClicTriDate = new ClickHandler() {
200
			@Override
201
			public void onClick(ClickEvent event) {
202
				surClicTriDate();
203
			}
204
		};
205
 
206
		vue.getLabelDate().addClickHandler(surClicTriDate);
207
		vue.getTriParDateAscendant().addClickHandler(surClicTriDate);
208
		vue.getTriParDateDescendant().addClickHandler(surClicTriDate);
209
 
210
		ClickHandler surClicTriTag = new ClickHandler() {
211
			@Override
212
			public void onClick(ClickEvent event) {
213
				surClicTriTag();
214
			}
215
		};
216
 
217
		vue.getLabelTag().addClickHandler(surClicTriTag);
218
		vue.getTriParNbTagsAscendant().addClickHandler(surClicTriTag);
219
		vue.getTriParNbTagsDescendant().addClickHandler(surClicTriTag);
220
 
221
		BusEvenementiel.getInstance().addHandler(EvenementChangementProtocole.TYPE, new GestionnaireEvenementChangementProtocole() {
222
			@Override
223
			public void onChangementProtocole(EvenementChangementProtocole event) {
224
				InformationsRecherche informationsRechercheImages = CacheClient.getInstance().getInformationsRechercheImage();
225
				if (informationsRechercheImages.getTriParMoyenneArithmetique() != ModeTri.PAS_DE_TRI) {
226
					informationsRechercheImages.setIdProtocoleSelectionne(event.getProtocole().getId() + "");
227
					chargerEtAfficherImagesPageEnCours();
228
				}
229
			}
230
		});
231
	}
232
 
233
	protected void surClicTriTag() {
234
		triCourantTag = (triCourantTag == ModeTri.TRI_ASCENDANT) ? ModeTri.TRI_DESCENDANT : ModeTri.TRI_ASCENDANT;
235
		mettreAjourAffichageTriTag();
236
		InformationsRecherche informationsRechercheImages = CacheClient.getInstance().getInformationsRechercheImage();
237
		informationsRechercheImages.setTriParNbTags(triCourantTag);
238
		informationsRechercheImages.setTriParDatePublication(ModeTri.PAS_DE_TRI);
239
		informationsRechercheImages.setTriParMoyenneArithmetique(ModeTri.PAS_DE_TRI);
240
		informationsRechercheImages.setTriParNbPoints(ModeTri.PAS_DE_TRI);
241
		chargerEtAfficherImagesPageEnCours();
242
	}
243
 
244
	private void mettreAjourAffichageTriTag() {
245
		vue.masquerDateDescendant();
246
		vue.masquerDateAscendant();
247
		vue.masquerMoyenneArithmetiqueDescendant();
248
		vue.masquerMoyenneArithmetiqueAscendant();
249
		vue.masquerPointsAscendant();
250
		vue.masquerPointsDescendant();
251
		if (triCourantTag == ModeTri.TRI_ASCENDANT) {
252
			vue.masquerTagDescendant();
253
			vue.afficherTagAscendant();
254
		} else {
255
			vue.masquerTagAscendant();
256
			vue.afficherTagDescendant();
257
		}
258
	}
259
 
260
	public void surClicTriMoyenneArithmetique() {
261
		triCourantMoyenneArithmetique = (triCourantMoyenneArithmetique == ModeTri.TRI_ASCENDANT) ? ModeTri.TRI_DESCENDANT : ModeTri.TRI_ASCENDANT;
262
		mettreAJourAffichageTriMoyenneArithmetique();
263
		InformationsRecherche informationsRechercheImages = CacheClient.getInstance().getInformationsRechercheImage();
264
		int IdProtocole = CacheClient.getInstance().getProtocoleCourant().getId();
265
		informationsRechercheImages.setTriParMoyenneArithmetique(triCourantMoyenneArithmetique);
266
		informationsRechercheImages.setIdProtocoleSelectionne(IdProtocole + "");
267
		informationsRechercheImages.setTriParDatePublication(ModeTri.PAS_DE_TRI);
268
		informationsRechercheImages.setTriParNbTags(ModeTri.PAS_DE_TRI);
269
		informationsRechercheImages.setTriParNbPoints(ModeTri.PAS_DE_TRI);
270
		chargerEtAfficherImagesPageEnCours();
271
	}
272
 
273
	private void mettreAJourAffichageTriMoyenneArithmetique() {
274
		vue.masquerDateDescendant();
275
		vue.masquerDateAscendant();
276
		vue.masquerTagAscendant();
277
		vue.masquerTagDescendant();
278
		vue.masquerPointsAscendant();
279
		vue.masquerPointsDescendant();
280
		if (triCourantMoyenneArithmetique == ModeTri.TRI_ASCENDANT) {
281
			vue.masquerMoyenneArithmetiqueDescendant();
282
			vue.afficherMoyenneArithmetiqueAscendant();
283
		} else {
284
			vue.masquerMoyenneArithmetiqueAscendant();
285
			vue.afficherMoyenneArithmetiqueDescendant();
286
		}
287
	}
288
 
289
	public void surClicTriPoints() {
290
		triCourantPoints = (triCourantPoints == ModeTri.TRI_ASCENDANT) ? ModeTri.TRI_DESCENDANT : ModeTri.TRI_ASCENDANT;
291
		mettreAJourAffichageTriPoints();
292
		InformationsRecherche informationsRechercheImages = CacheClient.getInstance().getInformationsRechercheImage();
293
		int IdProtocole = CacheClient.getInstance().getProtocoleCourant().getId();
294
		informationsRechercheImages.setTriParNbPoints(triCourantPoints);
295
		informationsRechercheImages.setIdProtocoleSelectionne(IdProtocole + "");
296
		informationsRechercheImages.setTriParDatePublication(ModeTri.PAS_DE_TRI);
297
		informationsRechercheImages.setTriParNbTags(ModeTri.PAS_DE_TRI);
298
		informationsRechercheImages.setTriParMoyenneArithmetique(ModeTri.PAS_DE_TRI);
299
		chargerEtAfficherImagesPageEnCours();
300
	}
301
 
302
	private void mettreAJourAffichageTriPoints() {
303
		vue.masquerDateDescendant();
304
		vue.masquerDateAscendant();
305
		vue.masquerTagAscendant();
306
		vue.masquerTagDescendant();
307
		vue.masquerMoyenneArithmetiqueAscendant();
308
		vue.masquerMoyenneArithmetiqueDescendant();
309
		if (triCourantPoints == ModeTri.TRI_ASCENDANT) {
310
			vue.masquerPointsDescendant();
311
			vue.afficherPointsAscendant();
312
		} else {
313
			vue.masquerPointsAscendant();
314
			vue.afficherPointsDescendant();
315
		}
316
	}
317
 
318
	public void surClicTriDate() {
319
		triCourantDate = (triCourantDate == ModeTri.TRI_ASCENDANT) ? ModeTri.TRI_DESCENDANT : ModeTri.TRI_ASCENDANT;
320
		mettreAJourAffichageTriDate();
321
		InformationsRecherche informationsRechercheImages = CacheClient.getInstance().getInformationsRechercheImage();
322
		informationsRechercheImages.setTriParDatePublication(triCourantDate);
323
		informationsRechercheImages.setTriParMoyenneArithmetique(ModeTri.PAS_DE_TRI);
324
		informationsRechercheImages.setTriParNbTags(ModeTri.PAS_DE_TRI);
325
		informationsRechercheImages.setTriParNbPoints(ModeTri.PAS_DE_TRI);
326
		chargerEtAfficherImagesPageEnCours();
327
	}
328
 
329
	private void mettreAJourAffichageTriDate() {
330
		vue.masquerTagAscendant();
331
		vue.masquerTagDescendant();
332
		vue.masquerMoyenneArithmetiqueDescendant();
333
		vue.masquerMoyenneArithmetiqueAscendant();
334
		vue.masquerPointsAscendant();
335
		vue.masquerPointsDescendant();
336
		if (triCourantDate == ModeTri.TRI_ASCENDANT) {
337
			vue.masquerDateDescendant();
338
			vue.afficherDateAscendant();
339
		} else {
340
			vue.masquerDateAscendant();
341
			vue.afficherDateDescendant();
342
		}
343
	}
344
 
345
	public void rechercherImagesEtCreerWidgetPagination() {
346
		// appel du service d'image pour avoir le nb total d'elements pour la
347
		// pagination
348
		ImagesParTaxonCallback callback = new ImagesParTaxonCallback() {
349
 
350
			@Override
351
			public void surRetour(ImageServiceResultat imagesRecues) {
352
				creerWidgetPagination(imagesRecues.getNbTotalImagesPourLaRecherche());
353
				afficherImages(imagesRecues);
354
 
355
			}
356
 
357
			@Override
358
			public void surErreur(String messageErreur) {
359
				Window.alert(messageErreur);
360
 
361
			}
362
		};
363
		final int debut = (CacheClient.getInstance().getPageCouranteRechercheImage() - 1) * CacheClient.getInstance().getPasPagination();
364
		final int fin = (CacheClient.getInstance().getPageCouranteRechercheImage()) * CacheClient.getInstance().getPasPagination();
365
		imageService.getImagesParTaxon(CacheClient.getInstance().getInformationsRechercheImage(), debut, fin, callback);
366
	}
367
 
368
	private void chargerEtAfficherImages(final int premier, final int dernier) {
369
		vue.startChargement();
370
		vue.nettoyer();
371
		ImagesParTaxonCallback callback = new ImagesParTaxonCallback() {
372
 
373
			@Override
374
			public void surRetour(ImageServiceResultat imagesRecues) {
375
				afficherImages(imagesRecues);
376
			}
377
 
378
			@Override
379
			public void surErreur(String messageErreur) {
380
				Window.alert(messageErreur);
381
			}
382
 
383
		};
384
		imageService.getImagesParTaxon(CacheClient.getInstance().getInformationsRechercheImage(), premier, dernier, callback);
385
	}
386
 
387
	public void afficherImages(ImageServiceResultat imageServiceResult) {
388
		List<Image> images = imageServiceResult.getImages();
389
		if (images == null || images.size() == 0) {
390
			vue.afficherElementsAucunResultatTrouve();
391
		} else {
392
			vue.afficherElementsResultatsTrouve();
393
			for (Image image : images) {
394
				ImagePresenteur imagePresenteur = new ImagePresenteur(image, imageService, CacheClient.getInstance().getProtocoleCourant(), new ImageVue());
395
				imagePresenteur.go(vue.getImageTable());
396
			}
397
		}
398
		CacheClient.getInstance().mettreAjourUrlCourante();
399
		vue.stopChargement();
400
	}
401
 
402
	private void creerWidgetPagination(int nbImages) {
403
		PaginationPresenteur imagesPaginationPresenteurHaut = creerPresenteurPagination(nbImages);
404
		PaginationPresenteur imagesPaginationPresenteurBas = creerPresenteurPagination(nbImages);
405
		imagesPaginationPresenteurHaut.setGroupePagination("pagination_images");
406
		imagesPaginationPresenteurBas.setGroupePagination("pagination_images");
407
		imagesPaginationPresenteurHaut.go(vue.getPanneauPaginationHaut());
408
		imagesPaginationPresenteurBas.go(vue.getPanneauPagination());
409
	}
410
 
411
	public PaginationPresenteur creerPresenteurPagination(int nbImages) {
412
		PaginationPresenteur imagesPaginationPresenteur = new PaginationPresenteur(new PaginationVue(), nbImages, CacheClient.getInstance().getPasPagination(), CacheClient.getInstance().getPageCouranteRechercheImage()) {
413
			@Override
414
			public void chargerElements(int debut, int fin) {
415
				chargerEtAfficherImages(debut, fin);
416
				CacheClient.getInstance().setPageCouranteRechercheImages(getPageCourante());
417
			}
418
 
419
			@Override
420
			public void actualiserPasCache(int pas) {
421
				CacheClient.getInstance().setPasPagination(pas);
422
			}
423
		};
424
		return imagesPaginationPresenteur;
425
	}
426
 
427
	public void chargerEtAfficherImagesPageEnCours() {
428
		final int debut = (CacheClient.getInstance().getPageCouranteRechercheImage() - 1) * CacheClient.getInstance().getPasPagination();
429
		final int fin = (CacheClient.getInstance().getPageCouranteRechercheImage()) * CacheClient.getInstance().getPasPagination();
430
		chargerEtAfficherImages(debut, fin);
431
	}
432
 
433
	public Vue getVue() {
434
		return vue;
435
	}
436
}