Subversion Repositories eFlore/Applications.del

Rev

Rev 1501 | 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
 
61
		public HasClickHandlers getTriParDateAscendant();
62
 
63
		public HasClickHandlers getTriParDateDescendant();
64
 
65
		public HasClickHandlers getTriParNbTagsAscendant();
66
 
67
		public HasClickHandlers getTriParNbTagsDescendant();
68
 
69
		public void afficherElementsAucunResultatTrouve();
70
 
71
		public void afficherElementsResultatsTrouve();
72
 
73
		public HTMLPanel getImageTable();
74
 
75
		public HasClickHandlers getLabelVote();
76
 
77
		public void masquerVoteAscendant();
78
 
79
		public void masquerVoteDescendant();
80
 
81
		public void afficherVoteAscendant();
82
 
83
		public void afficherVoteDescendant();
84
 
85
		public HasClickHandlers getLabelDate();
86
 
87
		public HasClickHandlers getLabelTag();
88
 
89
		public void masquerDateAscendant();
90
 
91
		public void masquerDateDescendant();
92
 
93
		public void afficherDateAscendant();
94
 
95
		public void afficherDateDescendant();
96
 
97
		public void masquerTagAscendant();
98
 
99
		public void afficherTagDescendant();
100
 
101
		public void masquerTagDescendant();
102
 
103
		public void afficherTagAscendant();
104
 
105
	}
106
 
107
	private Vue vue;
108
	private ImageService imageService;
109
	private final ProtocoleService protocoleService;
110
	private ModeTri triCourantVote = ModeTri.TRI_ASCENDANT;
111
	private ModeTri triCourantDate = ModeTri.TRI_DESCENDANT;
112
	private ModeTri triCourantTag = ModeTri.TRI_DESCENDANT;
113
 
114
	public ResultatPictofloraPresenteur(ImageService imageService, ProtocoleService protocoleService, Vue vue) {
115
		this.vue = vue;
116
		this.imageService = imageService;
117
		this.protocoleService=protocoleService;
118
	}
119
 
120
	public void go(HasWidgets composite) {
121
		composite.add(vue.asWidget());
122
		vue.startChargement();
123
		rechercherImagesEtCreerWidgetPagination();
124
		gererEvenements();
125
		vue.masquerVoteDescendant();
126
		vue.masquerVoteAscendant();
1329 gduche 127
		vue.masquerDateDescendant();
1196 gduche 128
		vue.masquerDateAscendant();
129
		vue.masquerTagAscendant();
130
		vue.masquerTagDescendant();
1496 aurelien 131
 
132
		initialiserAPartirInfosCache();
1196 gduche 133
	}
1496 aurelien 134
 
135
	private void initialiserAPartirInfosCache() {
136
		InformationsRecherche infos = CacheClient.getInstance().getInformationsRechercheImage();
137
		if(infos.getTriParDate() != ModeTri.PAS_DE_TRI) {
138
			mettreAJourAffichageTriDate();
139
		}
140
 
141
		if(infos.getTriParNbVotes() != ModeTri.PAS_DE_TRI) {
142
			mettreAJourAffichageTriVote();
143
		}
144
 
145
		if(infos.getTriParNbTags() != ModeTri.PAS_DE_TRI) {
146
			mettreAjourAffichageTriTag();
147
		}
148
 
149
	}
1196 gduche 150
 
151
	public void gererEvenements() {
152
		ClickHandler surClicTriVote = new ClickHandler() {
153
			@Override
154
			public void onClick(ClickEvent event) {
155
				surClicTriVote();
156
			}
157
		};
158
 
159
		vue.getLabelVote().addClickHandler(surClicTriVote);
160
		vue.getTriParNbVotesAscendant().addClickHandler(surClicTriVote);
161
		vue.getTriParNbVotesDescendant().addClickHandler(surClicTriVote);
162
 
163
		ClickHandler surClicTriDate = new ClickHandler() {
164
			@Override
165
			public void onClick(ClickEvent event) {
166
				surClicTriDate();
167
			}
168
		};
169
 
170
		vue.getLabelDate().addClickHandler(surClicTriDate);
171
		vue.getTriParDateAscendant().addClickHandler(surClicTriDate);
172
		vue.getTriParDateDescendant().addClickHandler(surClicTriDate);
173
 
174
		ClickHandler surClicTriTag = new ClickHandler() {
175
			@Override
176
			public void onClick(ClickEvent event) {
177
				surClicTriTag();
178
			}
179
		};
180
 
181
		vue.getLabelTag().addClickHandler(surClicTriTag);
182
		vue.getTriParNbTagsAscendant().addClickHandler(surClicTriTag);
183
		vue.getTriParNbTagsDescendant().addClickHandler(surClicTriTag);
184
 
185
		BusEvenementiel.getInstance().addHandler(EvenementChangementProtocole.TYPE, new GestionnaireEvenementChangementProtocole() {
186
			@Override
187
			public void onChangementProtocole(EvenementChangementProtocole event) {
188
				InformationsRecherche informationsRechercheImages = CacheClient.getInstance().getInformationsRechercheImage();
189
				if (informationsRechercheImages.getTriParNbVotes() != ModeTri.PAS_DE_TRI) {
190
					informationsRechercheImages.setIdProtocoleSelectionne(event.getProtocole().getId() + "");
191
					chargerEtAfficherImagesPageEnCours();
192
				}
193
			}
194
		});
195
	}
196
 
197
	protected void surClicTriTag() {
1496 aurelien 198
		mettreAjourAffichageTriTag();
199
		InformationsRecherche informationsRechercheImages = CacheClient.getInstance().getInformationsRechercheImage();
200
		informationsRechercheImages.setTriParNbTags(triCourantTag);
201
		informationsRechercheImages.setTriParDate(ModeTri.PAS_DE_TRI);
202
		informationsRechercheImages.setTriParNbVotes(ModeTri.PAS_DE_TRI);
203
		chargerEtAfficherImagesPageEnCours();
204
	}
205
 
206
	private void mettreAjourAffichageTriTag() {
1196 gduche 207
		vue.masquerDateDescendant();
208
		vue.masquerDateAscendant();
209
		vue.masquerVoteDescendant();
210
		vue.masquerVoteAscendant();
211
		if (triCourantTag == ModeTri.TRI_ASCENDANT) {
212
			triCourantTag = ModeTri.TRI_DESCENDANT;
213
			vue.masquerTagAscendant();
214
			vue.afficherTagDescendant();
215
		} else {
216
			triCourantTag = ModeTri.TRI_ASCENDANT;
217
			vue.masquerTagDescendant();
218
			vue.afficherTagAscendant();
219
		}
1496 aurelien 220
	}
221
 
222
	public void surClicTriVote() {
223
		mettreAJourAffichageTriVote();
1196 gduche 224
		InformationsRecherche informationsRechercheImages = CacheClient.getInstance().getInformationsRechercheImage();
1496 aurelien 225
		int IdProtocole = CacheClient.getInstance().getProtocoleCourant().getId();
226
		informationsRechercheImages.setTriParNbVotes(triCourantVote);
227
		informationsRechercheImages.setIdProtocoleSelectionne(IdProtocole + "");
1196 gduche 228
		informationsRechercheImages.setTriParDate(ModeTri.PAS_DE_TRI);
1496 aurelien 229
		informationsRechercheImages.setTriParNbTags(ModeTri.PAS_DE_TRI);
1196 gduche 230
		chargerEtAfficherImagesPageEnCours();
231
	}
1496 aurelien 232
 
233
	private void mettreAJourAffichageTriVote() {
1196 gduche 234
		vue.masquerDateDescendant();
235
		vue.masquerDateAscendant();
236
		vue.masquerTagAscendant();
237
		vue.masquerTagDescendant();
238
		if (triCourantVote == ModeTri.TRI_ASCENDANT) {
239
			triCourantVote = ModeTri.TRI_DESCENDANT;
240
			vue.masquerVoteAscendant();
241
			vue.afficherVoteDescendant();
242
		} else {
243
			triCourantVote = ModeTri.TRI_ASCENDANT;
244
			vue.masquerVoteDescendant();
245
			vue.afficherVoteAscendant();
246
		}
1496 aurelien 247
	}
248
 
249
	public void surClicTriDate() {
250
		mettreAJourAffichageTriDate();
1196 gduche 251
		InformationsRecherche informationsRechercheImages = CacheClient.getInstance().getInformationsRechercheImage();
1496 aurelien 252
		informationsRechercheImages.setTriParDate(triCourantDate);
253
		informationsRechercheImages.setTriParNbVotes(ModeTri.PAS_DE_TRI);
1196 gduche 254
		informationsRechercheImages.setTriParNbTags(ModeTri.PAS_DE_TRI);
255
		chargerEtAfficherImagesPageEnCours();
256
	}
1496 aurelien 257
 
258
	private void mettreAJourAffichageTriDate() {
259
		vue.masquerTagAscendant();
260
		vue.masquerTagDescendant();
1196 gduche 261
		vue.masquerVoteDescendant();
262
		vue.masquerVoteAscendant();
263
		if (triCourantDate == ModeTri.TRI_ASCENDANT) {
264
			triCourantDate = ModeTri.TRI_DESCENDANT;
265
			vue.masquerDateAscendant();
266
			vue.afficherDateDescendant();
267
		} else {
268
			triCourantDate = ModeTri.TRI_ASCENDANT;
269
			vue.masquerDateDescendant();
270
			vue.afficherDateAscendant();
271
		}
272
	}
273
 
274
	public void rechercherImagesEtCreerWidgetPagination() {
275
		// appel du service d'image pour avoir le nb total d'elements pour la
276
		// pagination
277
		ImagesParTaxonCallback callback = new ImagesParTaxonCallback() {
278
 
279
			@Override
280
			public void surRetour(ImageServiceResultat imagesRecues) {
281
				creerWidgetPagination(imagesRecues.getNbTotalImagesPourLaRecherche());
282
				afficherImages(imagesRecues);
283
 
284
			}
285
 
286
			@Override
287
			public void surErreur(String messageErreur) {
288
				Window.alert(messageErreur);
289
 
290
			}
291
		};
292
		final int debut = (CacheClient.getInstance().getPageCouranteRechercheImage() - 1) * CacheClient.getInstance().getPasPagination();
293
		final int fin = (CacheClient.getInstance().getPageCouranteRechercheImage()) * CacheClient.getInstance().getPasPagination();
294
		imageService.getImagesParTaxon(CacheClient.getInstance().getInformationsRechercheImage(), debut, fin, callback);
295
	}
296
 
297
	private void chargerEtAfficherImages(final int premier, final int dernier) {
298
		vue.startChargement();
299
		vue.nettoyer();
300
		ImagesParTaxonCallback callback = new ImagesParTaxonCallback() {
301
 
302
			@Override
303
			public void surRetour(ImageServiceResultat imagesRecues) {
304
				afficherImages(imagesRecues);
305
			}
306
 
307
			@Override
308
			public void surErreur(String messageErreur) {
309
				Window.alert(messageErreur);
310
			}
311
 
312
		};
313
		imageService.getImagesParTaxon(CacheClient.getInstance().getInformationsRechercheImage(), premier, dernier, callback);
314
	}
315
 
316
	public void afficherImages(ImageServiceResultat imageServiceResult) {
317
		List<Image> images = imageServiceResult.getImages();
318
		if (images == null || images.size() == 0) {
319
			vue.afficherElementsAucunResultatTrouve();
320
		} else {
321
			vue.afficherElementsResultatsTrouve();
322
			for (Image image : images) {
323
				ImagePresenteur imagePresenteur = new ImagePresenteur(image, CacheClient.getInstance().getProtocoleCourant(), new ImageVue());
324
				imagePresenteur.go(vue.getImageTable());
325
			}
326
		}
1501 aurelien 327
		CacheClient.getInstance().mettreAjourUrlCourante();
1196 gduche 328
		vue.stopChargement();
329
	}
330
 
331
	private void creerWidgetPagination(int nbImages) {
332
		PaginationPresenteur imagesPaginationPresenteurHaut = creerPresenteurPagination(nbImages);
333
		PaginationPresenteur imagesPaginationPresenteurBas = creerPresenteurPagination(nbImages);
334
		imagesPaginationPresenteurHaut.setGroupePagination("pagination_images");
335
		imagesPaginationPresenteurBas.setGroupePagination("pagination_images");
336
		imagesPaginationPresenteurHaut.go(vue.getPanneauPaginationHaut());
337
		imagesPaginationPresenteurBas.go(vue.getPanneauPagination());
338
	}
339
 
340
	public PaginationPresenteur creerPresenteurPagination(int nbImages) {
341
		PaginationPresenteur imagesPaginationPresenteur = new PaginationPresenteur(new PaginationVue(), nbImages, CacheClient.getInstance().getPasPagination(), CacheClient.getInstance().getPageCouranteRechercheImage()) {
342
			@Override
343
			public void chargerElements(int debut, int fin) {
344
				chargerEtAfficherImages(debut, fin);
345
				CacheClient.getInstance().setPageCouranteRechercheImages(getPageCourante());
346
			}
347
 
348
			@Override
349
			public void actualiserPasCache(int pas) {
350
				CacheClient.getInstance().setPasPagination(pas);
351
			}
352
		};
353
		return imagesPaginationPresenteur;
354
	}
355
 
356
	public void chargerEtAfficherImagesPageEnCours() {
357
		final int debut = (CacheClient.getInstance().getPageCouranteRechercheImage() - 1) * CacheClient.getInstance().getPasPagination();
358
		final int fin = (CacheClient.getInstance().getPageCouranteRechercheImage()) * CacheClient.getInstance().getPasPagination();
359
		chargerEtAfficherImages(debut, fin);
360
	}
361
 
362
	public Vue getVue() {
363
		return vue;
364
	}
365
}