Subversion Repositories eFlore/Applications.del

Rev

Rev 1862 | Rev 1934 | 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.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
 
1866 jpm 24
import com.google.gwt.core.shared.GWT;
1203 gduche 25
import com.google.gwt.dom.client.NodeList;
26
import com.google.gwt.dom.client.OptionElement;
27
import com.google.gwt.dom.client.SelectElement;
1196 gduche 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 {
1203 gduche 42
 
43
 
1196 gduche 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
 
1862 jpm 58
		public HasClickHandlers getTriParMoyenneArithmetiqueAscendant();
1196 gduche 59
 
1862 jpm 60
		public HasClickHandlers getTriParMoyenneArithmetiqueDescendant();
1196 gduche 61
 
1566 mathias 62
		public HasClickHandlers getTriParPointsAscendant();
63
 
64
		public HasClickHandlers getTriParPointsDescendant();
65
 
1196 gduche 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
 
1862 jpm 80
		public HasClickHandlers getLabelMoyenneArithmetique();
1196 gduche 81
 
1862 jpm 82
		public void masquerMoyenneArithmetiqueAscendant();
1196 gduche 83
 
1862 jpm 84
		public void masquerMoyenneArithmetiqueDescendant();
1196 gduche 85
 
1862 jpm 86
		public void afficherMoyenneArithmetiqueAscendant();
1196 gduche 87
 
1862 jpm 88
		public void afficherMoyenneArithmetiqueDescendant();
1196 gduche 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();
1566 mathias 99
 
100
		public HasClickHandlers getLabelTag();
1196 gduche 101
 
102
		public void masquerTagAscendant();
103
 
104
		public void afficherTagDescendant();
105
 
106
		public void masquerTagDescendant();
107
 
108
		public void afficherTagAscendant();
109
 
1566 mathias 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
 
1196 gduche 120
	}
121
 
122
	private Vue vue;
123
	private ImageService imageService;
124
	private final ProtocoleService protocoleService;
1862 jpm 125
	private ModeTri triCourantMoyenneArithmetique = ModeTri.TRI_ASCENDANT;
1566 mathias 126
	private ModeTri triCourantPoints = ModeTri.TRI_ASCENDANT;
1196 gduche 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();
1862 jpm 141
		vue.masquerMoyenneArithmetiqueDescendant();
142
		vue.masquerMoyenneArithmetiqueAscendant();
1329 gduche 143
		vue.masquerDateDescendant();
1196 gduche 144
		vue.masquerDateAscendant();
145
		vue.masquerTagAscendant();
146
		vue.masquerTagDescendant();
1566 mathias 147
		vue.masquerPointsAscendant();
148
		vue.masquerPointsDescendant();
1496 aurelien 149
 
150
		initialiserAPartirInfosCache();
1196 gduche 151
	}
1496 aurelien 152
 
153
	private void initialiserAPartirInfosCache() {
154
		InformationsRecherche infos = CacheClient.getInstance().getInformationsRechercheImage();
1862 jpm 155
		if (infos.getTriParDate() != ModeTri.PAS_DE_TRI) {
1866 jpm 156
			triCourantDate = infos.getTriParDate();
1496 aurelien 157
			mettreAJourAffichageTriDate();
158
		}
159
 
1862 jpm 160
		if (infos.getTriParMoyenneArithmetique() != ModeTri.PAS_DE_TRI) {
1866 jpm 161
			triCourantMoyenneArithmetique = infos.getTriParMoyenneArithmetique();
1862 jpm 162
			mettreAJourAffichageTriMoyenneArithmetique();
1496 aurelien 163
		}
164
 
1866 jpm 165
		if (infos.getTriParNbPoints() != ModeTri.PAS_DE_TRI) {
166
			triCourantPoints = infos.getTriParNbPoints();
167
			mettreAJourAffichageTriPoints();
168
		}
169
 
1862 jpm 170
		if (infos.getTriParNbTags() != ModeTri.PAS_DE_TRI) {
1866 jpm 171
			triCourantTag = infos.getTriParNbTags();
1496 aurelien 172
			mettreAjourAffichageTriTag();
173
		}
174
	}
1196 gduche 175
 
176
	public void gererEvenements() {
1862 jpm 177
		ClickHandler surClicTriMoyenneArithmetique = new ClickHandler() {
1196 gduche 178
			@Override
179
			public void onClick(ClickEvent event) {
1862 jpm 180
				surClicTriMoyenneArithmetique();
1196 gduche 181
			}
182
		};
183
 
1862 jpm 184
		vue.getLabelMoyenneArithmetique().addClickHandler(surClicTriMoyenneArithmetique);
185
		vue.getTriParMoyenneArithmetiqueAscendant().addClickHandler(surClicTriMoyenneArithmetique);
186
		vue.getTriParMoyenneArithmetiqueDescendant().addClickHandler(surClicTriMoyenneArithmetique);
1196 gduche 187
 
1566 mathias 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
 
1196 gduche 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();
1862 jpm 225
				if (informationsRechercheImages.getTriParMoyenneArithmetique() != ModeTri.PAS_DE_TRI) {
1196 gduche 226
					informationsRechercheImages.setIdProtocoleSelectionne(event.getProtocole().getId() + "");
227
					chargerEtAfficherImagesPageEnCours();
228
				}
229
			}
230
		});
231
	}
232
 
233
	protected void surClicTriTag() {
1862 jpm 234
		triCourantTag = (triCourantTag == ModeTri.TRI_ASCENDANT) ? ModeTri.TRI_DESCENDANT : ModeTri.TRI_ASCENDANT;
1496 aurelien 235
		mettreAjourAffichageTriTag();
236
		InformationsRecherche informationsRechercheImages = CacheClient.getInstance().getInformationsRechercheImage();
237
		informationsRechercheImages.setTriParNbTags(triCourantTag);
238
		informationsRechercheImages.setTriParDate(ModeTri.PAS_DE_TRI);
1862 jpm 239
		informationsRechercheImages.setTriParMoyenneArithmetique(ModeTri.PAS_DE_TRI);
1566 mathias 240
		informationsRechercheImages.setTriParNbPoints(ModeTri.PAS_DE_TRI);
1496 aurelien 241
		chargerEtAfficherImagesPageEnCours();
242
	}
243
 
244
	private void mettreAjourAffichageTriTag() {
1196 gduche 245
		vue.masquerDateDescendant();
246
		vue.masquerDateAscendant();
1862 jpm 247
		vue.masquerMoyenneArithmetiqueDescendant();
248
		vue.masquerMoyenneArithmetiqueAscendant();
1566 mathias 249
		vue.masquerPointsAscendant();
250
		vue.masquerPointsDescendant();
1196 gduche 251
		if (triCourantTag == ModeTri.TRI_ASCENDANT) {
1862 jpm 252
			vue.masquerTagDescendant();
253
			vue.afficherTagAscendant();
254
		} else {
1196 gduche 255
			vue.masquerTagAscendant();
256
			vue.afficherTagDescendant();
257
		}
1496 aurelien 258
	}
259
 
1862 jpm 260
	public void surClicTriMoyenneArithmetique() {
261
		triCourantMoyenneArithmetique = (triCourantMoyenneArithmetique == ModeTri.TRI_ASCENDANT) ? ModeTri.TRI_DESCENDANT : ModeTri.TRI_ASCENDANT;
262
		mettreAJourAffichageTriMoyenneArithmetique();
1196 gduche 263
		InformationsRecherche informationsRechercheImages = CacheClient.getInstance().getInformationsRechercheImage();
1496 aurelien 264
		int IdProtocole = CacheClient.getInstance().getProtocoleCourant().getId();
1862 jpm 265
		informationsRechercheImages.setTriParMoyenneArithmetique(triCourantMoyenneArithmetique);
1496 aurelien 266
		informationsRechercheImages.setIdProtocoleSelectionne(IdProtocole + "");
1196 gduche 267
		informationsRechercheImages.setTriParDate(ModeTri.PAS_DE_TRI);
1496 aurelien 268
		informationsRechercheImages.setTriParNbTags(ModeTri.PAS_DE_TRI);
1566 mathias 269
		informationsRechercheImages.setTriParNbPoints(ModeTri.PAS_DE_TRI);
1196 gduche 270
		chargerEtAfficherImagesPageEnCours();
271
	}
1496 aurelien 272
 
1862 jpm 273
	private void mettreAJourAffichageTriMoyenneArithmetique() {
1196 gduche 274
		vue.masquerDateDescendant();
275
		vue.masquerDateAscendant();
276
		vue.masquerTagAscendant();
277
		vue.masquerTagDescendant();
1566 mathias 278
		vue.masquerPointsAscendant();
279
		vue.masquerPointsDescendant();
1862 jpm 280
		if (triCourantMoyenneArithmetique == ModeTri.TRI_ASCENDANT) {
281
			vue.masquerMoyenneArithmetiqueDescendant();
282
			vue.afficherMoyenneArithmetiqueAscendant();
1196 gduche 283
		} else {
1862 jpm 284
			vue.masquerMoyenneArithmetiqueAscendant();
285
			vue.afficherMoyenneArithmetiqueDescendant();
1196 gduche 286
		}
1496 aurelien 287
	}
288
 
1566 mathias 289
	public void surClicTriPoints() {
1862 jpm 290
		triCourantPoints = (triCourantPoints == ModeTri.TRI_ASCENDANT) ? ModeTri.TRI_DESCENDANT : ModeTri.TRI_ASCENDANT;
1566 mathias 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.setTriParDate(ModeTri.PAS_DE_TRI);
297
		informationsRechercheImages.setTriParNbTags(ModeTri.PAS_DE_TRI);
1862 jpm 298
		informationsRechercheImages.setTriParMoyenneArithmetique(ModeTri.PAS_DE_TRI);
1566 mathias 299
		chargerEtAfficherImagesPageEnCours();
300
	}
301
 
302
	private void mettreAJourAffichageTriPoints() {
303
		vue.masquerDateDescendant();
304
		vue.masquerDateAscendant();
305
		vue.masquerTagAscendant();
306
		vue.masquerTagDescendant();
1862 jpm 307
		vue.masquerMoyenneArithmetiqueAscendant();
308
		vue.masquerMoyenneArithmetiqueDescendant();
1566 mathias 309
		if (triCourantPoints == ModeTri.TRI_ASCENDANT) {
1862 jpm 310
			vue.masquerPointsDescendant();
311
			vue.afficherPointsAscendant();
312
		} else {
1566 mathias 313
			vue.masquerPointsAscendant();
314
			vue.afficherPointsDescendant();
315
		}
316
	}
317
 
1496 aurelien 318
	public void surClicTriDate() {
1862 jpm 319
		triCourantDate = (triCourantDate == ModeTri.TRI_ASCENDANT) ? ModeTri.TRI_DESCENDANT : ModeTri.TRI_ASCENDANT;
1496 aurelien 320
		mettreAJourAffichageTriDate();
1196 gduche 321
		InformationsRecherche informationsRechercheImages = CacheClient.getInstance().getInformationsRechercheImage();
1496 aurelien 322
		informationsRechercheImages.setTriParDate(triCourantDate);
1862 jpm 323
		informationsRechercheImages.setTriParMoyenneArithmetique(ModeTri.PAS_DE_TRI);
1196 gduche 324
		informationsRechercheImages.setTriParNbTags(ModeTri.PAS_DE_TRI);
1566 mathias 325
		informationsRechercheImages.setTriParNbPoints(ModeTri.PAS_DE_TRI);
1196 gduche 326
		chargerEtAfficherImagesPageEnCours();
327
	}
1496 aurelien 328
 
329
	private void mettreAJourAffichageTriDate() {
330
		vue.masquerTagAscendant();
331
		vue.masquerTagDescendant();
1862 jpm 332
		vue.masquerMoyenneArithmetiqueDescendant();
333
		vue.masquerMoyenneArithmetiqueAscendant();
1566 mathias 334
		vue.masquerPointsAscendant();
335
		vue.masquerPointsDescendant();
1196 gduche 336
		if (triCourantDate == ModeTri.TRI_ASCENDANT) {
1862 jpm 337
			vue.masquerDateDescendant();
338
			vue.afficherDateAscendant();
339
		} else {
1196 gduche 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) {
1672 jpm 394
				ImagePresenteur imagePresenteur = new ImagePresenteur(image, imageService, CacheClient.getInstance().getProtocoleCourant(), new ImageVue());
1196 gduche 395
				imagePresenteur.go(vue.getImageTable());
396
			}
397
		}
1501 aurelien 398
		CacheClient.getInstance().mettreAjourUrlCourante();
1196 gduche 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
}