Subversion Repositories eFlore/Applications.del

Rev

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