Subversion Repositories eFlore/Applications.del

Rev

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